Soma das durações de processamento de requisições por views
contador
method – método HTTP
uid – identificador do usuário
view_name – nome da view
Capturas de tela ilustrativas:
Duração das análises dividida pelo valor médio / tipo de análise e quantil / tipo de análise. A descontinuidade é causada pelo contador da métrica, que é iniciado separadamente para cada análise
Alertas do Grafana
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 da requisição
:tensorflow:serving:request_latency_sum
Soma das durações de processamento das requisições
:tensorflow:serving:request_latency_count
Número total de requisições cujas durações foram contabilizadas
:tensorflow:cc:saved_model:load_attempt_count
Modelos carregados
Capturas de tela ilustrativas:
Número total de requisições ao TFSS por segundo e por minuto, dividido por modelo
Quantil 0,95 (ou o definido em $quantile) da duração de processamento da requisição no TFSS
Tempo médio de processamento da análise
O blackbox integrado envia requisições para verificar os estados dos modelos, deve ser 1; se não, probe_success o TFSS não está funcionando corretamente
Alertas do Grafana
nginx
Visão geral das métricas
Métrica
Descrição
nginx_up
Mostra se o nginx está em execução: 1 – serviço está ativo, 0 – serviço está inativo
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
Conexões ativas do nginx
Capturas de tela ilustrativas:
Número total de requisições ao nginx
Estado das conexões do nginx. Verifique se não há conexões obsoletas
Taxa de sucesso do processamento. Os números de conexões aceitas e tratadas devem ser iguais
Alertas do Grafana
A API 6 não requer mais Celery nem Redis, portanto as métricas correspondentes não são abordadas neste guia.
Você pode personalizar os alertas de acordo com suas necessidades. Por favor, prossiga para nosso repositório para encontrar os arquivos de alerta.
groups:
- name: Alertas da API
rules:
- alert: Contêineres prontos da API ausentes!
expr: absent(kube_pod_container_status_ready{container="oz-api", namespace="api-prod"} == 1)
for: 1m
labels:
severity: critical
annotations:
summary: "Contêineres prontos da API ausentes!!!"
description: "Crítico: verifique os contêineres da API!!!"
- alert: Métricas da API ausentes!
expr: absent(oz_api_versions_total)
for: 1m
labels:
severity: critical
annotations:
summary: "Métricas da API ausentes!!!"
description: "Crítico: verifique os contêineres da API, a API pode não estar funcionando corretamente!!!"
- alert: Alta frequência de requisições de análise da API
expr: sum (rate(oz_api_analyses_total{namespace="api-prod"}[1m])) > 1
labels:
severity: warning
annotations:
summary: "Muitas requisições de análise da API por segundo"
description: "A taxa de requisições de análise da API é {{ $value }} rps."
- alert: Alta taxa de falhas nas análises da API
expr: sum by (analysis_result)(rate(oz_api_analyses_total{namespace="api-prod", analysis_result="FAILED"}[1m])) > 0
for: 1m
labels:
severity: warning
annotations:
summary: "Análises da API com falha detectadas"
description: "A taxa de falhas nas análises da API é {{ $value }} rps no último minuto."
- alert: Alta duração das análises da API
expr: histogram_quantile(0.95,sum by (le, analysis_type) (rate(oz_api_analyse_duration_seconds_bucket{namespace="api-prod"}[1m]))) > 7
for: 10m
labels:
severity: warning
annotations:
summary: "{{ $labels.analysis_type }} análises estão lentas"
description: "A duração de 95% das análises {{ $labels.analysis_type }} é maior que {{ $value }} segundos nos últimos 10 minutos."
- alert: Erros de exceção da API
expr: sum by (exception_type)(rate(django_http_exceptions_total_by_type_total{namespace="api-prod", exception_type!~"AuthCredentialsExpired|AuthCredentialsInvalid|AuthCredentialsIsNotProvided|AuthForbidden|InvalidBodyStructureError|InvalidParamValueErrorNotExistError|OSError|InvalidParamValueError|NotExistError"}[1m])) > 0
for: 5m
labels:
severity: warning
annotations:
summary: "{{ $labels.exception_type }} nos erros de exceção da API"
description: "{{ $value }} rps na API retornou {{ $labels.exception_type }} nos últimos 5 minutos."
- alert: Alta latência da API
expr: (sum by(namespace) (rate(gunicorn_request_duration_sum{}[1m])) / on(namespace) sum by(namespace) (rate(gunicorn_request_duration_count{}[1m]))) > 5
for: 5m
labels:
severity: warning
annotations:
summary: "Alta latência da API"
description: "A latência da API é {{ printf "%.2f" $value }} segundos nos últimos 5 minutos."
- alert: Alta taxa de erros 5xx da API!
expr: sum by(namespace) (max by(status) (rate(gunicorn_response_code{status=~"5.*"}[1m]))) > 1
for: 1m
labels:
severity: warning
annotations:
summary: "Alta porcentagem de erros 5XX da API"
description: 'Alta porcentagem de erros: {{ printf "%.2f" $value }}%'
- name: Alertas do TFSS
rules:
# Alertas do Blackbox: as verificações checam se os modelos do TFSS estão funcionando corretamente
- 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!"
# Crítico: indica que a métrica está ausente, o que significa que o TFSS não está processando 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!!!"
groups:
- name: Alertas do NGINX
rules:
- alert: nginx está fora do ar
expr: nginx_up != 1
for: 30s
labels:
severity: critical
annotations:
summary: "nginx está fora do ar há mais de 30 segundos!"
description: "Crítico: o serviço nginx está fora do ar no host {{ $labels.instance }}!"
- 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: "o nginx está com problemas ao tratar conexões"
description: "Crítico: nem todas as conexões aceitas foram tratadas pelo nginx no host {{ $labels.instance }} há mais de 3 minutos!"
- alert: Alto número de conexões ativas no nginx
expr: nginx_connections_active > 3000
for: 3m
labels:
severity: critical
annotations:
summary: "Alto número de conexões ativas no nginx"
description: "Crítico: o nginx teve conexões ativas em excesso no host {{ $labels.instance }} por mais de 3 minutos!"