GUIAMonitoramento de erros: falhas HTTP, crashes de pods e OOM kills
Para monitoramento de erros você precisa:
http_requests_total — contador HTTP (com label status)kube-state-metrics — status de pods e recursos (para K8s)kubelet cAdvisor metrics — eventos de ciclo de vida de containersnode_exporter — métricas do host/sistema (opcional)Os painéis que referenciam dados a nível de nó (CPU, memória usada em queries de correlação) dependem da variável de dashboard $job_node. O valor padrão é node-exporter, que corresponde ao kube-prometheus-stack. Se o seu Prometheus utiliza um label de job diferente para node_exporter, atualize-o em Configurações do Dashboard → Variables.
A seção de Requisitos lista node_exporter como provedor de métricas do host/sistema. Isso foi atualizado intencionalmente de "system logs" em uma revisão anterior — se você encontrar documentação antiga referindo-se a "system logs", trate como métricas do host/sistema.
┌────────────────────────────────────────┐ │ ERROS — FALHAS & INCIDENTES │ ├────────────────────────────────────────┤ │ Taxa Erro │ Pods Falhos │ CrashLoop │ │ (%) │ Contagem │ Contagem │ ├────────────────────────────────────────┤ │ Linha Temporal de Erro [12 cols] │ │ (evolução da taxa de erro) │ ├────────────────────────────────────────┤ │ Contagem OOMKilled │ Tendência Restart│ │ (gauge) │ (série tempo) │ ├────────────────────────────────────────┤ │ Distribuição Tipos de Erro [6 cols] │ │ Tabela Status Pods [6 cols] │ ├────────────────────────────────────────┤ │ Log de Eventos [12 cols] │ │ (erros recentes por pod/container) │ └────────────────────────────────────────┘
Porcentagem de requisições com erro (status 5xx).
Query padrão (apenas 5xx):100 * sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m]))
Para incluir 4xx (erros de cliente):
100 * sum(rate(http_requests_total{status=~"[45].."}[5m]))
/ sum(rate(http_requests_total[5m]))
Apenas erros de timeout (504):
100 * sum(rate(http_requests_total{status="504"}[5m]))
/ sum(rate(http_requests_total[5m]))
Número de pods em estado Failed ou Unknown.
Query base:sum(kube_pod_status_phase{phase=~"Failed|Unknown"})
Filtrar por namespace (ignorar jobs):
sum(kube_pod_status_phase{phase="Failed", namespace!~"default|kube-.*"})
Por namespace (desglose):
sum by (namespace) (kube_pod_status_phase{phase="Failed"})
Pods presos em loops de reinício (CrashLoopBackOff).
Query:sum(kube_pod_container_status_last_terminated_reason{reason="Error"})
Ou por estado de container:
count(kube_pod_container_status_waiting_reason{reason="CrashLoopBackOff"})
Por pod específico:
count by (pod) (kube_pod_container_status_waiting_reason{reason="CrashLoopBackOff"})
Alerta limiar: Configure alerta em > 0 pods
Containers encerrados por Out Of Memory.
Query:sum(kube_pod_container_status_last_terminated_reason{reason="OOMKilled"})
Correlacionar com limites de memória:
sum(kube_pod_container_resource_limits_memory_bytes) / 1024 / 1024 / 1024
Containers mais afetados por OOM:
topk(5, sum by (pod, container) (increase(kube_pod_container_status_last_terminated_reason{reason="OOMKilled"}[1h])))
Evolução temporal da taxa de erro (janela 5m).
Multi-série por código de status:
sum by (status) (rate(http_requests_total{status=~"5.."}[5m])) * 100
Mudar janela de tempo: [5m] → [1m] (responsivo) ou [15m] (suavizado)
Por serviço:
sum by (job, status) (rate(http_requests_total{status=~"5.."}[5m]))
Tendência de reinicialização de containers.
Query:sum(increase(kube_pod_container_status_restarts_total[5m]))
Por pod:
topk(10, sum by (pod) (increase(kube_pod_container_status_restarts_total[5m])))
Detectar pods críticos (> 10 reinícios em 1h):
sum by (pod) (increase(kube_pod_container_status_restarts_total[1h])) > 10
Desglose de erros por tipo (5xx, 4xx, timeout, etc).
Query para gráfico pizza:
sum by (status) (rate(http_requests_total{status=~"[45].."}[5m])) * 100
Categorias customizadas: Crie labels na sua aplicação:
status="500" → Erro do Servidorstatus="503" → Serviço Indisponívelstatus="504" → Timeout do Gatewaystatus="429" → Taxa LimitadaTabela dinâmica de pods com estado e razões de erro.
Query base:kube_pod_status_phase{phase!="Running"}
Adicione colunas no painel:
kube_pod_status_conditions_ready → Status Prontokube_pod_container_status_last_terminated_reason → Razãokube_pod_container_status_restarts_total → Contagem ReiníciosTabela com eventos recentes (últimas 2 horas).
Query:kube_events{type="Warning"} or kube_events{type="Error"}
Apenas eventos de erro nos últimos 30m:
increase(kube_events{type="Error"}[30m])
Ordenar por timestamp: No painel → Sort by → timestamp desc
Formato de colunas: Timestamp | Pod | Namespace | Razão | Mensagem
| Tema | Cor OK | Aviso | Crítico |
|---|---|---|---|
| GREEN | #33FF00 |
#FFCC00 | #FF4444 |
| AMBER | #FFB000 |
#FF8C00 | #FF4500 |
| BLUE | #00BFFF |
#FFD700 | #FF1493 |
| Tipo | Largura | Altura (Stat Cards) | Altura (Gráficos) |
|---|---|---|---|
| Mobile | 6 (stack) | 6 | 10 |
| Tablet 10" | 12 | 8 | 12 |
| Tablet 12.9" | 12 | 8 | 14 |
| Desktop 1920×1080 | 24 | 6 | 10 |
kube_events, certifique-se que kube-state-metrics está disponívelrate(http_requests_total{status=~"5.."}[5m]) >
avg_over_time(rate(http_requests_total{status=~"5.."}[5m])[1h:5m]) * 2
Alerta se taxa de erro dobra em relação ao promédio de 1h.
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket{status=~"5.."}[5m])) * 1000
Mostra latência de APENAS as requisições que erraram (útil para detectar timeouts).
sum by (pod) (increase(kube_pod_container_status_restarts_total[30m])) > 5
Identifica pods que estão se reiniciando mais de 5 vezes em 30min (sintoma de problema grave).