# Primeiros passos com Real-Time Events

Este guia conduz você pela leitura do seu primeiro registro de evento no [Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/).

- Abra Real-Time Events e identifique os controles que compõem uma busca.
- Leia os registros da fonte de dados HTTP Requests em um período que você define.
- Reduza o resultado aos registros que carregam um valor.
- Abra um registro e leia os campos que a requisição escreveu.

Uma busca não cria nada. Ela é formada por três escolhas, e todo resultado vem da combinação delas:

1. A **fonte de dados** é o índice de onde os registros são lidos. Ela decide quais registros de produto uma busca pode retornar, e uma busca sempre nomeia uma.
2. O **Time Filter** delimita o período. Um registro fora desse período não é lido, não importa o que mais corresponda a ele.
3. **Filter by** reduz o que os dois primeiros selecionaram. Ele nunca os amplia.

A API GraphQL do Real-Time Events faz as mesmas três escolhas com um nome de dataset, um argumento `tsRange` e os outros argumentos de filtro desse dataset.

---

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 [Como criar uma conta na Azion](/pt-br/documentacao/fundamentos/criar-uma-conta/).
- Uma [aplicação](/pt-br/documentacao/plataforma/applications/) ou um [firewall](/pt-br/documentacao/plataforma/firewall/) que já atende tráfego, para que a fonte de dados HTTP Requests tenha registros para ler.

**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 uma consulta enviada de um terminal. Para criar um, consulte [Personal Tokens](/pt-br/documentacao/fundamentos/personal-tokens/).

---

## Abra Real-Time Events

Os registros são alcançados de duas maneiras, e as duas leem o mesmo armazenamento.

**Console**

Para abrir a página, acesse [Azion Console](https://console.azion.com) > **Products menu** > **Observe** > **Real-Time Events**.

A página apresenta quatro controles:

- **Data Sources** seleciona o produto cujos registros a busca lê.
- **Time Filter** delimita o período que a busca cobre.
- **Filter by** reduz o resultado aos registros que correspondem a um valor.
- **Refresh**, que executa a busca de novo com a fonte de dados e o período selecionados.

Esses quatro controles são toda a superfície de busca, e uma busca é uma combinação deles.

> **nota**
>
> Azion Console também oferece uma visualização mais recente de Real-Time Events, em Preview, acessada por **Switch to new view**. Esta página documenta a classic view, que é a visualização em que Real-Time Events abre.

**API**

A API GraphQL serve os mesmos registros em `https://api.azion.com/v4/events/graphql`. Esse endereço também serve o GraphiQL Playground em um navegador: entre no Azion Console em `https://console.azion.com` e depois abra o endpoint. Toda consulta abaixo roda ali.

Uma consulta enviada de um terminal carrega, em vez disso, um cabeçalho `Authorization: Token [TOKEN VALUE]`. Para esse caminho, consulte [Primeiros passos da API GraphQL](/pt-br/documentacao/devtools/graphql/primeiros-passos/).

O Playground é onde cada consulta das etapas abaixo é escrita e enviada.

---

## Busque os registros de uma fonte de dados

HTTP Requests carrega um registro por requisição que uma aplicação ou um firewall recebeu. O período que uma busca pode pedir é limitado por quanto tempo um registro de evento é mantido. Para esse limite e os outros que uma consulta carrega, consulte [Limites](/pt-br/documentacao/plataforma/real-time-events/limites/).

**Console**

Para ler os registros de uma fonte de dados no Azion Console:

1. **Selecione a fonte de dados**

   Em **Data Sources**, selecione *HTTP Requests*.

2. **Defina o período**

   Em **Time Filter**, selecione *Last 15 minutes*, que é o período em que o filtro abre.

3. **Selecione Refresh**

Os registros desse período aparecem em uma tabela, uma linha por requisição.

**Data Sources** oferece uma entrada por produto que escreve registros. Para cada uma delas e as variáveis que ela carrega, consulte [Fontes de dados](/pt-br/documentacao/plataforma/real-time-events/fontes-de-dados/).

**API**

Na API GraphQL, a fonte de dados HTTP Requests é o dataset `workloadEvents`, e os controles do Azion Console são argumentos dele:

- `tsRange` carrega o período, como um timestamp `begin` e um `end`.
- `orderBy` define a ordem em que as linhas voltam, como `[ts_DESC]` para as mais recentes primeiro.
- `limit` limita quantas linhas a consulta retorna.

Esses três argumentos são o que a próxima etapa envia. Para o dataset ao qual cada fonte de dados corresponde, consulte [Fontes de dados](/pt-br/documentacao/plataforma/real-time-events/fontes-de-dados/), e para os campos que cada dataset carrega, [Campos da API GraphQL do Real-Time Events](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-events/).

---

## Reduza a busca

Uma busca sobre um período sem nenhuma outra condição retorna todos os registros dele. Um valor reduz isso aos registros que valem a leitura, e é também o que mantém uma busca dentro dos limites que o banco de dados de logs impõe.

**Console**

Para reduzir o resultado no Azion Console:

1. **Informe o filtro**

   Em **Filter by**, informe o seguinte:

   ```text
   status='400'
   ```

2. **Selecione Refresh**

A tabela agora carrega apenas os registros cujo **Status** é `400`.

**Filter by** lê SQL. `key='value'` corresponde a um valor exato, `key like '%value%'` corresponde a um valor parecido e `AND`, `OR` e `NOT` combinam termos. Para a sintaxe completa e mais exemplos, consulte [Filtrar eventos](/pt-br/documentacao/guias/plataforma/observabilidade/adicionar-filtros-events/).

**API**

Um argumento de filtro reduz o dataset da mesma maneira. `statusIn` recebe uma lista de códigos de status, portanto a condição que a busca do Console expressa como `status='400'` se escreve `statusIn: [400]` aqui.

Para retornar o registro mais recente que correspondeu:

```graphql
{
  workloadEvents(
    limit: 1
    filter: {
      tsRange: { begin: "2026-01-01T12:00:00", end: "2026-01-01T12:10:00" }
      statusIn: [400]
    }
    orderBy: [ts_DESC]
  ) {
    ts
    requestId
    host
    status
  }
}
```

A linha que a consulta retorna:

```json
{
  "ts": "2026-01-01T12:03:51Z",
  "requestId": "0123456789abcdef0123456789abcdef",
  "host": "<your-workload-domain>",
  "status": 400
}
```

A linha é um registro de evento, e seu `requestId` identifica a requisição que o produziu.

---

## Leia um registro de evento

Um registro carrega muito mais do que os poucos valores que uma lista de resultados mostra. Ler o registro inteiro é o motivo da busca.

**Console**

Para abrir o registro inteiro no Azion Console, selecione uma linha na tabela de resultados.

A visualização **More details** abre, com todas as variáveis da fonte de dados selecionada para aquele único registro. Você passa a ter os valores que uma requisição escreveu, variável por variável.

Para o significado de cada variável, fonte de dados por fonte de dados, consulte [Fontes de dados](/pt-br/documentacao/plataforma/real-time-events/fontes-de-dados/). Para saber como ler os valores de um registro, consulte [Ler um registro de evento](/pt-br/documentacao/guias/plataforma/observabilidade/entender-logs/).

**API**

Uma resposta carrega os campos que a consulta selecionou e nenhum outro, portanto ler mais de um registro significa nomear mais campos. Filtre pelo `requestId` que a etapa anterior retornou e amplie o conjunto de seleção:

```graphql
{
  workloadEvents(
    limit: 1
    filter: {
      tsRange: { begin: "2026-01-01T12:00:00", end: "2026-01-01T12:10:00" }
      requestIdEq: "0123456789abcdef0123456789abcdef"
    }
  ) {
    ts
    requestId
    host
    requestUri
    status
    upstreamStatus
  }
}
```

A linha carrega um valor por campo nomeado:

```json
{
  "ts": "2026-01-01T12:03:51Z",
  "requestId": "0123456789abcdef0123456789abcdef",
  "host": "<your-workload-domain>",
  "requestUri": "/?q=1%27%20OR%20%271%27%3D%271",
  "status": 400,
  "upstreamStatus": 0
}
```

Você passa a ter o registro de uma requisição, campo por campo. `upstreamStatus` lê `0` porque a requisição nunca chegou a uma origem. Para todos os campos que `workloadEvents` carrega, e os campos dos outros datasets, consulte [Campos da API GraphQL do Real-Time Events](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-events/).

---

## Próximos passos

- [Fontes de dados](/pt-br/documentacao/plataforma/real-time-events/fontes-de-dados.md): Cada fonte de dados, o produto que escreve seus registros, o dataset que os guarda e as variáveis que cada uma carrega.
- [Como Real-Time Events funciona](/pt-br/documentacao/plataforma/real-time-events/como-funciona.md): O que uma consulta lê antes de responder, e por que um filtro importa mais do que um período mais curto.
- [Filtrar eventos](/pt-br/documentacao/guias/plataforma/observabilidade/adicionar-filtros-events.md): A sintaxe completa do Filter by, com uma consulta de exemplo por variável.
- [Investigar uma requisição com a API GraphQL](/pt-br/documentacao/guias/plataforma/observabilidade/investigar-requisicoes-api-graphql.md): Conte os registros primeiro, depois reduza a um código de status e leia o cliente por trás dele.
