> For the complete documentation index, see [llms.txt](https://doc.ozforensics.com/oz-knowledge/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.ozforensics.com/oz-knowledge/oz-knowledge/pt-br/guias/administrator-guide/monitoring/api-5-and-below.md).

# API v5 e anteriores

Abaixo, você encontrará a descrição das métricas e tabelas do componente, junto com alertas pré-configurados.

## Celery

### Visão geral das métricas

| Métrica                                                                                    | Descrição                                                                          |
| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| `flower_events_total`                                                                      | Número total de tarefas                                                            |
| `flower_task_runtime_seconds_sum`                                                          | Soma das durações de conclusão das tarefas                                         |
| `histogram_quantile($quantile, sum(rate(flower_task_runtime_seconds_bucket[1m])) by (le))` | Quantil para execução de tarefas com base no [variável quantile](#variables) valor |
| `flower_events_total{type="task-failed"}`                                                  | Com o `type="task-failed"` rótulo, exibe o número de tarefas com falha             |

### Tabelas do Grafana

| Tabela                                              | Descrição                                                           | O que monitorar                                                                                                                                                   |
| --------------------------------------------------- | ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Taxa de tarefas de Liveness                         | Tempo médio de todas as requisições do Celery para Liveness         | <ul><li><code>task-received</code> deve ser aproximadamente igual a <code>task-succeeded</code>,</li><li>não deve haver nenhum <code>task-failed</code></li></ul> |
| Duração das tarefas de Liveness                     | Quantil para execução de tarefas                                    | O quantil 0,95 deve ser de 8 segundos ou menos                                                                                                                    |
| Taxa de tarefas bem-sucedidas vs. tarefas com falha | Número total de requisições do Celery                               | <ul><li><code>task-received</code> deve ser aproximadamente igual a <code>task-succeeded</code>,</li><li>não deve haver nenhum <code>task-failed</code></li></ul> |
| Duração de todas as tarefas (AVG)                   | Tempo médio de todas as requisições do Celery para todos os modelos | As durações devem ser de 6 segundos ou menos                                                                                                                      |
| Tamanho da fila                                     | Fila de mensagens no Redis                                          | Tamanho da fila e o número de mensagens não confirmadas                                                                                                           |

Capturas de tela ilustrativas:

{% tabs %}
{% tab title="Taxa de tarefas de Liveness" %}

<figure><img src="/files/b042e0f54cab06751891066f9c6e1c51cc9a68cb" alt=""><figcaption><p><code>task-received</code> ≈ <code>task-succeeded, task-failed = 0</code></p></figcaption></figure>
{% endtab %}

{% tab title="Duração das tarefas de Liveness" %}

<figure><img src="/files/e6dc5c62d929a3cfd9db7541607ddd824b743206" alt=""><figcaption><p>quantil 0,95 ≤ 8 segundos</p></figcaption></figure>
{% endtab %}

{% tab title="Taxa de tarefas bem-sucedidas vs. tarefas com falha" %}

<figure><img src="/files/ea8b6cbe50ce909d8637e30a81c31c895b790747" alt=""><figcaption><p><code>task-received</code> ≈ <code>task-succeeded, task-failed = 0</code></p></figcaption></figure>
{% endtab %}

{% tab title="Duração de todas as tarefas (AVG)" %}

<figure><img src="/files/5316de53c381f0ec9864fddaf70002bf5042e94f" alt=""><figcaption><p>As durações ≤ 6 segundos</p></figcaption></figure>
{% endtab %}

{% tab title="Tamanho da fila" %}

<figure><img src="/files/bb311ae5cab2c79a2e2611a073979c5a21fb9554" alt=""><figcaption><p>Monitore o tamanho da fila e o número de mensagens não confirmadas</p></figcaption></figure>
{% endtab %}
{% endtabs %}

### Alertas do Grafana

```bash
- name: Alertas do Celery
  rules:
  
  # Um alerta para o quantil 0,9 da duração da tarefa, avisa que as análises estão sendo executadas lentamente
    - alert: Análise de qualidade está lenta!
      expr: histogram_quantile(0.9, sum without (handler) (rate(flower_task_runtime_seconds_bucket{task="oz_core.tasks.tfss.process_analyse_quality"}[5m]))) > 5
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: "Duração muito longa do worker do celery para a tarefa TFSS"
        description: "A duração de 90% das análises de qualidade é maior que {{ $value }} segundos nos últimos 10 minutos. NAMESPACE: {{ $labels.namespace }} POD: {{ $labels.pod }} TASK: {{ $labels.task }} WORKER: {{ $labels.worker }}"
  
  # Um alerta para tarefas com falha; se o número estiver crescendo, algo está errado
    - alert: Tarefas do Celery falharam!
      expr: sum by(type,task) (rate(flower_events_total{type="task-failed", task!=""}[1m])) > 0
      for: 1m
      labels:
        severity: warning
      annotations:
        summary: "Tarefas do Celery {{ $labels.task }} falharam"
        description: 'Taxa de tarefas do celery com falha: {{ printf "%.2f" $value }} rps'
  
  # Um alerta crítico que avisa que todas as tarefas falharam; isso significa que o sistema parou de processar solicitações
    - alert: Celery sem tarefas bem-sucedidas!
      expr: sum by(type,task) (rate(flower_events_total{type="task-succeeded", task!=""}[1m])) == 0 and on (task) sum by(type,task) (rate(flower_events_total{type="task-received", task!=""}[1m])) > 0
      for: 5m
      labels:
        severity: critical
      annotations:
        summary: "Celery não tem tarefas bem-sucedidas: {{ $labels.task }}!"
        description: "Crítico! Verifique se o bio está ativo!"

```

## Redis

### Visão geral das métricas

| Métrica                                 | Descrição                                                                                                        |
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `redis_up`                              | <p><code>1</code> significa que o Redis está funcionando,</p><p><code>0</code> – o serviço está indisponível</p> |
| `redis_commands_total`                  | Número total de comandos no Redis                                                                                |
| `redis_commands_duration_seconds_total` | Duração do processo do Redis                                                                                     |
| `redis_key_size`                        | Tamanho da fila do Redis (como broker de mensagens)                                                              |
| `redis_key_size{key="unacked"}`         | Com o `"inacked"` rótulo, exibe o número de tarefas que estão sendo processadas pelo Redis                       |

### Tabelas do Grafana

| Tabela               | Descrição                                       | O que monitorar                       |
| -------------------- | ----------------------------------------------- | ------------------------------------- |
| Taxa de comandos     | Número de requisições por segundo               | Nada, apenas para se manter informado |
| Duração dos comandos | Duração média e máxima de execução dos comandos | <p>AVG < 15µs</p><p>MAX < 1ms</p>     |
| Clientes conectados  | Número de clientes conectados                   | Não deve ser 0                        |

Capturas de tela ilustrativas:

{% tabs %}
{% tab title="Taxa de comandos" %}

<figure><img src="/files/0f71eb4a61f249a387d4554c2bb28d06f0e52a48" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Duração dos comandos" %}

<figure><img src="/files/6e16720e555f9fd5b4c4dd279a96e1dbd9924f74" alt=""><figcaption><p>AVG &#x3C; 15µs, MAX &#x3C; 1ms</p></figcaption></figure>
{% endtab %}

{% tab title="Clientes conectados" %}

<figure><img src="/files/00f82e35698e98cc7d161cba845db52426890657" alt=""><figcaption><p><code>Não deve ser 0</code></p></figcaption></figure>
{% endtab %}
{% endtabs %}

### Alertas do Grafana

```bash
- name: Alertas do Redis
  rules:
  # Um alerta crítico que avisa que o Redis está indisponível
    - alert: Redis está indisponível
      expr: redis_up != 1
      for: 30s
      labels:
        severity: critical
      annotations:
        summary: "O Redis está indisponível há mais de 30 segundos!"
        description: "Crítico: o serviço REDIS está indisponível no namespace: {{ $labels.namespace }}\nPod: {{ $labels.pod }}!"
  
  # Exibe se o Redis rejeita conexões
    - alert: Redis rejeita conexões
      expr: rate(redis_rejected_connections_total[1m]) > 0
      for: 1m
      labels:
        severity: warning
      annotations:
        summary: "O Redis rejeita conexões há mais de 1 minuto no namespace: {{ $labels.namespace }}!"
        description: "Algumas conexões com o Redis foram rejeitadas!\nPod: {{ $labels.pod }}\nValue = {{ $value }}"

  # Exibe que os comandos do Redis estão sendo executados muito lentamente 
    - alert: Duração dos comandos do Redis está lenta!
      expr: max by(namespace) (rate(redis_commands_duration_seconds_total[1m])) > 0.0004
      for: 1m
      labels:
        severity: warning
      annotations:
        summary: "A duração máxima dos comandos do Redis está muito alta há mais de 1 minuto no namespace: {{ $labels.namespace }}!"
        description: "A duração máxima dos comandos é maior que a média!\nValue = {{ $value }} seconds"
 
  # Avisa que a fila do Redis está muito longa
    - alert: Comprimento da fila do Redis
      expr: sum by (instance)(redis_key_size) > 50
      for: 1m
      labels:
        severity: warning
      annotations:
        summary: "O tamanho da fila do Redis está muito grande!"
        description: "Aviso: tamanho da fila do Redis: {{ $value }} nos últimos 1 min!"

  # Avisa que há mais de 10 mensagens em processamento (unacked) na fila do Redis
    - alert: Redis com mensagens unacked
      expr: sum by (key)(redis_key_size{key="unacked"}) > 10
      for: 1m
      labels:
        severity: warning
      annotations:
        summary: "O Redis tem mensagens unacked!"
        description: "Aviso: o Redis tem {{ $value }} mensagens unacked!"
```

## TFSS

### Visão geral das métricas

| Métrica                                         | Descrição                                         |
| ----------------------------------------------- | ------------------------------------------------- |
| `:tensorflow:serving:request_count`             | Número total de requisições ao TFSS               |
| `:tensorflow:serving:request_latency_bucket`    | Histograma do tempo de processamento dos pedidos  |
| `:tensorflow:serving:request_latency_sum`       | Soma das durações de processamento de cada pedido |
| `:tensorflow:serving:request_latency_count`     | Número total de pedidos                           |
| `:tensorflow:cc:saved_model:load_attempt_count` | Modelos enviados                                  |

### Tabelas do Grafana

| Tabela                                    | Descrição                                                                                                                                   | O que monitorar                       |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- |
| Taxa de requisições do modelo             | Número de requisições ao TFSS por segundo e por minuto                                                                                      | Nada, apenas para se manter informado |
| Latência do modelo (`$quantile`-quantile) | Quantil 0,95 do tempo de processamento da requisição do TFSS. É possível definir o valor do quantil em [a `$quantile` variável](#variables) | Nada, apenas para se manter informado |
| Latência do modelo (AVG)                  | Tempo médio de processamento do pedido                                                                                                      | Nada, apenas para se manter informado |
| Sucesso da verificação HTTP               | O resultado da verificação blackbox integrada. Blackbox envia requisições para verificar se o TFSS funciona corretamente                    | Deve ser 1                            |

Capturas de tela ilustrativas:

{% tabs %}
{% tab title="Taxa de requisições do modelo" %}

<figure><img src="/files/76bae6e3987d4109517687c59230e091037c0cd5" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Latência do modelo (quantil 0,95)" %}

<figure><img src="/files/fd9d5770053d77bd8c25d8e59e6e2621f56e07b9" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Latência do modelo (AVG)" %}

<figure><img src="/files/d0b3205f2a5c4fcb41069c4feba91014cdaf4174" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Sucesso da verificação HTTP" %}

<figure><img src="/files/b258be8048bd3abadbff82205d0d32b1e81d9a08" alt=""><figcaption><p>Deve ser 1</p></figcaption></figure>
{% endtab %}
{% endtabs %}

### Alertas do Grafana

```bash
- name: Alertas do TFSS
  rules:
  # Alerta crítico que avisa sobre o blackbox detectar comportamento incorreto do modelo
    - alert: Alerta do serviço de verificação dos modelos do TFSS!
      expr: probe_success{job="blackbox-tfss-service"} != 1
      for: 3m
      labels:
        severity: critical
      annotations:
        summary: "O modelo TFSS no namespace {{ $labels.namespace }} está indisponível!"
        description: "!!!ALERTA!!! O modelo ou servidor do TFSS não funciona:\nMODEL:{{ $labels.model }}\nA verificação do modelo tem retornado estado FAILED por 3 min!"
    - alert: Alerta do pod de verificação dos modelos do TFSS!
      expr: probe_success{job="blackbox-tfss-models"} != 1
      for: 3m
      labels:
        severity: critical
      annotations:
        summary: "O modelo TFSS no namespace {{ $labels.namespace }} está indisponível!"
        description: "O TFSS no pod {{ $labels.pod }} não funciona:\nMODEL:{{ $labels.model }}\nA verificação do modelo tem retornado estado FAILED por 3 min!"
    - alert: Alerta do pod de verificação de predição do TFSS!
      expr: probe_success{job="blackbox-tfss-probe"} != 1
      for: 3m
      labels:
        severity: critical
      annotations:
        summary: "A predição do modelo TFSS no namespace {{ $labels.namespace }} está indisponível!"
        description: "O TFSS no pod {{ $labels.pod }} não funciona:\nMODEL:{{ $labels.model }}\nA verificação de predição tem retornado estado FAILED por 3 min!"

  # Alerta crítico que avisa sobre o TFSS não processar requisições 
    - alert: Taxa de requisições vazia do TFSS!
      expr: absent(:tensorflow:serving:request_count{namespace="api-prod"}) == 1
      for: 1m
      labels:
        severity: critical
      annotations:
        summary: "A taxa de requisições do TFSS está vazia!!!"
        description: "Crítico! As requisições não estão sendo processadas, verifique o bio!!!"
```

## nginx

### Visão geral das métricas

| Métrica                      | Descrição                                                                                                        |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `nginx_up`                   | <p><code>1</code> significa que o nginx está funcionando,</p><p><code>0</code> – o serviço está indisponível</p> |
| `nginx_connections_accepted` | Número de conexões aceitas pelo nginx                                                                            |
| `nginx_connections_handled`  | Número de conexões tratadas pelo nginx                                                                           |
| `nginx_connections_active`   | Número de conexões ativas do nginx                                                                               |

### Tabelas do Grafana

| Tabela                       | Descrição                            | O que monitorar                                            |
| ---------------------------- | ------------------------------------ | ---------------------------------------------------------- |
| Taxa de requisições          | Número total de requisições ao nginx | Nada, apenas para se manter informado                      |
| Conexões ativas              | Estados da conexão                   | Não deve haver conexões pendentes                          |
| Taxa de conexões processadas | Taxa de sucesso do processamento     | Os números de conexões aceitas e tratadas devem ser iguais |

Capturas de tela ilustrativas:

{% tabs %}
{% tab title="Taxa de requisições" %}

<figure><img src="/files/f2e9c64bd86a09b2d4a900591c5586e825c917ba" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Conexões ativas" %}

<figure><img src="/files/22e8707146de7e3a12fec7f66f241af6648ceb1b" alt=""><figcaption><p>Não deve haver conexões pendentes</p></figcaption></figure>
{% endtab %}

{% tab title="Taxa de conexões processadas" %}

<figure><img src="/files/a9390f1b851338697f400a5d3bef23528f245a13" alt=""><figcaption><p>Os números de conexões aceitas e tratadas devem ser iguais</p></figcaption></figure>
{% endtab %}
{% endtabs %}

### Alertas do Grafana

```bash
groups:
  - name: Alertas do NGINX
    rules:
      # Um alerta crítico que exibe que o nginx não tratou algumas das conexões aceitas
      - alert: o nginx não está tratando todas as conexões
        expr: rate (nginx_connections_handled[5m]) / rate (nginx_connections_accepted[5m]) <1
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Problema do nginx ao tratar conexões"
          description: "Crítico: o nginx não trata algumas conexões aceitas no host {{ $labels.instance }} há mais de 3 minutos!"
```

## API

### Visão geral das métricas

| Métrica                                                                            | Descrição                                   |
| ---------------------------------------------------------------------------------- | ------------------------------------------- |
| `absent(kube_pod_container_status_ready{container="oz-api", namespace="api-prod"}` | Exibe que não há contêineres da API prontos |

### Alertas do Grafana

```bash
groups:
  - name: Alertas da API
    rules:
      # Um alerta crítico que avisa que não há contêineres da API prontos, então as requisições não estão sendo processadas
      - alert: Contêineres da API prontos ausentes!
        expr: absent(kube_pod_container_status_ready{container="oz-api", namespace="api-prod"} == 1)
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Contêineres da API prontos ausentes!!!"
          description: "Crítico! Verifique os contêineres da API!!!"
```

Você pode personalizar os alertas de acordo com suas necessidades. Por favor, prossiga para [nosso repositório](https://gitlab.com/oz-forensics/public/oz-engineering-monitoring-configs/-/tree/helm-0.10.20/alerts?ref_type=heads) para encontrar os arquivos de alerta.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://doc.ozforensics.com/oz-knowledge/oz-knowledge/pt-br/guias/administrator-guide/monitoring/api-5-and-below.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
