---
name: azion-depure-functions-com-o-data-stream
description: >-
  Envie as mensagens de log das suas functions, com o nível e o ID da requisição, para um endpoint com Data Stream, no Azion Console ou pela Azion API.
---

# Depure functions com o Data Stream

Você pode enviar as mensagens de log das suas functions para um endpoint com um stream do [Data Stream](/pt-br/documentacao/plataforma/data-stream/), pelo Azion Console ou pela Azion API. Para rastrear quais regras do Rules Engine rodaram em uma requisição, consulte [Depure regras criadas com Rules Engine](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/primeiros-passos/debug-regras/).

Uma function escreve mensagens de log com `console.log`. A fonte de dados *Functions* traz cada mensagem com o nível, a origem e o ID da requisição, e o template *Functions Event Collector* coloca cada mensagem em uma linha de log própria. Para conhecer todas as variáveis da fonte de dados, consulte [Fontes de dados e variáveis](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis/#functions).

---

Selecione sua interface uma vez. Os pré-requisitos e todas as tarefas abaixo mostram apenas esse caminho.

## Pré-requisitos

- Uma conta Azion com a permissão **Edit Data Stream**. Para as permissões, consulte [Configurações do stream](/pt-br/documentacao/plataforma/data-stream/configuracoes-do-stream/#permissoes).
- Uma function que escreve mensagens de log com `console.log`, rodando em uma aplicação servida por um [workload](/pt-br/documentacao/plataforma/workloads/). Para criar uma, consulte [Functions](/pt-br/documentacao/plataforma/functions/).
- Um endpoint que recebe as linhas de log, como um endpoint HTTP. Para os endpoints aos quais um stream pode enviar, consulte [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints/).

**Console**

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

**API**

- Um personal token. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/).
- O ID do workload que serve a aplicação da function.
- `curl`.

---

## Crie o stream

O stream lê a fonte de dados *Functions* de um workload por meio de um filtro de workloads. Diferente de sampling, um filtro de workloads mantém seus outros streams ativos.

**Console**

Para criar o stream no Azion Console:

1. **Abra Data Stream**

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

2. **Selecione + Stream**

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

   Na seção **General**, insira um **Name**. Por exemplo: `functions-debug`.

4. **Selecione a fonte de dados Functions**

   Na seção **Input**, selecione *Functions* em **Data Source**.

5. **Desative Sampling**

   Na seção **Transform**, desative **Sampling** enquanto **Option** ainda está em *All Current and Future Workloads*, o valor inicial. Um stream não pode ter sampling e um filtro de workloads ao mesmo tempo.

6. **Escolha o workload**

   Na seção **Transform**, defina **Option** como *Filter Workloads*. Em **Available Workload**, selecione o workload da function e mova-o para **Chosen Workload** com a seta. Para os controles da lista de seleção, consulte [Associe workloads a um stream](/pt-br/documentacao/guias/plataforma/observabilidade/data-stream-associar-workloads/).

7. **Selecione o template**

   Na seção **Render Template**, selecione *Functions Event Collector* em **Template**. O campo **Data Set** mostra as chaves de cada linha de log.

8. **Selecione o endpoint**

   Na seção **Output**, selecione seu endpoint em **Connector** e preencha os campos que ele mostra. Cada endpoint tem os próprios campos, listados em [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints/).

9. **Mantenha o stream ativo**

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

10. **Selecione Save**

O Console mostra `Your data stream has been created`. O stream aparece na lista **Data Stream** com `functions_console` na coluna **Source** e o status *Active*.

**API**

Para criar o stream com a API, envie uma requisição `POST` para `https://api.azion.com/v4/workspace/stream/streams`. Este exemplo envia as linhas de log para um endpoint HTTP. Substitua `<workload-id>` pelo ID do seu workload, e a `url` e o header pelos valores do seu endpoint:

```bash
curl -X POST 'https://api.azion.com/v4/workspace/stream/streams' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Token [TOKEN VALUE]' \
  -d '{
    "name": "functions-debug",
    "active": true,
    "inputs": [
      { "type": "raw_logs", "attributes": { "data_source": "functions_console" } }
    ],
    "transform": [
      { "type": "filter_workloads", "attributes": { "workloads": [<workload-id>] } },
      { "type": "render_template", "attributes": { "template": 86 } }
    ],
    "outputs": [
      {
        "type": "standard",
        "attributes": {
          "url": "https://logs.example.com/ingest",
          "headers": { "Authorization": "Bearer [API KEY]" }
        }
      }
    ]
  }'
```

A fonte de dados `functions_console` é *Functions* no Console, e o template `86` é *Functions Event Collector*. Uma resposta `201` traz o stream armazenado em `data`. Guarde o `id` dele: ele identifica o stream em todas as requisições seguintes, como `/v4/workspace/stream/streams/<stream-id>`. Para todas as chaves do corpo, consulte [Configurações do stream](/pt-br/documentacao/plataforma/data-stream/configuracoes-do-stream/#objeto-do-stream).

Salvar o stream verifica o formato de cada campo e não contata o endpoint. Uma URL ou uma credencial errada só aparece quando o stream envia. Uma ativação passa a valer depois de um a dois minutos.

---

## Confirme a entrega

[Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/fontes-de-dados/#data-stream) registra cada envio de um stream, entregue ou não, com o status code que o endpoint retornou. Envie algumas requisições que executam a function e aguarde cerca de um minuto: um stream envia um lote a cada 60 segundos, ou antes, quando chega a 2.000 linhas de log.

**Console**

Para encontrar os envios no Azion Console:

1. **Abra Real-Time Events**

   Acesse [Azion Console](https://console.azion.com/) > **Real-Time Events**.

2. **Selecione a fonte de dados Data Stream**

3. **Leia os envios mais recentes**

   Cada linha é um envio. Encontre as linhas cujo **Endpoint Type** corresponde ao seu endpoint, como `HTTP_POST`, e leia o **Status Code** delas.

Um **Status Code** `200` significa que o endpoint aceitou o lote. **Streamed Lines** informa o número de linhas de log do lote.

**API**

Para ler os envios com a API, consulte o dataset `dataStreamedEvents` da GraphQL API do Real-Time Events. Substitua as datas por um intervalo que inclua a ativação do stream:

```bash
curl -X POST 'https://api.azion.com/v4/events/graphql' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Token [TOKEN VALUE]' \
  -d '{"query":"query { dataStreamedEvents(limit: 20, filter: {tsRange: {begin: \"2026-10-02T19:25:00\", end: \"2026-10-02T19:45:00\"}}, orderBy: [ts_DESC]) { ts jobName endpointType statusCode streamedLines url } }"}'
```

A API responde `200` com um registro para cada envio, do mais recente para o mais antigo:

```json
{
  "data": {
    "dataStreamedEvents": [
      {
        "ts": "2026-10-02T19:29:00Z",
        …
        "endpointType": "HTTP_POST",
        "statusCode": 405,
        "streamedLines": 2,
        "url": "https://example.com/logs"
      },
      …
    ]
  }
}
```

`statusCode` traz o status com que o endpoint respondeu, e `streamedLines`, as linhas de log do lote. Um `statusCode` `200` significa que o endpoint aceitou o lote, e uma lista `dataStreamedEvents` vazia significa que o stream não enviou nada no intervalo. Para todos os campos, consulte [Campos da API GraphQL do Real-Time Events](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-events/#datastreamedevents-data-stream).

Um status diferente de `200` é a resposta do endpoint, e `503` significa que Data Stream encontrou o endpoint indisponível. Para as causas, consulte [Solucionar problemas de Data Stream](/pt-br/documentacao/plataforma/data-stream/solucao-de-problemas/).

No endpoint, cada linha de log traz as chaves do template *Functions Event Collector*. Leia estas chaves para depurar a function:

- `logLevel` contém o nível da mensagem: `ERROR`, `WARN`, `INFO`, `DEBUG` ou `TRACE`. Ela traz a variável `$log_level`.
- `logMessage` contém a mensagem que a function passou para a função de log. Ela traz a variável `$log_message`.
- `messageSource` mostra `CONSOLE` para uma mensagem escrita com a console API, como `console.log`, e `RUNTIME` para uma mensagem de erro.
- `requestID` identifica a requisição, então as mensagens de uma mesma requisição compartilham esse valor.

Para manter os nomes das variáveis como chaves, ou para enviar menos variáveis, selecione um template personalizado. Para um exemplo de data set, consulte [Templates e payload](/pt-br/documentacao/plataforma/data-stream/templates-e-payload/#templates-personalizados).

---

## Próximos passos

- [Fontes de dados e variáveis](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis.md#functions): Leia o que cada variável da fonte de dados Functions contém, com um valor de exemplo.
- [Functions](/pt-br/documentacao/plataforma/functions.md): Escreva e execute as functions cujas mensagens o stream coleta.
- [Crie um template personalizado](/pt-br/documentacao/guias/desenvolvimento-de-aplicacoes/frameworks/data-stream-template-personalizado.md): Escolha quais variáveis de Functions cada linha de log traz e com quais chaves.
- [Solucionar problemas de Data Stream](/pt-br/documentacao/plataforma/data-stream/solucao-de-problemas.md): Descubra o que mudar quando um envio retorna um status diferente de 200.
