Búsqueda de sitios web

Configurar la notificación de alerta por correo electrónico de Prometheus mediante Alertmanager |


Bienvenido a esta guía sobre cómo configurar la notificación de alerta por correo electrónico de Prometheus utilizando Alertmanager. Prometheus es una herramienta de alerta y seguimiento de eventos gratuita y de código abierto. Fue desarrollado por primera vez por SoundCloud en 2012.

Prometheus funciona recopilando y almacenando datos de series temporales. Esta cuantificación numérica varía de vez en cuando, por lo que los datos recopilados se guardan con una marca de tiempo. Se prefiere Prometheus porque ofrece las siguientes características interesantes:

  • Los nodos de servidor único son autónomos y no dependen del almacenamiento distribuido
  • Los objetivos se descubren mediante el descubrimiento de servicios o la configuración estática.
  • La recopilación de métricas de series temporales se realiza mediante un modelo de extracción a través de HTTP.
  • Admite múltiples modos de gráficos y paneles.
  • Utiliza el lenguaje de consulta PromQL que es flexible para aprovechar esta dimensionalidad.
  • Modelo de datos multidimensional donde los datos de series temporales se identifican por nombre de métrica y pares clave/valor

Configurar alertas en Prometheus es vital ya que puede ayudar a identificar problemas de rendimiento y salud de su servidor o aplicaciones tan pronto como ocurren. Alertmanager es la aplicación que maneja las alertas enviadas por las aplicaciones y notifica al usuario por correo electrónico, Slack u otras herramientas. Las reglas de alerta definidas en Prometheus se tienen en cuenta al extraer métricas. Si alguna de las condiciones de alerta se cumple según las reglas, Prometheus la envía al AlertManager.

Alertmanager puede gestionar la agrupación, la deduplicación y el enrutamiento de alertas al receptor correcto. Gestiona alertas a través de sus canales, que son:

  • Silenciar: silencia las alertas durante un período determinado
  • Agrupación: agrupa alertas de naturaleza similar en una sola notificación para evitar enviar múltiples notificaciones.
  • Inhibición: suprime alertas específicas si ya se han activado otras alertas.

Ahora profundicemos y configuremos AlertManager.

Antes de que comencemos

Esta guía requiere que tengas Prometheus instalado en tu sistema. Esto se puede lograr utilizando las siguientes guías:

  • En Ubuntu
    • Instalar el servidor Prometheus en Ubuntu
  • En Debian
    • Instale Prometheus y node_exporter en Debian
  • En RHEL 9/CentOS 9/Rocky Linux 9/Alma Linux 9
    • Instale Prometheus con Node Exporter en Rocky Linux 9/AlmaLinux 9
  • En RHEL 8/CentOS 8/Rocky Linux 8/Alma Linux 8
    • Cómo instalar Prometheus en RHEL 8/CentOS 8

#.1 Instalar AlertManager en Linux

Comenzaremos instalando AlertManager para manejar la agrupación, deduplicación y enrutamiento de alertas para Prometheus. Descargue AlertManager desde la página de descarga de Prometheus.

También es posible extraer el archivo con wget.

Primero, exporte la última versión:

VER=${curl -s https://api.github.com/repos/prometheus/alertmanager/releases/latest|grep tag_name|cut -d '"' -f 4|sed 's/v//'}

Ahora descarga la versión con el comando;

wget https://github.com/prometheus/alertmanager/releases/download/v${VER}/alertmanager-${VER}.linux-amd64.tar.gz

Extrae el archivo:

tar xzf alertmanager-*.linux-amd64.tar.gz

Copie los archivos binarios a su ` PATH;

sudo cp alertmanager-$VER.linux-amd64/{alertmanager,amtool} /usr/local/bin/

Cree un usuario para administrar el servicio AlertManager:

sudo adduser -M -r -s /sbin/nologin alertmanager

Cree un archivo de configuración para AlertManager con la propiedad correcta:

sudo mkdir -p /etc/alertmanager/data
sudo cp alertmanager-$VER.linux-amd64/alertmanager.yml /etc/alertmanager/
sudo chown -R alertmanager: /etc/alertmanager

#2. Configurar AlertManager en Linux

Una vez instalado, necesitamos configurar AlertManager para manejar las alertas de Prometheus. Para hacer esto, editaremos el archivo de configuración como se muestra:

sudo vim /etc/alertmanager/alertmanager.yml

En el archivo, realice los siguientes ajustes:

route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 1m
  receiver: 'email'
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://127.0.0.1:5001/'
  - name: 'email'
    email_configs:
    - to: '[email '
      from: '[email '
      smarthost: smtp.gmail.com:587
      auth_username: '[email '
      auth_identity: '[email '
      auth_password: 'google-app-password'
      send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

En el archivo anterior:

  • repeat_interval le dice al AlertManager que espere el tiempo establecido antes de enviar otra notificación. El valor predeterminado es 1 hora, pero puedes ajustarlo como desees.
  • receptor: 'correo electrónico' establece el receptor predeterminado que se utilizará. Para este tutorial, hemos configurado el receptor predeterminado como correo electrónico.
  • receptores: enumera los receptores disponibles con sus configuraciones. por ejemplo web.hook y correo electrónico como arriba

Recuerde que el correo electrónico del remitente y del destinatario puede ser la misma dirección de Gmail, por ejemplo, [email . Más adelante demostraré cómo obtener la contraseña de la aplicación de Google

Una vez que se hayan proporcionado los detalles de correo electrónico correctos, guarde el archivo y valídelo con el comando:

$ amtool check-config /etc/alertmanager/alertmanager.yml
Checking '/etc/alertmanager/alertmanager.yml'  SUCCESS
Found:
Found:
 - global config
 - route
 - 1 inhibit rules
 - 2 receivers
 - 0 templates

Ahora cree un archivo de servicio systemd para AlertManager;

sudo vim /etc/systemd/system/alertmanager.service

Agregue las siguientes líneas al archivo:

[Unit]
Description=AlertManager Server Service
Wants=network-online.target
After=network-online.target

[Service]
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=/usr/local/bin/alertmanager --config.file /etc/alertmanager/alertmanager.yml --storage.path=/etc/alertmanager/data

[Install]
WantedBy=multi-user.target

Guarde el archivo y vuelva a cargar las configuraciones de systemd.

sudo systemctl daemon-reload

En sistemas basados en Rhel, modifique SELinux como se muestra;

sudo /sbin/restorecon -v /usr/local/bin/alertmanager

Inicie y habilite el servicio:

sudo systemctl enable --now alertmanager

Verifique si el servicio se está ejecutando:

$ systemctl status alertmanager
● alertmanager.service - AlertManager Server Service
     Loaded: loaded (/etc/systemd/system/alertmanager.service; enabled; vendor preset: disabled)
     Active: active (running) since Wed 2022-09-07 11:28:03 CEST; 3s ago
   Main PID: 91886 (alertmanager)
      Tasks: 6 (limit: 23441)
     Memory: 15.8M
        CPU: 55ms
     CGroup: /system.slice/alertmanager.service
             └─91886 /usr/local/bin/alertmanager --config.file /etc/alertmanager/alertmanager.yml --storage.path=/etc/alertmanager/data

#3. Configurar Prometheus para alertas

Ahora configuraremos Prometheus creando la regla de alerta. Para hacer esto, edite el archivo de configuración como se muestra;

sudo vim /etc/prometheus/prometheus.yml

En el archivo de configuración, agregue las siguientes líneas:

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - localhost:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
   - "alert_rules.yml"

Guarde el archivo y cree las reglas de alerta de Prometheus (alert_rules.yml) como se especifica en la configuración.

sudo vim /etc/prometheus/alert_rules.yml

En el archivo, defina las reglas deseadas:

groups:
- name: alert_rules
  rules:
   - alert: InstanceDown
     expr: up == 0
     for: 1m

En el archivo anterior, hemos configurado una regla de alerta para objetivos: postgres_exporter ya configurado. Para configurar el objetivo, puede utilizar cualquiera de las guías siguientes:

  • Cómo monitorear el servidor PostgreSQL con Prometheus y Grafana
  • Instale Prometheus con Node Exporter en Rocky Linux 9/AlmaLinux 9

Desde el panel de Prometheus, se dará cuenta de que, cuando un objetivo está activo, el estado es 1 y cuando está hecho, el estado es 0. Para confirmar esto, ejecute el siguiente comando.

Entonces, para esta guía, hemos configurado Prometheus para enviar alertas si un objetivo está inactivo (con estado 0) durante 1 minuto.

Para que se apliquen las reglas, reinicie Prometheus:

sudo systemctl restart prometheus

Desde la interfaz de usuario web de Prometheus, en Estado->Reglas, deberías ver las reglas agregadas.

#4. Configurar el receptor de Gmail para AlertManager

Para poder recibir notificaciones en la dirección de Gmail proporcionada. Debe generar la contraseña de la aplicación para AlertManager.

Para hacer esto, acceda a su cuenta de Gmail y navegue hasta Seguridad > Contraseñas de aplicaciones como se muestra.

Una vez que haya hecho clic en Contraseñas de aplicaciones, seleccione las aplicaciones como Correo en el menú desplegable.

Para el dispositivo, seleccione Otro (nombre personalizado) y proporcione el nombre como alertmanager o cualquier otro nombre que prefiera.

Ahora genere la contraseña para la aplicación.

Una vez generado. Debe copiar esta contraseña, ya que se le solicitará en el siguiente paso.

Edite la configuración de AlertManager y proporcione la contraseña de la aplicación para su cuenta.

sudo vim /etc/alertmanager/alertmanager.yml

Agregue la contraseña reemplazando auth_password: ‘google-app-password‘ como se muestra

Una vez realizados los cambios, reinicie AlertManager

sudo systemctl restart alertmanager.service

#5. Pruebe la notificación de alerta por correo electrónico con Alertmanager

Para probar si Alertmanager está funcionando como se desea, detendremos cualquiera de los objetivos disponibles en Prometheus. Por ejemplo Exportador de Postgres.

sudo systemctl stop postgres_exporter

Desde el panel de Prometheus en Estado->Objetivos, verá esto.

Ahora navega hasta Alertas. Verá el estado de la alerta como Activa y Pendiente.

Esto muestra que la alerta está a punto de enviarse pero aún está esperando que transcurra el tiempo establecido. Después del tiempo establecido, el estado cambiará a DISPARANDO

Con este estado, se envía una alerta a AlertManager, que es responsable de enrutarla a su destinatario de correo electrónico.

Puede consultar el correo electrónico para ver la notificación recibida.

Para seguir los registros y solucionar problemas del servicio, use el comando:

$ sudo journalctl --follow --no-pager --boot --unit alertmanager.service
Sep 07 12:42:09 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:09.170Z caller=main.go:232 level=info build_context="(go=go1.17.8, user=root@265f14f5c6fc, date=20220325-09:31:33)"
Sep 07 12:42:09 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:09.171Z caller=cluster.go:185 level=info component=cluster msg="setting advertise address explicitly" addr=192.168.205.12 port=9094
Sep 07 12:42:09 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:09.181Z caller=cluster.go:680 level=info component=cluster msg="Waiting for gossip to settle..." interval=2s
Sep 07 12:42:09 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:09.202Z caller=coordinator.go:113 level=info component=configuration msg="Loading configuration file" file=/etc/alertmanager/alertmanager.yml
Sep 07 12:42:09 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:09.202Z caller=coordinator.go:126 level=info component=configuration msg="Completed loading of configuration file" file=/etc/alertmanager/alertmanager.yml
Sep 07 12:42:09 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:09.204Z caller=main.go:431 level=info component=configuration msg="skipping creation of receiver not referenced by any route" receiver=web.hook
Sep 07 12:42:09 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:09.204Z caller=main.go:535 level=info msg=Listening address=:9093
Sep 07 12:42:09 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:09.204Z caller=tls_config.go:195 level=info msg="TLS is disabled." http2=false
Sep 07 12:42:11 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:11.181Z caller=cluster.go:705 level=info component=cluster msg="gossip not settled" polls=0 before=0 now=1 elapsed=2.000046363s
Sep 07 12:42:19 localhost.localdomain alertmanager[93736]: ts=2022-09-07T10:42:19.183Z caller=cluster.go:697 level=info component=cluster msg="gossip settled; proceeding" elapsed=10.001985143s
.....

Veredicto

Hemos explicado triunfalmente cómo configurar la notificación de alerta por correo electrónico de Prometheus utilizando Alertmanager. Dependiendo de las alertas configuradas, podrá recibir notificaciones a tiempo directamente en su cuenta de Gmail. Espero que esto haya sido significativo para ti.

Artículos Relacionados:

  • Instale Grafana en Kubernetes para la supervisión de clústeres
  • Principales herramientas de monitoreo basadas en terminales para Linux
  • Ver y analizar el tráfico de la API de Kubernetes usando Kubeshark

Artículos relacionados: