
Curso Kubernetes 13 — Observabilidade: metrics-server, Prometheus e Grafana
Você não pode consertar o que não consegue ver. Kubernetes gera uma quantidade enorme de sinais; o difícil é escolher quais importam.
Observabilidade tem três pilares:
| Pilar | Pergunta | Ferramentas |
|---|---|---|
| Métricas | “quanto/o quê?” | Prometheus, Grafana |
| Logs | “por quê?” | Loki, Elasticsearch |
| Traces | “onde?” | OpenTelemetry, Jaeger |
Selo do curso: testado em Kubernetes 1.35 com kube-prometheus-stack.
metrics-server: o kubectl top
O metrics-server coleta CPU/memória dos pods e nós via API de métricas. É o que alimenta kubectl top e o HPA por CPU/memória.
kubectl top nodes
kubectl top pods -A --sort-by=memory | head
Se retornar error: Metrics API not available, o metrics-server não está instalado ou está com problema de TLS/RBAC.
Importante: metrics-server não é armazenamento de longo prazo. Ele serve métricas recentes para o HPA. Para histórico, Prometheus.
Prometheus: o padrão de fato
Prometheus faz scrape (puxa métricas) por HTTP em intervalos regulares, armazena em TSDB e permite consultas em PromQL.
Componentes comuns:
- Prometheus: coleta e armazena.
- node-exporter: métricas do nó (CPU, memória, disco, rede).
- kube-state-metrics: estado dos objetos (pods, deployments, PDB).
- Alertmanager: agrupa, silencia e roteia alertas.
- Grafana: visualização.
Instalação via Helm (lab):
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm upgrade --install kps prometheus-community/kube-prometheus-stack \
-n monitoring --create-namespace \
--set grafana.adminPassword='troque-isto'
Valide:
kubectl -n monitoring get pods
kubectl -n monitoring get servicemonitors
O que medir primeiro
Não tente medir tudo. Comece pelo que dói:
| Sinal | Exemplo de métrica |
|---|---|
| Nós saudáveis | up{job="node-exporter"} |
| Pods prontos | kube_pod_status_ready |
| Reinícios | kube_pod_container_status_restarts_total |
| CPU/memória | container_cpu_usage_seconds_total, container_memory_working_set_bytes |
| Disco | node_filesystem_avail_bytes |
| API server | apiserver_request_duration_seconds |
| Erros HTTP | http_server_requests_seconds_count{status=~"5.."} |
Consultas úteis:
# nós down
up == 0
# pods que reiniciaram mais de 3 vezes na última hora
increase(kube_pod_container_status_restarts_total[1h]) > 3
# memória dos pods por namespace
sum by (namespace, pod) (container_memory_working_set_bytes{container!=""})
Grafana: dashboards que respondem perguntas
Um dashboard bom responde:
- O cluster está saudável?
- O que mudou nas últimas 24h?
- Qual serviço está degradado?
- Estamos dentro do SLO?
Evite dashboards de 200 painéis. Comece com:
- Visão geral: nós, pods, CPU, memória, disco.
- Namespace/aplicação: réplicas, restarts, latência, erros.
- SLO: disponibilidade e orçamento de erro.
Alertas: o que acordar alguém
Alerta bom é acionável. Exemplos:
- alert: NodeDown
expr: up{job="node-exporter"} == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Nó {{ $labels.instance }} down"
- alert: PodCrashLooping
expr: increase(kube_pod_container_status_restarts_total[10m]) > 3
for: 5m
labels:
severity: warning
Regras:
- Todo alerta tem runbook.
forevita ruído.- Severidade define canal (crítico acorda; warning espera).
- Alertmanager agrupa e silencia durante manutenção.
Logs e traces
- Logs: estruturados (JSON), com
traceId/requestId, retenção definida. Loki é uma opção leve. - Traces: OpenTelemetry no app, collector e backend (Jaeger/Tempo). Sem amostragem, o custo explode; comece com 10%.
Erros comuns
| Sintoma | Causa |
|---|---|
kubectl top indisponível |
metrics-server down/TLS |
Target down no Prometheus |
ServiceMonitor/porta/labels errados |
| Dashboard vazio | datasource errado ou métrica renomeada |
| Prometheus sem disco | retenção/TSDB sem PVC |
| Alertas em loop | for curto demais ou regra sem histerese |
| Cardinalidade explodindo | labels de alta cardinalidade (pod, request id) |
Checklist
- [ ] metrics-server funcionando (
kubectl top). - [ ] Prometheus com retenção e PVC.
- [ ] node-exporter e kube-state-metrics.
- [ ] Dashboards de cluster e aplicação.
- [ ] Alertas com severidade e runbook.
- [ ] Logs estruturados com correlação.
- [ ] Tracing com amostragem definida.
Glossário
- scrape: coleta periódica de métricas.
- TSDB: banco de séries temporais.
- PromQL: linguagem de consulta.
- ServiceMonitor: CRD do Prometheus Operator.
- SLO: objetivo de nível de serviço.
- cardinalidade: número de combinações de labels.
Próximo
Agora que você enxerga o cluster, vamos entender os operadores — o que eles fazem, quando usar e por que eles mudam a forma de operar dados.
Próximo: Curso Kubernetes 14 — Operadores: o que são e por que usar
Continuar a ler
Leia também
KubernetesKubernetes de Verdade — do zero ao cluster em produção
Uma trilha prática para entender, montar e operar um cluster Kubernetes — do primeiro pod ao failover do Postgres.
4 min de leitura
KubernetesCurso Kubernetes 28 — DR e capstone: provar que o cluster volta
RPO, RTO e drills reais: cenários de desastre, runbook, restore medido e o capstone que fecha o curso com um cluster que se recupera.
5 min de leitura
KubernetesCurso Kubernetes 27 — SLO/SLI, on-call e postmortem blameless
O que prometer, como medir e o que fazer quando o erro estoura: SLI, SLO, error budget, alertas que acordam alguém e postmortem sem caça às bruxas.
4 min de leitura
Comentários
Ainda sem comentários
Seja o primeiro a compartilhar sua opinião sobre este artigo.
Deixe um comentário