# Primeiros passos do Data Stream

Este guia mostra como enviar seus primeiros logs com [Data Stream](/pt-br/documentacao/plataforma/data-stream/). Ao final, você terá:

- Seu primeiro stream, que envia o [Activity History](/pt-br/documentacao/fundamentos/activity-history/) da sua conta para um bucket do Object Storage.
- Um evento do Activity History produzido por você.
- As primeiras linhas de log armazenadas como um objeto no bucket, o que confirma a entrega.

O guia usa o Activity History porque qualquer alteração que você faz na conta produz um evento. Você mesmo dispara a entrega e não precisa de nenhuma conta fora da Azion.

O resultado depende de quatro objetos, nesta ordem:

1. Um **bucket** do Object Storage recebe os logs, e uma **credencial** do Object Storage permite que o Data Stream escreva nele. Você cria os dois antes de começar.
2. O **stream** coleta os logs de uma fonte de dados, *Activity History*. Ele envia todos os eventos, com sampling em 100%. O template [*Activity History Collector*](/pt-br/documentacao/plataforma/data-stream/templates-e-payload/#templates-predefinidos) transforma cada evento em uma linha de log. O endpoint é *Simple Storage Service (S3)*, apontado para o bucket. O Console chama o campo do endpoint de **Connector**.
3. Um **evento**: uma alteração que você faz na conta e que o Activity History registra.
4. Um **objeto** no bucket que contém as linhas de log desse evento.

Cada configuração do stream está descrita em [Configurações do stream](/pt-br/documentacao/plataforma/data-stream/configuracoes-do-stream/).

---

Selecione a interface que você vai usar. Os pré-requisitos e todas as etapas abaixo seguem essa escolha.

## Pré-requisitos

- Uma conta Azion. Para criar uma, consulte [Criar uma conta](/pt-br/documentacao/fundamentos/criar-uma-conta/).
- A permissão **Edit Data Stream** na conta, que permite criar, editar e excluir streams. Para mais informações, consulte [Permissões de equipes](/pt-br/documentacao/fundamentos/teams-permissions/).
- Um bucket do Object Storage. Para criar um, consulte [Primeiros passos com Object Storage](/pt-br/documentacao/plataforma/object-storage/primeiros-passos/).
- Uma credencial do Object Storage que alcance o bucket, com quatro capabilities: **List Files**, **Write Files**, **List All Bucket Names** e **List Buckets**. Na API, elas são `listFiles`, `writeFiles`, `listAllBucketNames` e `listBuckets`. Sem as duas capabilities de listagem de buckets, todo envio falha com status `503` e nenhum objeto chega ao bucket. A secret key aparece só uma vez, quando a credencial é criada. Para criar a credencial, consulte [Credenciais da compatibilidade com o protocolo S3](/pt-br/documentacao/plataforma/object-storage/compatibilidade-s3/#credenciais).

**Console**

- Acesso ao Azion Console. Para entrar, consulte [Acessar Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).

**API**

- Um [personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/) e `curl`.

> **Atenção**
>
> Salvar um stream ativo com sampling ligado desativa todos os outros streams da conta, e este stream usa sampling.

---

## Crie o stream

O stream lê a fonte de dados *Activity History*, envia todos os eventos e escreve as linhas de log no bucket. Um stream precisa de sampling ou de um filtro de workloads; este mantém o sampling ligado em 100%. Para coletar os logs de workloads escolhidos, consulte [Configurações do stream](/pt-br/documentacao/plataforma/data-stream/configuracoes-do-stream/#transform).

**Console**

Para criar o stream no Azion Console:

1. **Abra a página do Data Stream**

   Acesse [Azion Console](https://console.azion.com/) > **Data Stream**.

2. **Selecione + Stream**

3. **Dê um nome ao stream**

   Na seção **General**, em **Name**, insira `activity-to-bucket`.

4. **Selecione a fonte de dados**

   Na seção **Input**, defina **Data Source** como *Activity History*.

5. **Mantenha todos os eventos**

   Na seção **Transform**, mantenha **Option** como *All Current and Future Workloads*. Mantenha **Sampling** ligado e **Sampling Rate (%)** em `100`, os valores padrão.

6. **Selecione o template**

   Na seção **Render Template**, defina **Template** como *Activity History Collector*.

7. **Selecione o endpoint**

   Na seção **Output**, defina **Connector** como *Simple Storage Service (S3)*.

8. **Aponte o endpoint para o bucket**

   Insira os valores do seu bucket e da sua credencial:

   - **URL**: `https://s3.us-east-005.azionstorage.net`
   - **Bucket Name**: o nome do seu bucket
   - **Region**: `us-east-005`
   - **Access Key** e **Secret Key**: as chaves da sua credencial
   - **Object Key Prefix**: `activity`
   - **Content Type**: *plain/text*

9. **Mantenha o stream ativo**

   Na seção **Status**, mantenha **Active** ligado.

10. **Selecione Save**

11. **Confirme o aviso de sampling**

    A caixa de diálogo **Attention** avisa que salvar desativa todos os outros streams da conta. Selecione **Confirm**.

O Console mostra `Your data stream has been created`, e a lista do **Data Stream** mostra o stream com o status *Active*.

**API**

Para criar o stream com a Azion API, envie uma requisição `POST` para o endpoint de streams. Substitua `[TOKEN VALUE]` pelo seu personal token, `<your-bucket>` pelo nome do seu bucket e as duas chaves pelas chaves da sua credencial:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/stream/streams \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "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"
      }
    }
  ]
}'
```

O template `251` é o *Activity History Collector*. Uma resposta `201` traz o stream:

```json
{
  "state": "executed",
  "data": {
    "id": 12345,
    "name": "activity-to-bucket",
    "last_editor": "user@example.com",
    "created": "2026-01-01T11:30:47.000000Z",
    "last_modified": "2026-01-01T11:30:47.000000Z",
    "product_version": "1.0",
    "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": {
          "access_key": "[ACCESS KEY]",
          "secret_key": "[SECRET KEY]",
          "region": "us-east-005",
          "object_key_prefix": "activity",
          "bucket_name": "<your-bucket>",
          "content_type": "plain/text",
          "host_url": "https://s3.us-east-005.azionstorage.net"
        }
      }
    ]
  }
}
```

O stream existe e está ativo. Guarde o valor de `id`, que identifica o stream na próxima etapa. Uma requisição sem o item `sampling` falha com `400` e o código `32002`, `Workloads Must Be Provided`.

Salvar o stream verifica o formato de cada campo. Isso não contata o bucket, então uma chave errada aparece só como um envio com falha.

---

## Gere um evento

Um stream começa a enviar de um a dois minutos depois que você o salva como ativo. Aguarde dois minutos e faça uma alteração na conta. Cada vez que você salva o stream, o Activity History registra um evento, então renomear o stream é suficiente.

**Console**

Para renomear o stream no Azion Console:

1. **Abra o stream**

   Na lista do **Data Stream**, selecione `activity-to-bucket`.

2. **Altere o nome**

   Em **Name**, insira `activity-to-bucket-2`.

3. **Selecione Save**

4. **Confirme o aviso de sampling**

   Se a caixa de diálogo **Attention** abrir, selecione **Confirm**.

O Console mostra `Your data stream has been updated`. O Activity History registra a edição como um evento.

**API**

Para renomear o stream com a Azion API, envie uma requisição `PATCH` para o stream. Substitua `<stream-id>` pelo `id` do stream que você criou:

```bash
curl --request PATCH \
  --url https://api.azion.com/v4/workspace/stream/streams/<stream-id> \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "activity-to-bucket-2"
}'
```

Uma resposta `200` traz o stream com o nome alterado e um `last_modified` posterior:

```json
{
  "state": "executed",
  "data": {
    "id": 12345,
    "name": "activity-to-bucket-2",
    "last_editor": "user@example.com",
    "created": "2026-01-01T11:30:47.000000Z",
    "last_modified": "2026-01-01T12:01:39.000000Z",
    "product_version": "1.0",
    "active": true,
    …
  }
}
```

O Activity History registra a edição como um evento.

Em cerca de um minuto após o evento, o Data Stream envia a linha de log correspondente para o bucket.

---

## Confirme a chegada dos logs

O Data Stream escreve cada envio como um objeto. O nome do objeto é o prefixo `activity`, uma `/`, a data e a hora do envio no formato `YYYY/MM/DD/hh/mm/` e um UUID.

**Console**

Para encontrar o objeto no Azion Console:

1. **Abra a lista de buckets**

   Acesse [Azion Console](https://console.azion.com/) > **Object Storage** > **Buckets**.

2. **Selecione o bucket**

   Selecione o bucket para o qual o stream envia.

3. **Encontre o objeto sob o prefixo**

   O objeto aparece sob uma chave que começa com `activity/`. Cada `/` na chave agrupa o objeto sob um prefixo, não uma pasta.

O objeto está no bucket, o que confirma que o stream entregou o evento.

**API**

Para listar os objetos do bucket com a Azion API, envie uma requisição `GET` para o bucket. Substitua `<your-bucket>` pelo nome do seu bucket:

```bash
curl --request GET \
  --url https://api.azion.com/v4/workspace/storage/buckets/<your-bucket>/objects \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]'
```

A resposta lista o objeto que o stream escreveu, com a chave, o horário e o tamanho em bytes:

```json
{
  "continuation_token": null,
  "results": [
    {
      "key": "activity/2026/01/01/12/02/11111111-1111-1111-1111-111111111111",
      "last_modified": "2026-01-01T12:02:03.000000Z",
      "size": 2797,
      "is_folder": false
    },
    …
  ]
}
```

O objeto está no bucket, o que confirma que o stream entregou o evento.

Com **Content Type** *plain/text*, o objeto contém um registro do Activity History por linha, como um objeto JSON. As chaves são as que o template *Activity History Collector* define. Uma linha, resumida:

```json
{"comment": "-", "user_ip": "203.0.113.10", "request_data": "…", "resource_name": "activity-to-bucket-2", …, "title": "Stream activity-to-bucket-2 was edited", "author_email": "user@example.com", …, "resource_id": "12345", …, "time": "2026-01-01T12:01:39Z", "type": "edited", …, "resource_type": "Stream"}
```

Seu primeiro stream entrega o Activity History da sua conta ao bucket. Cada envio, entregue ou rejeitado, também deixa um registro com o status HTTP em [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/fontes-de-dados/#data-stream).

---

## Próximos passos

- [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints.md): Envie os logs para sua plataforma de SIEM, big data ou processamento de streams.
- [Fontes de dados e variáveis](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis.md): Colete os logs de aplicações, functions ou WAF e veja o que cada variável contém.
- [Crie um template personalizado](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/data-stream-template-personalizado.md): Escolha as variáveis que cada linha de log carrega.
- [Como o Data Stream funciona](/pt-br/documentacao/plataforma/data-stream/como-funciona.md): Como um stream filtra, agrupa em lotes e entrega cada linha de log.
