计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
configure-alerting-rules【效率与协作】Configura Prometheus Alertmanager con árboles de enrutamiento, receptores (Slack, PagerDuty, correo electrónico), reglas de inhibición, silencios y plantillas de notificación para alertas de incidentes accionables. Útil para implementar monitoreo proactivo con detección automatizada de incidentes, enrutar alertas al equipo apropiado según la gravedad…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Configura reglas de alerta de Prometheus y Alertmanager para notificaciones de incidentes confiables y accionables.
Consulta Ejemplos Extendidos para archivos de configuración completos y plantillas.
Instala y configura Alertmanager para recibir alertas de Prometheus.
Despliegue con Docker Compose (estructura básica):
version: '3.8'
services:
alertmanager:
image: prom/alertmanager:v0.26.0
ports:
- "9093:9093"
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
# ... (see EXAMPLES.md for complete configuration)
Configuración básica de Alertmanager (extracto de alertmanager.yml):
global:
resolve_timeout: 5m
slack_api_url: 'https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK'
route:
receiver: 'default-receiver'
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- match:
severity: critical
receiver: pagerduty-critical
# ... (see EXAMPLES.md for complete routing, inhibition rules, and receivers)
Configurar Prometheus para usar Alertmanager (prometheus.yml):
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
timeout: 10s
api_version: v2
Esperado: Interfaz de Alertmanager accesible en http://localhost:9093, "Status > Alertmanagers" de Prometheus muestra estado UP.
En caso de fallo:
docker logs alertmanagercurl http://alertmanager:9093/api/v2/statuscurl -X POST <SLACK_WEBHOOK_URL> -d '{"text":"test"}'amtool check-config alertmanager.ymlCrea reglas de alerta que se activen cuando se cumplan las condiciones.
Crear el archivo de reglas de alerta (extracto de /etc/prometheus/rules/alerts.yml):
groups:
- name: instance_alerts
interval: 30s
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: critical
team: infrastructure
annotations:
summary: "Instance {{ $labels.instance }} is down"
description: "{{ $labels.instance }} has been down for >5min."
runbook_url: "https://wiki.example.com/runbooks/instance-down"
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 10m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
# ... (see EXAMPLES.md for complete alerts)
Buenas prácticas de diseño de alertas:
for: Previene alertas intermitentes. Usar 5-10 minutos para la mayoría de las alertas.Cargar reglas en Prometheus:
# prometheus.yml
rule_files:
- "rules/*.yml"
Validar y recargar:
promtool check rules /etc/prometheus/rules/alerts.yml
curl -X POST http://localhost:9090/-/reload
Esperado: Las alertas son visibles en la página "Alerts" de Prometheus, las alertas se activan cuando se superan los umbrales, Alertmanager recibe las alertas activadas.
En caso de fallo:
promtool check rulesDiseña mensajes de notificación legibles y accionables.
Crear el archivo de plantilla (extracto de /etc/alertmanager/templates/default.tmpl):
{{ define "slack.default.title" }}
[{{ .Status | toUpper }}] {{ .GroupLabels.alertname }}
{{ end }}
{{ define "slack.default.text" }}
{{ range .Alerts }}
*Alert:* {{ .Labels.alertname }}
*Severity:* {{ .Labels.severity }}
*Summary:* {{ .Annotations.summary }}
{{ if .Annotations.runbook_url }}*Runbook:* {{ .Annotations.runbook_url }}{{ end }}
{{ end }}
{{ end }}
# ... (see EXAMPLES.md for complete email and PagerDuty templates)
Usar plantillas en receptores:
receivers:
- name: 'slack-custom'
slack_configs:
- channel: '#alerts'
title: '{{ template "slack.default.title" . }}'
text: '{{ template "slack.default.text" . }}'
Esperado: Las notificaciones tienen formato consistente, incluyen todo el contexto relevante, son accionables con vínculos a manuales.
En caso de fallo:
amtool template test --config.file=alertmanager.yml{{ . | json }} para depurar la estructura de datos de la plantillaOptimiza la entrega de alertas con reglas de enrutamiento inteligentes.
Configuración de enrutamiento avanzada (extracto):
route:
receiver: 'default-receiver'
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
routes:
- match:
team: platform
receiver: 'team-platform'
routes:
- match:
severity: critical
receiver: 'pagerduty-platform'
group_wait: 10s
repeat_interval: 15m
continue: true # Also send to Slack
# ... (see EXAMPLES.md for complete routing with time intervals)
Estrategias de agrupación:
# Group by alertname: All HighCPU alerts bundled together
group_by: ['alertname']
# Group by alertname AND cluster: Separate notifications per cluster
group_by: ['alertname', 'cluster']
Esperado: Las alertas se enrutan a los equipos correctos, agrupadas lógicamente, con timing apropiado para la gravedad.
En caso de fallo:
amtool config routes test --config.file=alertmanager.yml --alertname=HighCPU --label=severity=criticalamtool config routes show --config.file=alertmanager.ymlcontinue: true si la alerta debe coincidir con múltiples rutasReduce el ruido de alertas con reglas de inhibición y silencios temporales.
Reglas de inhibición (suprimir alertas dependientes):
inhibit_rules:
# Cluster down suppresses all node alerts in that cluster
- source_match:
alertname: 'ClusterDown'
severity: 'critical'
target_match_re:
alertname: '(InstanceDown|HighCPU|HighMemory)'
equal: ['cluster']
# Service down suppresses latency and error alerts
- source_match:
alertname: 'ServiceDown'
target_match_re:
alertname: '(HighLatency|HighErrorRate)'
equal: ['service', 'namespace']
# ... (see EXAMPLES.md for more inhibition patterns)
Crear silencios de forma programática:
# Silence during maintenance
amtool silence add \
instance=app-server-1 \
--author="ops-team" \
--comment="Scheduled maintenance" \
--duration=2h
# List and manage silences
amtool silence query
amtool silence expire <SILENCE_ID>
Esperado: La inhibición reduce las alertas en cascada automáticamente, los silencios previenen notificaciones durante el mantenimiento planificado.
En caso de fallo:
Conecta Alertmanager con PagerDuty, Opsgenie, Jira, etc.
Integración con PagerDuty (extracto):
receivers:
- name: 'pagerduty'
pagerduty_configs:
- routing_key: 'YOUR_INTEGRATION_KEY'
severity: '{{ .CommonLabels.severity }}'
description: '{{ range .Alerts.Firing }}{{ .Annotations.summary }}{{ end }}'
details:
firing: '{{ .Alerts.Firing | len }}'
alertname: '{{ .GroupLabels.alertname }}'
# ... (see EXAMPLES.md for complete integration examples)
Webhook para integraciones personalizadas:
receivers:
- name: 'webhook-custom'
webhook_configs:
- url: 'https://your-webhook-endpoint.com/alerts'
send_resolved: true
Esperado: Las alertas crean incidentes en PagerDuty, aparecen en los canales de comunicación del equipo, activan las escaladas de guardia.
En caso de fallo:
--log.level=debugfor: Las alertas sin for se activan en picos transitorios. Siempre usar ventanas de 5-10 minutos.['...'] envía notificaciones individuales. Usar agrupación de etiquetas específica.setup-prometheus-monitoring - Definir métricas y reglas de grabación que alimentan las reglas de alertadefine-slo-sli-sla - Generar alertas de tasa de quema de SLO para la gestión del presupuesto de errorwrite-incident-runbook - Crear manuales vinculados desde las anotaciones de alertabuild-grafana-dashboards - Visualizar el historial de activación de alertas y patrones de silencio