# Como fazer o debug de regras criadas com Rules Engine

import DocButton from '~/components/webkit/DocButton.vue';
import Apiv4Rollout from '~/includes/snippets/apiv4Rollout/pt/snippet.mdx'
import Tabs from '~/components/tabs/Tabs'

<Apiv4Rollout />

**Debug Rules** permite que você verifique se as regras ou rule sets criados usando o módulo **Rules Engine** para **Applications** e **Firewall** foram executadas na sua aplicação.

Você pode fazer o debug de regras usando **GraphQL API**, Azion **Data Stream** e Azion **Real-Time Events**.

<DocButton href="/pt-br/documentacao/produtos/build/applications/rules-engine/" label="Saiba mais sobre Rules Engine" kind="secondary" size="medium" />

Existem instruções separadas usando configurações de [Domains legados](/pt-br/documentacao/produtos/build/applications/domains/) e usando o novo produto [Workloads](/pt-br/documentacao/produtos/secure/workloads).

:::tip
Se você não tem certeza de quais etapas se aplicam à sua conta, consulte [o guia Verificar Migração da Conta](/pt-br/documentacao/produtos/guias/verificar-migracao-conta/) para determinar se sua conta já foi migrada.
:::

---

## Habilite Debug Rules

Para fazer o debug de regras ou rule sets, você deve ativar a funcionalidade **Debug Rules** na interface da Azion.

Para habilitar o debug de regras em Applications:

1. Acesse o [Azion Console](https://console.azion.com).
2. Acesse **Products menu** > **Applications**.
3. Selecione a aplicação em que deseja habilitar o debug.
4. Na aba **Main Settings**, habilite a opção **Debug rules**.
5. Clique no botão **Save**.

Para habilitar o debug de regras em Firewall:

1. Acesse o [Azion Console](https://console.azion.com).
2. Acesse **Products menu** > **Firewall**.
3. Selecione o firewall em que deseja habilitar o debug.
4. Na aba **Main Settings**, habilite a opção **Debug rules**.
5. Clique no botão **Save**.

:::caution[Atenção]
A funcionalidade de debug só funciona em firewalls ativos. Certifique-se que o firewall que você deseja incluir no processo de debugging está com a opção **Active** habilitada.
:::

---

## Realize debug de regras usando GraphQL API

:::tip
Consulte a [documentação da GraphQL API](/pt-br/documentacao/devtools/graphql-api/visao-geral/) para mais informações.
:::

Para consultar os dados sobre regras disponibilizados pela **GraphQL API**, siga os passos descritos no guia [Como rodar requisições da GraphQL no Postman](/pt-br/documentacao/produtos/guias/consultar-graphql-postman/) utilizando a URL `https://api.azionapi.net/events/graphql`.

Depois, na caixa de código do Postman da requisição de GraphQL, adicione a seguinte **HTTP Query**, modificando o `tsRange` de acordo com o intervalo de tempo que você quer utilizar:

```graphql
query HttpQuery {
  workloadEvents(
    limit: 10,
    filter: {
      tsRange: {begin:"2023-02-14T10:10:10", end:"2023-02-15T10:10:10"}
    }
    orderBy: [ts_ASC]
  ) 
  {
    ts
    remoteAddress
    requestUri
    stacktrace
  }
}
```

O exemplo acima consulta dados sobre regras usando o dataset **HTTP Events**. O **limit** filtra as últimas 10 entradas de dados dentro do tempo definido por **tsRange**. Os dados são ordenados através do campo **ts** (timestamp).

A consulta acima deve retornar:

- **ts**: o timestamp de quando a requisição foi iniciada.
- **remoteAddress**: o IP do cliente que fez a requisição para a aplicação.
- **requestUri**: o tipo de requisição HTTP e URI.
- **stacktrace**: regras e rule sets executados.

Envie sua requisição. Você receberá uma resposta semelhante a:

```json
{
  "data": {
    "workloadEvents": [
      {
        "ts": "2023-02-15T17:52:16Z",
        "remoteAddress": "00.00.000.00",
        "requestUri": "/get",
        "stacktrace": "{\\\"edge_application_response\\\":[\\\"Add Azion Cookie\\\"],\\\"edge_firewall\\\":[\\\"Set WAF\\\",\\\"Rate-Limit Root\\\"],\\\"edge_application_request\\\":[\\\"Default Rule\\\",\\\"Test Send Cert to Origin 1\\\",\\\"Test Send Cert to Origin 2\\\"]}"
      }
    ]
  }
}
```

No exemplo acima, a **GraphQL API** retornou todas as regras executadas de Request Phase e Response Phase criadas usando **Applications**, bem como uma rule de **Firewall** que também foi executada com sucesso.

Para saber mais sobre como consultar dados com a **API GraphQL**, visite a [página de documentação](/pt-br/documentacao/devtools/graphql-api/recursos/#conjuntos-de-dados).

---

## Realize debug de regras usando Data Stream

:::tip
Consulte a [documentação de Data Stream](/pt-br/documentacao/produtos/observe/data-stream/) para mais informações sobre como configurar um endpoint de Data Stream.
:::

Para fazer o debug de rules usando Data Stream, siga os passos:

1. Acesse o [Azion Console](https://console.azion.com).
2. Acesse **Products menu** > **Data Stream**.
3. Clique **+ Stream**.
4. Dê um nome para seu stream.
5. No menu dropdown **Source**, selecione **Applications**.
6. No menu dropdown **Template**, selecione **Custom Template**.
7. Na caixa de código **Data Set**, adicione as variáveis:

```json
    {
        "time": "$time",
        "traceback": "$traceback"
    }
```

<Tabs client:visible>
    <Fragment slot="tab.consoleworkloads">Console - Workloads</Fragment>
    <Fragment slot="tab.consoledomains">Console - Domains</Fragment>

<Fragment slot="panel.consoleworkloads">

8. Em **Workloads**, selecione entre **Filter Workloads** ou **All Current and Future Workloads**. Veja mais sobre cada opção em [Como associar workloads no Data Stream](/pt-br/documentacao/produtos/guias/data-stream-associar-workloads/).
9. Na seção **Destination**, selecione um **Connector** na lista suspensa.
  - Os campos para preenchimento são diferentes dependendo do tipo de endpoint que você escolher. Descubra mais informações sobre cada campo na página de [configuração de endpoint](/pt-br/documentacao/produtos/observe/data-stream/#endpoints).
10. Confira se o switch **Status** está ligado.
11. Clique no botão **Save**.
</Fragment>

<Fragment slot="panel.consoledomains">

8. Em **Domains**, selecione **Filter Domains** ou **All Current and Future Domains**. Veja mais sobre cada opção em [Como associar domínios no Data Stream](/pt-br/documentacao/produtos/guias/data-stream-associar-dominios/).
9. Na seção **Destination**, selecione um **Endpoint Type** na lista suspensa.
  - Os campos para preenchimento são diferentes dependendo do tipo de endpoint que você escolher. Descubra mais informações sobre cada campo na página de [configuração de endpoint](/pt-br/documentacao/produtos/observe/data-stream/#endpoints).
10. Confira se o switch **Status** está ligado.
11. Clique no botão **Save**.

</Fragment>
</Tabs>

Para confirmar que seus logs estão sendo enviados, você pode utilizar o [Real-Time Events](/pt-br/documentacao/produtos/observe/real-time-events/) para consultar análises detalhadas.

Para visualizar todos os seus streams, vá para a página de **Data Stream** no Azion Console e selecione um a partir da lista exibida. Você pode criar diversos streams.

### Definição das variáveis

| Variável | Definição |
| --- | --- |
| $time | Data e hora da requisição. Exemplo: Oct. 31st, 2022 - 19:30:41 |
| $traceback | Retorna os nomes das regras criadas usando Rules Engine para Applications ou Firewall que foram executadas a partir da requisição. |

:::note
O comportamento `Set WAF [Seu WAF]` do Firewall realiza um processamento especial, permitindo que outras regras sejam processadas simultaneamente. Como resultado, os logs podem mostrar outras regras no campo `traceback`, mesmo que o Rule Set do WAF esteja configurado para bloquear e retornar a requisição. No entanto, as regras do WAF operam corretamente, bloqueando requisições que atendem aos critérios especificados. Esse comportamento é padrão para a plataforma.
:::

---

## Realize debug de regras usando Real-Time Events

:::tip
Consulte a [documentação de Real-Time Events](/pt-br/documentacao/produtos/observe/real-time-events/) para mais informações sobre seu funcionamento.
:::

Para acessar os dados de regras através do Real-Time Events, siga os passos:

1. Acesse o [Azion Console](https://console.azion.com).
2. Acesse **Products menu** > **Real-Time Events**.
3. Selecione a aba **HTTP Requests**.
4. Modifique o período de tempo em que as requisição foi realizada e adicione filtros, se necessário.
5. Clique no botão **Search**.
6. Selecione o *log body* desejado.
7. Procure pelo campo **traceback**.

O campo **traceback** deverá conter o tipo de regra e o comportamento executados dentro do tempo selecionado. Por exemplo:

```yaml
{\"edge_application_response\":[\"Add Azion Cookie\"],\"edge_firewall\":[\"Set WAF\",\"Rate-Limit Root\"],\"edge_application_request\":[\"Default Rule\",\"Test Send Cert to Origin 1\",\"Test Send Cert to Origin 2\"]}
```

No exemplo acima, o campo **traceback** contém todas as regras executadas de Request Phase e Response Phase criadas usando **Applications**, bem como uma rule ativa de **Firewall**.

:::note
O comportamento `Set WAF [Seu WAF]` do Firewall realiza um processamento especial, permitindo que outras regras sejam processadas simultaneamente. Como resultado, os logs podem mostrar outras regras no campo `traceback`, mesmo que o Rule Set do WAF esteja configurado para bloquear e retornar a requisição. No entanto, as regras do WAF operam corretamente, bloqueando requisições que atendem aos critérios especificados. Esse comportamento é padrão para a plataforma.
:::

---