Saltar al contenido principal

🚨 Alertas

Una alerta avisa al equipo cuando algo se sale de lo normal (un pod reiniciándose sin parar, un node caído), antes de que el usuario lo note.

Kubernetes por sí solo no envía alertas. Para eso se usa Prometheus (que evalúa las reglas) junto con Alertmanager (que envía el mensaje por correo, Slack u otro canal).

info

Las alertas se configuran con kubectl y archivos YAML. El Panel Nuvion no tiene una pantalla para este recurso.


🚀 Antes de comenzar​

  • Tener el acceso al clúster configurado.

🚀 1. Verificar si Prometheus está instalado​

kubectl get pods -A | grep -i -E "prometheus|alertmanager"
kubectl get crd | grep monitoring.coreos.com
  • Si aparecen pods de Prometheus y Alertmanager y el CRD prometheusrules.monitoring.coreos.com, siga al paso 2.
  • Si no aparece nada, el monitoreo aún no está instalado. Use la verificación rápida (última sección) o hable con soporte.

🚀 2. Crear las reglas de alerta​

Cree el archivo alertas-basicos.yaml. Cambie NAMESPACE-DO-PROMETHEUS y NOME-DO-RELEASE por los valores de su entorno:

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 }} se reinició más de 3 veces en 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 }} en CrashLoopBackOff"
- alert: NodeNaoPronto
expr: kube_node_status_condition{condition="Ready",status="true"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Node {{ $labels.node }} fuera del estado Ready"
kubectl apply -f alertas-basicos.yaml
kubectl get prometheusrule -A

La regla for: 5m evita falsas alarmas: el problema debe durar 5 minutos antes de dispararse.

🚀 3. Definir a dónde van las alertas​

En Alertmanager, configure un destino (receiver). Ejemplo con correo:

route:
receiver: equipe
receivers:
- name: equipe
email_configs:
- to: "[email protected]"
from: "[email protected]"
smarthost: "smtp.ejemplo.com:587"
auth_username: "[email protected]"
auth_password: "USE-UN-SECRET-PARA-LA-CONTRASEÑA"
aviso

No escriba la contraseña directamente en el archivo. Guárdela en un Secret y haga referencia a él.

🚀 4. Probar la alerta​

Provoque un error que dispare la regla PodEmCrashLoop:

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

Para ver las alertas en Prometheus, abra un túnel hasta él:

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

Abra http://localhost:9090/alerts en el navegador. Después de cerca de 5 minutos, la alerta aparece como Firing y el mensaje llega al destino configurado.

⚡ Verificación rápida (sin Prometheus)​

Mientras el monitoreo no esté instalado, use estos comandos para revisar la salud del clúster:

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

Esto no sustituye una alerta automática, pues solo muestra la situación en el momento en que lo ejecuta.

✅ Cómo saber si funcionó​

La alerta de prueba aparece como Firing en /alerts y la notificación llega al destino.

❗ Problemas comunes​

SíntomaCausaSolución
no matches for kind "PrometheusRule"Prometheus Operator no está instaladoVea el paso 1
La regla no aparece en PrometheusLa etiqueta release no coincideUse el mismo release de su Prometheus
La alerta se dispara pero no llega nadaReceiver mal configuradoRevise el paso 3 y los logs de Alertmanager
La consulta no devuelve datosFalta kube-state-metricsVerifique si hay un pod kube-state-metrics en kubectl get pods -A

🧹 Limpieza​

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

🧠 ¿Dudas?​

¡Hable con nuestro equipo de soporte técnico de SaveinCloud!