Introducción
Las alertas y notificaciones son una parte crítica de tu flujo de trabajo de implementación. Cuando trabajas con un clúster de Kubernetes, a menudo necesitas ser notificado inmediatamente sobre cualquier problema crítico en tu clúster.
Alertmanager es parte del kube-prom-stack
instalado en tu clúster en Prometheus Stack. Te permite recibir alertas de diversas fuentes como Prometheus. Las reglas se crean en el lado de Prometheus, que a su vez pueden activar alertas. Es responsabilidad de Alertmanager interceptar esas alertas, agruparlas (agregación), aplicar otras transformaciones y finalmente enviarlas a los receptores configurados. Los mensajes de notificación pueden ser formateados adicionalmente para incluir detalles adicionales si se desea. Puedes usar Slack, Gmail, etc. para enviar notificaciones en tiempo real.
En esta sección, aprenderás cómo inspeccionar las alertas existentes, crear nuevas y luego configurar Alertmanager para enviar notificaciones a través de Slack usando el mismo archivo de manifiesto utilizado para configurar Prometheus.
Tabla de contenido
- Requisitos previos
- Paso 1 – Verificar las alertas incluidas
- Paso 2 – Crear una nueva alerta
- Paso 3 – Configurar Alertmanager para enviar notificaciones a Slack
- Paso 4 – Depurar una alerta activada
- Conclusión
Requisitos previos
Para completar este tutorial, necesitarás:
- La pila de monitoreo de Prometheus instalada en tu clúster como se explica en Pila de Prometheus.
- La pila de Loki instalada en tu clúster como se explica en Pila de Loki.
- La aplicación de muestra Emojivoto ha sido implementada en el clúster. Siga los pasos del repositorio principal. Estará creando alertas para esta aplicación.
- Tiene derechos administrativos sobre un espacio de trabajo de Slack. Más adelante, creará una aplicación con un webhook entrante que se utilizará para enviar notificaciones desde Alertmanager.
Paso 1 – Verificar Alertas Incluidas
kube-prom-stack
ya tiene más de cien reglas activadas. Para acceder a la consola de Prometheus, primero haga un reenvío de puerto a su máquina local.
Abra un navegador web en localhost:9091 y acceda al elemento de menú Alertas. Debería ver algunas alertas predefinidas y debería lucir como lo siguiente:
Haga clic en cualquiera de las alertas para expandirla. Puede ver información sobre la expresión que consulta, las etiquetas que ha configurado y anotaciones, que son muy importantes desde una perspectiva de plantilla. Prometheus admite la plantilla en las anotaciones y etiquetas de las alertas. Para obtener más información, consulte la documentación oficial.
Paso 2 – Crear una nueva alerta
Para crear una nueva alerta, necesitas agregar una nueva definición en la sección additionalPrometheusRule
del archivo de valores de Helm kube-prom-stack
. Crearás una alerta de ejemplo que se activará si el espacio de nombres emojivoto
no tiene el número esperado de instancias. El número esperado de pods para la aplicación emojivoto
es 4.
Primero, abre el archivo 04-setup-observability/assets/manifests/prom-stack-values.yaml
proporcionado en el repositorio del Kit de inicio, utilizando un editor de texto de tu elección (preferiblemente con soporte para linting YAML). Luego, descomenta el bloque additionalPrometheusRules
.
Finalmente, aplica la configuración usando helm
:
Para verificar que la alerta se haya creado correctamente, navega hasta la Consola de Prometheus, haz clic en el elemento de menú Alerts, e identifica la alerta EmojivotioInstanceDown
. Debería ser visible en la parte inferior de la lista.
Paso 3 – Configurar Alertmanager para enviar notificaciones a Slack
Para completar esta sección, necesitas tener derechos administrativos sobre un espacio de trabajo de Slack. Esto te permitirá crear el webhook entrante que necesitarás en los siguientes pasos. También deberás crear un canal donde desees recibir notificaciones de Alertmanager.
Configurarás Alertmanager para que recorra todas las alertas recibidas e imprima sus respectivos resúmenes y descripciones en líneas nuevas.
- Abre un navegador web y ve a
https://api.slack.com/apps
. Haz clic en el botón Crear nueva aplicación. - En la ventana Crear una aplicación, selecciona la opción Desde cero. Luego, pon un nombre a tu aplicación y selecciona el espacio de trabajo correspondiente.
- En la página Información básica, haz clic en la opción Webhooks entrantes, actívala y haz clic en el botón Agregar nuevo webhook al espacio de trabajo en la parte inferior.
- En la siguiente página, usa la lista desplegable Buscar un canal… para seleccionar el canal deseado donde quieras enviar notificaciones. Cuando estés listo, haz clic en el botón Permitir.
- Copia el valor de la URL del webhook que se muestra en la página. Lo necesitarás en la próxima sección.
A continuación, le dirás a Alertmanager cómo enviar notificaciones a Slack. Abre el archivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
proporcionado en el repositorio del Kit de inicio usando un editor de texto de tu elección. Descomenta todo el bloque alertmanager.config
. Asegúrate de actualizar los valores slack_api_url
y channel
reemplazando los marcadores <>
correspondientemente.
En la configuración anterior,
slack_api_url
: URL del webhook entrante de Slack creada en el paso 4receptores.[].slack_configs
: define el canal de Slack utilizado para enviar notificaciones, el título de la notificación y el mensaje real. También es posible formatear el mensaje de notificación (o cuerpo) según sus requisitos.título
ytexto
: itera sobre las alertas activadas e imprime el resumen y la descripción utilizando el sistema de plantillas de Prometheus.send_resolved
: booleano que indica si Alertmanager debe enviar una notificación cuando una alerta ya no está activada.
Los parámetros matcher
y continue
aún están comentados ya que los descomentarás más adelante en la guía. Por ahora, deberían permanecer comentados.
Finalmente, actualiza el kube-prometheus-stack
utilizando helm
:
En este punto, deberías recibir notificaciones de Slack para todas las alertas activadas.
A continuación, vas a probar si la alerta EmojivotoInstanceDown
agregada previamente funciona y envía una notificación a Slack al reducir el número de réplicas para el despliegue /emoji
del espacio de nombres emojivoto
.
Desde tu terminal, ejecuta el siguiente comando para llevar el número de réplicas para el despliegue /emoji
a 0:
Abra un navegador web en localhost:9091 y acceda al elemento de menú Alertas. Busque la alerta EmojivotoInstanceDown creada anteriormente. El estado de la alerta debería mostrar Disparando después de aproximadamente un minuto de reducir la implementación.
A message notification will be sent to Slack to the channel you configured earlier if everything goes well. You should see the “The Number of pods from the namespace emojivoto
is lower than the expected 4.” alert in the Slack message as configured in the annotations.description
config of the additionalPrometheusRulesMap
block.
Actualmente, todas las activaciones de alertas se enviarán al canal de Slack. Esto puede causar fatiga de notificación. Para profundizar en qué notificación se envía, puede restringir Alertmanager para que solo envíe notificaciones para alertas que coincidan con un cierto patrón. Esto se hace usando el parámetro matcher
.
Abra el archivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
proporcionado en el repositorio del Kit de Inicio usando un editor de texto de su elección. Descomente todo el bloque alertmanager.config
. Asegúrese de descomentar los parámetros matcher
y continue
:
Finalmente, actualice el kube-prometheus-stack
utilizando helm
:
Ahora, solo debería recibir alertas del nombre de alerta coincidente EmojivotoInstanceDown
. Dado que continue
está establecido en falso, Alertmanager solo enviará notificaciones de esta alerta y dejará de enviarlas a otras.
Al hacer clic en el nombre de la notificación en Slack se abrirá un navegador web a una página web inalcanzable con el DNS interno de Kubernetes del pod Alertmanager. Esto es esperado. Algunos enlaces útiles para que los revises: Para más información, puedes consultar el servicio DNS del pod,
los parámetros de configuración para AlertManager, y algunos ejemplos de notificaciones.
Paso 4 – Depurar una Alerta Activada
Cuando una alerta se activa y envía una notificación en Slack, es importante que puedas depurar el problema fácilmente y encontrar la causa raíz prontamente.
Para hacer esto, puedes hacer uso de Grafana que ya ha sido instalado en los tutoriales de Stack de Prometheus y Stack de Loki.
Crea un reenvío de puerto para Grafana en el puerto 3000
:
Abre un navegador web en localhost:3000 e inicia sesión utilizando las credenciales predeterminadas admin/prom-operator
.
Navega a la sección Alertas. Desde el filtro de Estado, haz clic en la opción Activado. Identifica la alerta emojivoto-instance-down
definida en la sección Creación de una Nueva Alerta y expándela. Deberías ver lo siguiente:
Haz clic en el botón Ver gráfico. Desde la siguiente página, podrás observar el recuento del número de pods en el espacio de nombres emojivoto
mostrado como una métrica. Ten en cuenta que Grafana filtra los resultados utilizando un rango de tiempo de Última 1 hora de manera predeterminada. Ajusta esto al intervalo de tiempo en el que se activa la Alerta. Puedes ajustar el rango de tiempo utilizando la opción De A para obtener un resultado más granular o utilizando un Rango rápido como Últimos 30 minutos
.
Desde la pestaña Explorar, selecciona la fuente de datos Loki. En el buscador de registros, ingresa lo siguiente: {namespace="emojivoto"}
y haz clic en el botón Ejecutar consulta en la parte superior derecha de la página. Deberías ver lo siguiente:
Asegúrate de ajustar el intervalo de tiempo correspondientemente.
Desde esta página, puedes filtrar aún más los resultados de los registros. Por ejemplo, para filtrar los registros del contenedor web-svc
del espacio de nombres emojivoto
, puedes ingresar la siguiente consulta: {namespace="emojivoto", container="web-svc"}
Más explicaciones sobre el uso de LogQL
se pueden encontrar en Paso 3 – Uso de LogQL.
También puedes hacer uso de los Eventos de Kubernetes exportados instalados previamente y filtrar eventos relacionados con el espacio de nombres emojivoto
.
Ingresa la siguiente consulta en el navegador de registros: {app="event-exporter"} |= "emojivoto"
. Esto devolverá los eventos de Kubernetes relacionados con el espacio de nombres emojivoto
.
Conclusión
En este tutorial, aprendiste cómo inspeccionar alertas existentes, crear nuevas y configurar AlertManager
para enviar notificaciones a Slack.
Más información
- Configurar un conjunto de monitoreo de Kubernetes con Prometheus, Grafana y Alertmanager en DigitalOcean
- Crear alertas usando DigitalOcean Uptime
El siguiente paso es configurar la copia de seguridad y restauración utilizando Velero o TrilioVault en su clúster DOKS.