Como configurar observabilidade básica num cluster Kubernetes do zero
1. Fundamentos da Observabilidade no Kubernetes
Observabilidade é a capacidade de entender o estado interno de um sistema a partir dos dados que ele produz externamente. Em ambientes Kubernetes, onde dezenas ou centenas de contêineres são orquestrados dinamicamente, essa capacidade não é opcional — é requisito fundamental para operação confiável.
Os três pilares da observabilidade são:
- Métricas: dados numéricos coletados em intervalos regulares (uso de CPU, memória, latência de requisições)
- Logs: registros textuais de eventos ocorridos nos componentes do sistema
- Tracing: rastreamento do fluxo de requisições através de múltiplos serviços
Para este guia prático, focaremos em métricas e logs, que formam a base mínima para qualquer operação de cluster Kubernetes.
Diferente do monitoramento tradicional (que pergunta "o sistema está no ar?"), a observabilidade permite perguntar "por que o sistema está se comportando desta forma?" — uma distinção crítica em ambientes dinâmicos como Kubernetes.
2. Preparando o Cluster para Observabilidade
Antes de instalar qualquer ferramenta, precisamos de um cluster funcional e do Helm instalado.
Pré-requisitos:
- Cluster Kubernetes (minikube, kind, ou cloud como EKS/GKE/AKS)
- kubectl configurado e apontando para o cluster
- Helm 3.x instalado (versão mais recente)
Verificando o cluster:
kubectl cluster-info
kubectl get nodes
Instalando o Helm:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version
Criando namespaces dedicados:
kubectl create namespace monitoring
kubectl create namespace logging
Organizar ferramentas em namespaces separados facilita o gerenciamento, a segurança e a limpeza futura.
3. Coleta de Métricas com Prometheus
O Prometheus é o padrão de fato para métricas em Kubernetes. Usaremos o kube-prometheus-stack, que empacota Prometheus, Alertmanager, Grafana e exportadores essenciais.
Adicionando o repositório Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
Instalando o stack:
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set grafana.enabled=true \
--set alertmanager.enabled=true
Este comando instala:
- Prometheus Server: coleta e armazena métricas
- kube-state-metrics: métricas sobre objetos Kubernetes (pods, deployments, etc.)
- node-exporter: métricas dos nós (CPU, memória, disco)
- Grafana: visualização (abordaremos na seção 4)
- Alertmanager: gerenciamento de alertas (seção 6)
Verificando a instalação:
kubectl get pods -n monitoring
kubectl get svc -n monitoring
Verificando targets do Prometheus:
kubectl port-forward -n monitoring svc/prometheus-operated 9090:9090
Acesse http://localhost:9090/targets no navegador para ver todos os endpoints sendo monitorados.
4. Visualização de Métricas com Grafana
O Grafana já foi instalado junto com o stack. Vamos configurá-lo e importar dashboards essenciais.
Expondo o Grafana:
kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80
Acesse http://localhost:3000. Credenciais padrão:
- Usuário: admin
- Senha: prom-operator
Verificando o datasource Prometheus:
No Grafana, vá em Configuration > Data Sources. O datasource Prometheus já deve estar configurado automaticamente apontando para http://prometheus-operated:9090.
Importando dashboards essenciais:
Vá em Dashboards > Import e use os seguintes IDs:
- Kubernetes Cluster (ID 315): visão geral do cluster
- Kubernetes Nodes (ID 11073): métricas detalhadas por nó
- Kubernetes Pods (ID 6411): métricas por pod
Exemplo de consulta simples:
No Prometheus, execute esta consulta para ver uso de CPU dos pods:
rate(container_cpu_usage_seconds_total{namespace="default"}[5m])
5. Centralização de Logs com Loki e Promtail
Loki é um sistema de agregação de logs desenvolvido pela Grafana Labs, projetado para ser econômico e integrar-se nativamente ao Grafana.
Instalando Loki e Promtail:
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install loki grafana/loki-stack \
--namespace logging \
--set grafana.enabled=false \
--set promtail.enabled=true \
--set loki.persistence.enabled=true
Verificando a instalação:
kubectl get pods -n logging
kubectl get svc -n logging
Configurando o Promtail para capturar logs de todos os pods:
O Promtail coleta logs dos arquivos de log dos contêineres em cada nó. A configuração padrão já inclui scraping de todos os pods. Para verificar:
kubectl port-forward -n logging svc/loki 3100:3100
Teste o Loki:
curl http://localhost:3100/ready
Adicionando datasource Loki no Grafana:
- No Grafana, vá em Configuration > Data Sources > Add data source
- Selecione Loki
- URL:
http://loki.logging.svc.cluster.local:3100 - Clique em Save & Test
Consultando logs no Grafana:
Vá em Explore, selecione o datasource Loki e execute:
{namespace="default"}
Para filtrar por pod específico:
{namespace="default"} |= "error"
6. Alertas Básicos e Notificações
Vamos criar regras de alerta no Prometheus e configurar o Alertmanager para notificações.
Criando regras de alerta:
Edite a configuração do Prometheus:
kubectl edit prometheus prometheus-kube-prometheus-prometheus -n monitoring
Adicione regras como:
groups:
- name: kubernetes-alerts
rules:
- alert: PodCrashLooping
expr: kube_pod_status_phase{phase="CrashLoopBackOff"} > 0
for: 5m
labels:
severity: critical
annotations:
summary: "Pod {{ $labels.pod }} em CrashLoopBackOff"
- alert: NodeLowMemory
expr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.1
for: 5m
labels:
severity: warning
annotations:
summary: "Nó {{ $labels.node }} com menos de 10% de memória disponível"
Configurando Alertmanager para Slack:
Edite o Alertmanager:
kubectl edit alertmanager prometheus-kube-prometheus-alertmanager -n monitoring
Adicione a configuração:
receivers:
- name: slack
slack_configs:
- api_url: "https://hooks.slack.com/services/SEU/WEBHOOK/AQUI"
channel: "#alerts"
send_resolved: true
route:
receiver: slack
Testando o alerta:
Force um pod a crashar:
kubectl run test-alert --image=nginx --restart=Never
kubectl delete pod test-alert
Verifique no Alertmanager:
kubectl port-forward -n monitoring svc/prometheus-kube-prometheus-alertmanager 9093:9093
Acesse http://localhost:9093 para ver alertas disparados.
7. Validação e Troubleshooting da Stack
Verificação geral de saúde:
kubectl get pods -n monitoring -o wide
kubectl get pods -n logging -o wide
kubectl logs -n monitoring prometheus-prometheus-kube-prometheus-prometheus-0
Problemas comuns e soluções:
| Problema | Causa provável | Solução |
|---|---|---|
| Pods não aparecem nos targets | RBAC insuficiente | Verificar ClusterRoleBindings |
| Grafana não carrega dashboards | Datasource incorreto | Verificar URL do Prometheus |
| Loki sem logs | Promtail não consegue ler arquivos | Verificar permissões do daemonset |
| Alertas não disparam | Regras mal formatadas | Validar sintaxe YAML |
Diagnóstico com kubectl:
# Verificar logs de um pod específico
kubectl logs -n monitoring prometheus-prometheus-kube-prometheus-prometheus-0
# Verificar eventos do namespace
kubectl get events -n monitoring
# Verificar métricas disponíveis
kubectl port-forward -n monitoring svc/prometheus-operated 9090:9090
# Acesse http://localhost:9090/api/v1/label/__name__/values
Boas práticas finais:
- Defina limites de recursos para todos os componentes da stack
- Configure persistência de dados para Prometheus e Loki
- Implemente NetworkPolicies para restringir tráfego entre componentes
- Utilize ServiceMonitors e PodMonitors para escalar a coleta de métricas
- Documente todos os alertas criados e seus procedimentos de resposta
Com esta configuração básica, você tem métricas, logs e alertas funcionando em seu cluster Kubernetes, prontos para evoluir conforme a complexidade do ambiente aumentar.
Referências
- Documentação oficial do Prometheus — Guia completo sobre conceitos, configuração e operação do Prometheus
- kube-prometheus-stack Helm Chart — Documentação oficial do chart Helm utilizado neste tutorial
- Documentação do Loki — Guia oficial de instalação, configuração e consulta de logs com Loki
- Grafana Dashboards para Kubernetes — Repositório oficial com centenas de dashboards prontos para importação
- Alertmanager Configuration — Documentação completa sobre configuração de rotas, receptores e inibidores de alertas
- Helm Package Manager — Guia oficial de instalação e uso do Helm para Kubernetes
- Kubernetes Monitoring Best Practices — Práticas recomendadas pela comunidade Kubernetes para monitoramento de clusters