# Configurações do stream

Um stream é o objeto do [Data Stream](/pt-br/documentacao/plataforma/data-stream/) que coleta os logs de uma fonte de dados, formata cada linha de log com um template e envia as linhas para um endpoint. Azion Console e Azion API gravam o mesmo objeto, por isso cada tabela desta página mostra o rótulo do Console ao lado do campo da API. Os campos da API são escritos como caminhos dentro do corpo da requisição, como `inputs[0].attributes.data_source`.

---

## Objeto do stream

O corpo JSON abaixo é um stream completo. Ele envia todos os eventos do Activity History, formatados pelo template *Activity History Collector*, para um bucket pelo protocolo S3:

```json
{
  "name": "activity-to-bucket",
  "active": true,
  "inputs": [
    { "type": "raw_logs", "attributes": { "data_source": "activity_history" } }
  ],
  "transform": [
    { "type": "sampling", "attributes": { "rate": 100 } },
    { "type": "render_template", "attributes": { "template": 251 } }
  ],
  "outputs": [
    {
      "type": "s3",
      "attributes": {
        "host_url": "https://s3.us-east-005.azionstorage.net",
        "bucket_name": "<your-bucket>",
        "region": "us-east-005",
        "access_key": "[ACCESS KEY]",
        "secret_key": "[SECRET KEY]",
        "object_key_prefix": "activity",
        "content_type": "plain/text"
      }
    }
  ]
}
```

Os três arrays carregam as partes do stream:

- `inputs` contém uma fonte de dados.
- `transform` contém um item `render_template` e exatamente um entre `sampling` e `filter_workloads`. Cada item tem um `type` e `attributes`, então `transform[sampling].attributes.rate` indica a chave `attributes.rate` do item cujo `type` é `sampling`.
- `outputs` contém um endpoint. A API mantém a primeira entrada e descarta qualquer outra entrada sem retornar erro.

O caminho da API é `/v4/workspace/stream/streams`, e um stream específico é `/v4/workspace/stream/streams/<stream-id>`. Toda requisição leva o header `Authorization: Token [TOKEN VALUE]`, com um personal token da conta. Um `POST` responde `201` com `"state": "executed"` e o objeto armazenado, que acrescenta os campos somente leitura `id`, `last_editor`, `created`, `last_modified` e `product_version`. Um `PATCH` altera apenas as chaves que você envia: `{"active": true}` ativa um stream e o retorna com a fonte de dados, os transforms e o endpoint inalterados. Um `PUT` exige as mesmas chaves obrigatórias de uma criação. Para cada operação, consulte a [referência da Azion API](https://api.azion.com/v4). Para o token e a primeira requisição, consulte [Azion API](/pt-br/documentacao/devtools/api/).

Um stream salvo não tem etapa de implantação. Uma mudança do estado ativo entra em vigor depois de um a dois minutos, e durante esse intervalo o stream que estava ativo continua enviando. Uma conta com 3.000 workloads ou mais gerencia seus streams apenas pela API, porque o Console bloqueia os formulários de criação e edição a partir desse número.

---

## General

A seção **General** dá nome ao stream. A API exige `name`, `inputs`, `transform` e `outputs` em toda criação.

| Console  | Campo da API | Tipo   | Obrigatório | Padrão | Valores                                                           |
| -------- | ------------ | ------ | ----------- | ------ | ----------------------------------------------------------------- |
| **Name** | `name`       | string | Sim         | nenhum | De 1 a 100 caracteres. Um nome mais longo é recusado com `10046`. |

---

## Input

A seção **Input** escolhe a fonte de dados da qual o stream coleta. Cada fonte de dados tem suas próprias variáveis, listadas em [Fontes de dados e variáveis](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis/).

| Console         | Campo da API                       | Tipo | Obrigatório | Padrão                                   | Valores                                                                                                     |
| --------------- | ---------------------------------- | ---- | ----------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Data Source** | `inputs[0].attributes.data_source` | enum | Sim         | nenhum na API, *Applications* no Console | `activity_history`, `workloads`, `functions_console` ou `waf`. Qualquer outro valor é recusado com `10039`. |
| nenhum          | `inputs[0].type`                   | enum | Sim         | nenhum                                   | `raw_logs`, o único valor.                                                                                  |

O Console nomeia cada fonte de dados de forma diferente do seu slug na API:

| Opção no Console   | Slug na API         | Variáveis                                                                                                    |
| ------------------ | ------------------- | ------------------------------------------------------------------------------------------------------------ |
| *Activity History* | `activity_history`  | [Activity History](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis/#activity-history) |
| *Applications*     | `workloads`         | [Applications](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis/#applications)         |
| *Functions*        | `functions_console` | [Functions](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis/#functions)               |
| *WAF Events*       | `waf`               | [WAF Events](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis/#waf-events)             |

*Activity History* carrega o [Activity History](/pt-br/documentacao/fundamentos/activity-history/) da conta. *Functions* requer [Functions](/pt-br/documentacao/plataforma/functions/) na conta, e *WAF Events* requer [Firewall](/pt-br/documentacao/plataforma/firewall/) com WAF.

---

## Transform

A seção **Transform** define de quais [workloads](/pt-br/documentacao/plataforma/workloads/) o stream coleta e qual parcela dos eventos deles ele envia.

O botão de opção **Option** escolhe o escopo. Cada escolha envia um item diferente:

| **Option**                                   | O que o stream coleta                                                          | Item da API        |
| -------------------------------------------- | ------------------------------------------------------------------------------ | ------------------ |
| *All Current and Future Workloads*, o padrão | Todos os workloads da conta, inclusive os criados depois. Mostra **Sampling**. | `sampling`         |
| *Filter Workloads*                           | Apenas os workloads que você move para **Chosen Workload**.                    | `filter_workloads` |

Um stream carrega exatamente um dos dois itens. Sem nenhum deles, a API o recusa com `32002`, qualquer que seja a fonte de dados. Com os dois, a API o recusa com `32007`. A API não define padrão para os campos abaixo; os padrões são os do Console.

| Console               | Campo da API                                       | Padrão no Console | Valores                                                                                                                                                 |
| --------------------- | -------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Workloads**         | `transform[filter_workloads].attributes.workloads` | Nenhum            | Os workloads em **Chosen Workload**: um array de 1 a 600 IDs de workload, cada um de um workload da conta. Um ID de outra conta é recusado com `32003`. |
| **Sampling**          | `transform[sampling]`                              | Ligado            | Ligado envia um objeto `sampling`. Desligado não envia nenhum e redefine **Sampling Rate (%)** para `100`.                                              |
| **Sampling Rate (%)** | `transform[sampling].attributes.rate`              | `100`             | Inteiro de 1 a 100, obrigatório em um item `sampling`: a porcentagem de eventos que o stream envia. `0` é recusado com `10050`, e `101` com `10068`.    |

Os eventos do Activity History pertencem à conta, e não a um workload, por isso um stream de Activity History usa sampling. Em algumas contas, o Console mostra *All Current and Future Domains* e *Filter Domains* no lugar dessas opções.

Salvar um stream ativo com um item `sampling` desativa todos os outros streams da conta, e a API não retorna erro. Uma taxa de `100` conta como sampling. Antes de salvar, o Console mostra `After activating and saving these settings, all other Data Streams will be disabled.` e acrescenta `When multiple Data Streams have different sampling rates, the system uses the lowest percentage.` Para manter vários streams ativos ao mesmo tempo, dê a cada um deles um item `filter_workloads` em vez de sampling.

---

## Render Template

A seção **Render Template** escolhe o template que transforma cada evento em uma linha de log. O Console agrupa as opções de **Template** em *Azion's Templates* e *Custom Templates*, e mostra as variáveis do template selecionado no campo somente leitura **Data Set**.

| Console      | Campo da API                                     | Tipo                    | Obrigatório | Padrão                                                 | Valores                                                                                                                                                         |
| ------------ | ------------------------------------------------ | ----------------------- | ----------- | ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Template** | `transform[render_template].attributes.template` | inteiro, ID do template | Sim         | nenhum na API, o primeiro template por nome no Console | O ID de um template predefinido ou de um template personalizado da conta. Sem o item, a requisição é recusada com `32008`, e um ID que não existe, com `32004`. |

A Azion oferece cinco templates predefinidos:

| Template predefinido                 | `template` |
| ------------------------------------ | ---------- |
| *Activity History Collector*         | `251`      |
| *Applications Event Collector*       | `2`        |
| *Applications + WAF Event Collector* | `184`      |
| *Functions Event Collector*          | `86`       |
| *WAF Event Collector*                | `4`        |

**Create Custom Template** abre um drawer que cria um template personalizado na conta, listado em *Custom Templates*. Para as variáveis de cada template predefinido e o formato de um template personalizado, consulte [Templates e payload](/pt-br/documentacao/plataforma/data-stream/templates-e-payload/#templates-predefinidos).

---

## Output

A seção **Output** define o endpoint que recebe as linhas de log. O Console chama o campo de **Connector**, e a API carrega a escolha em `outputs[0].type`.

| Console       | Campo da API      | Tipo | Obrigatório | Padrão                                               | Valores                                                                                  |
| ------------- | ----------------- | ---- | ----------- | ---------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| **Connector** | `outputs[0].type` | enum | Sim         | nenhum na API, *Standard HTTP/HTTPS POST* no Console | Um dos 11 valores abaixo. Os campos próprios do endpoint vão em `outputs[0].attributes`. |

| Opção no Console              | `type` na API          | Campos                                                                                                         |
| ----------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------- |
| *Standard HTTP/HTTPS POST*    | `standard`             | [Standard HTTP/HTTPS POST](/pt-br/documentacao/plataforma/data-stream/endpoints/#standard-httphttps-post)      |
| *Apache Kafka*                | `kafka`                | [Apache Kafka](/pt-br/documentacao/plataforma/data-stream/endpoints/#apache-kafka)                             |
| *Simple Storage Service (S3)* | `s3`                   | [Simple Storage Service (S3)](/pt-br/documentacao/plataforma/data-stream/endpoints/#simple-storage-service-s3) |
| *Google BigQuery*             | `big_query`            | [Google BigQuery](/pt-br/documentacao/plataforma/data-stream/endpoints/#google-bigquery)                       |
| *Elasticsearch*               | `elasticsearch`        | [Elasticsearch](/pt-br/documentacao/plataforma/data-stream/endpoints/#elasticsearch)                           |
| *Splunk*                      | `splunk`               | [Splunk](/pt-br/documentacao/plataforma/data-stream/endpoints/#splunk)                                         |
| *AWS Kinesis Data Firehose*   | `aws_kinesis_firehose` | [AWS Kinesis Data Firehose](/pt-br/documentacao/plataforma/data-stream/endpoints/#aws-kinesis-data-firehose)   |
| *Datadog*                     | `datadog`              | [Datadog](/pt-br/documentacao/plataforma/data-stream/endpoints/#datadog)                                       |
| *IBM QRadar*                  | `qradar`               | [IBM QRadar](/pt-br/documentacao/plataforma/data-stream/endpoints/#ibm-qradar)                                 |
| *Azure Monitor*               | `azure_monitor`        | [Azure Monitor](/pt-br/documentacao/plataforma/data-stream/endpoints/#azure-monitor)                           |
| *Azure Blob Storage*          | `azure_blob_storage`   | [Azure Blob Storage](/pt-br/documentacao/plataforma/data-stream/endpoints/#azure-blob-storage)                 |

---

## Status

A seção **Status** liga ou desliga o stream. A lista de streams mostra cada um como *Active* ou *Inactive*.

| Console    | Campo da API | Tipo    | Obrigatório | Padrão                      | Valores                                                                        |
| ---------- | ------------ | ------- | ----------- | --------------------------- | ------------------------------------------------------------------------------ |
| **Active** | `active`     | boolean | Não         | `true`, e ligado no Console | `false` para o stream e mantém as configurações dele. `true` o inicia de novo. |

Uma mudança do estado ativo entra em vigor depois de um a dois minutos. Ativar um stream que tem um item `sampling` desativa todos os outros streams da conta.

---

## Permissões

As permissões da conta decidem quem pode alterar um stream. Para saber como as permissões são concedidas, consulte [Teams and permissions](/pt-br/documentacao/fundamentos/teams-permissions/). **View Data Stream** mostra os streams da conta, mas não permite criá-los, editá-los nem excluí-los. Criar, editar e excluir exigem **Edit Data Stream**.

Apenas com **View Data Stream**, o Console desativa **+ Stream** e todos os campos do formulário, e a página de edição não mostra **Save**. Seis campos de chave são mascarados, com um ícone que revela o valor: **Access Key**, **Secret Key** e **Object Key Prefix** do S3; **Access Key** e **Secret Key** do AWS Kinesis Data Firehose; e **Shared Key** do Azure Monitor. Sem a permissão de edição, um ícone de cadeado substitui o ícone de revelar.

---

## Erros

A API recusa cada requisição abaixo com HTTP `400`, exceto `10002`, com `401`, e não cria nada. O array `errors` carrega o código, o título e um `source.pointer` para o campo; o número em um pointer é a posição do item no seu array.

| Código            | Título                                 | Pointer                                  | Causa                                                                                                                      | O que fazer                                                                           |
| ----------------- | -------------------------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `10002`           | `Not Authenticated`                    | `source.headers` `Authorization`         | A requisição não tem token: `Authentication credentials were not provided.`                                                | Envie `Authorization: Token [TOKEN VALUE]`.                                           |
| `10046`           | `Max Length`                           | `/data/name`                             | `name` tem mais de 100 caracteres.                                                                                         | Reduza o nome para 100 caracteres ou menos.                                           |
| `10039`           | `Invalid Choice`                       | `/data/inputs/0/attributes/data_source`  | `data_source` não é um slug conhecido, como `"nope"`.                                                                      | Envie `activity_history`, `workloads`, `functions_console` ou `waf`.                  |
| `32002`           | `Workloads Must Be Provided`           | `/data/transform`                        | `transform` não tem item `sampling` nem item `filter_workloads`: `If sampling is disabled, workloads must be provided.`    | Adicione um item `sampling`, ou um item `filter_workloads` com IDs de workload.       |
| `32007`           | `Sampling And Workloads Are Exclusive` | `/data/transform`                        | `transform` tem um item `sampling` e um item `filter_workloads`: `If sampling is enabled, workloads must not be provided.` | Mantenha apenas um deles: sampling para todos os workloads, ou o filtro de workloads. |
| `32003`           | `Workloads Not Belong Account`         | `/data/transform/0/attributes/workloads` | Um ID de workload não pertence à conta. `meta.invalid_workloads` lista os IDs, como `[1]`.                                 | Envie IDs de workloads da conta.                                                      |
| `10050`           | `Min Value`                            | `/data/transform/0/attributes/rate`      | `rate` é `0`.                                                                                                              | Envie uma taxa de 1 a 100.                                                            |
| `10068`           | `Max Value`                            | `/data/transform/0/attributes/rate`      | `rate` é maior que `100`.                                                                                                  | Envie uma taxa de 1 a 100.                                                            |
| `32008`           | `Template Must Be Provided`            | `/data/transform`                        | `transform` não tem item `render_template`.                                                                                | Adicione um item `render_template` com um ID de template.                             |
| `32004`           | `Template Does Not Exist`              | `/data/transform/1/attributes/template`  | `template` não é o ID de um template predefinido nem de um template personalizado da conta.                                | Envie um ID da lista de templates.                                                    |
| `10050`           | `Min Value`                            | `/data/outputs/0/max_size`               | Um endpoint `standard` tem `max_size` menor que `1000000`.                                                                 | Envie `1000000` ou mais, ou omita `max_size`.                                         |
| `10059`           | `Required Field`                       | `/data/outputs/0/headers`                | Um endpoint `standard` não tem `headers`.                                                                                  | Envie `headers`, ou `{}` para nenhum.                                                 |
| `10059`           | `Required Field`                       | `/data/outputs/0/kafka_topic`            | Um endpoint `kafka` não tem `kafka_topic`.                                                                                 | Envie `kafka_topic`.                                                                  |
| `32006` e `10032` | `Invalid URL Scheme` e `Invalid Url`   | `/data/outputs/0/url`                    | Um endpoint `standard` tem uma `url` que não é uma URL `http` ou `https`, como `not-a-url`.                                | Envie uma URL completa que comece com `http://` ou `https://`.                        |

Dois comportamentos não retornam erro. Uma segunda entrada em `outputs` é descartada, e o stream mantém a primeira. Salvar um stream ativo com um item `sampling` desativa todos os outros streams da conta.

---

## Recursos relacionados

- [Fontes de dados e variáveis](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis.md): As variáveis que cada fonte de dados carrega, com um valor de exemplo para cada uma.
- [Templates e payload](/pt-br/documentacao/plataforma/data-stream/templates-e-payload.md): As variáveis de cada template predefinido e como um template personalizado formata uma linha de log.
- [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints.md): Os campos, valores e limites de cada um dos 11 tipos de endpoint.
- [Como o Data Stream funciona](/pt-br/documentacao/plataforma/data-stream/como-funciona.md): O caminho que um evento percorre da fonte de dados até o endpoint, e como o stream agrupa as linhas de log em lotes.
