Pular para o conteúdo principal

🚨 Alertas

Um alerta avisa a equipe quando algo foge do normal (um pod reiniciando sem parar, um node fora do ar), antes que o usuário perceba.

O Kubernetes sozinho não envia alertas. Para isso, usa-se o Prometheus (que avalia as regras) com o Alertmanager (que envia a mensagem por e-mail, Slack ou outro canal).

informação

Alertas são configurados com o kubectl e arquivos YAML. O Painel Nuvion não tem uma tela para esse recurso.


🚀 Antes de começar​

  • Ter o acesso ao cluster configurado.

🚀 1. Verificar se o Prometheus está instalado​

kubectl get pods -A | grep -i -E "prometheus|alertmanager"
kubectl get crd | grep monitoring.coreos.com
  • Se aparecerem pods do Prometheus e do Alertmanager e o CRD prometheusrules.monitoring.coreos.com, siga para o passo 2.
  • Se não aparecer nada, o monitoramento ainda não está instalado. Use a verificação rápida (última seção) ou fale com o suporte.

🚀 2. Criar as regras de alerta​

Crie o arquivo alertas-basicos.yaml. Troque NAMESPACE-DO-PROMETHEUS e NOME-DO-RELEASE pelos valores do seu ambiente:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: alertas-basicos
namespace: NAMESPACE-DO-PROMETHEUS
labels:
release: NOME-DO-RELEASE
spec:
groups:
- name: kubernetes-basico
rules:
- alert: PodReiniciandoMuito
expr: increase(kube_pod_container_status_restarts_total[15m]) > 3
for: 5m
labels:
severity: warning
annotations:
summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} reiniciou mais de 3 vezes em 15 minutos"
- alert: PodEmCrashLoop
expr: kube_pod_container_status_waiting_reason{reason="CrashLoopBackOff"} == 1
for: 5m
labels:
severity: critical
annotations:
summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} em CrashLoopBackOff"
- alert: NodeNaoPronto
expr: kube_node_status_condition{condition="Ready",status="true"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Node {{ $labels.node }} fora do estado Ready"
kubectl apply -f alertas-basicos.yaml
kubectl get prometheusrule -A

A regra for: 5m evita falsos alarmes: o problema precisa durar 5 minutos antes de disparar.

🚀 3. Definir para onde os alertas vão​

No Alertmanager, configure um destino (receiver). Exemplo com e-mail:

route:
receiver: equipe
receivers:
- name: equipe
email_configs:
- to: "[email protected]"
from: "[email protected]"
smarthost: "smtp.exemplo.com.br:587"
auth_username: "[email protected]"
auth_password: "USE-UM-SECRET-PARA-A-SENHA"
aviso

Não escreva a senha direto no arquivo. Guarde-a em um Secret e referencie nele.

🚀 4. Testar o alerta​

Provoque um erro que dispare a regra PodEmCrashLoop:

kubectl run pod-crash --image=busybox -- sh -c 'exit 1'

Para ver os alertas no Prometheus, abra um túnel até ele:

kubectl port-forward -n NAMESPACE-DO-PROMETHEUS svc/NOME-DO-SERVICE-PROMETHEUS 9090:9090

Abra http://localhost:9090/alerts no navegador. Após cerca de 5 minutos, o alerta aparece como Firing e a mensagem chega ao destino configurado.

⚡ Verificação rápida (sem Prometheus)​

Enquanto o monitoramento não estiver instalado, use estes comandos para checar a saúde do cluster:

kubectl get nodes
kubectl get pods -A --field-selector=status.phase!=Running,status.phase!=Succeeded
kubectl get events -A --field-selector type=Warning

Isso não substitui um alerta automático, pois só mostra a situação no momento em que você roda.

✅ Como saber se deu certo​

O alerta de teste aparece como Firing em /alerts e a notificação chega ao destino.

❗ Problemas comuns​

SintomaCausaSolução
no matches for kind "PrometheusRule"O Prometheus Operator não está instaladoVeja o passo 1
A regra não aparece no PrometheusO rótulo release não confereUse o mesmo release do seu Prometheus
O alerta dispara mas nada chegaReceiver mal configuradoRevise o passo 3 e os logs do Alertmanager
A consulta não retorna dadosFalta o kube-state-metricsConfira se há um pod kube-state-metrics em kubectl get pods -A

🧹 Limpeza​

kubectl delete pod pod-crash
kubectl delete prometheusrule alertas-basicos -n NAMESPACE-DO-PROMETHEUS

🧠 Dúvidas?​

Fale com nosso time de suporte técnico da SaveinCloud!