opstree_devops.alertmanager

Rol de Ansible: osm_alertmanager

Alertmanager es una herramienta que maneja las alertas enviadas por Prometheus. Recibe las alertas del servidor de Prometheus y agrupa las alertas en base a etiquetas. Luego, reenvía las alertas a diferentes receptores como Email, PagerDuty y Slack.

Alertmanager se configura usando banderas de línea de comandos y un archivo de configuración. Mientras que la línea de comandos configura parámetros del sistema, el archivo de configuración contiene información como receptores y rutas.

Historial de Versiones

Fecha Versión Descripción Cambiado Por
Mayo 2020 v0.0.1 Borrador Inicial Abhishek Dubey
Julio 2020 v0.1.0 Integración de Slack y Google Chat Mahesh Kumar
Junio 2022 v0.1.1 Soporte para clúster, reglas personalizadas de alertmanager, plantillas, integración de AWS SNS y PagerDuty Ishaan Ambashta

Sistemas Operativos Soportados

  • CentOS:7
  • CentOS:6
  • Ubuntu:bionic
  • Ubuntu:focal

Dependencias

  • prometheus-server
  • libselinux-python

Requisitos

No hay requisitos específicos para ejecutar este rol. Este rol es independiente de la plataforma para CentOS 6 o superior y Ubuntu 18 o superior. La única dependencia para CentOS 6 es libselinux-python y también la hemos incluido. Los requisitos básicos son:

  • Servidor CentOS/Ubuntu
  • Python debe estar instalado en el servidor de destino
  • El puerto 9093 debe estar abierto en tu servidor

Variables del Rol

---
# archivo por defecto para alertmanager
alert_version: "0.20.0"
base_url: "https://github.com/prometheus/alertmanager/releases/download"
alertmanager_dir: "alertmanager-{{ version }}.linux-amd64"
download_url: "{{ base_url }}/v{{ version }}/{{ alertmanager_dir }}.tar.gz"
alertmanager_user: "alertmanager"
alertmanager_group: "alertmanager"
prometheus_user: "prometheus"
prometheus_group: "prometheus"
binary_path: "/usr/local/bin"

# Notificación por Email
email_integration: "no"
sender_email: "[email protected]"
alertmanager_email: "[email protected]"
smtp_server: "smtp.gmail.com:587"

# Integración con Slack
slack_integration: "yes"
slack_webhook: "https://hooks.slack.com/services/T00000000/B00/XXXXXX"
slack_channel_name: "alerting-channel"

# Integración con Google Chat
google_chat_integration: "no"
calert_home: "/opt/calert"
calert_base_url: "https://github.com/mr-karan/calert/releases/download"
calert_url: "{{ calert_base_url }}/v1.2.1/calert_1.2.1_linux_amd64.tar.gz"
google_chat_room: "nombre-del-sala-google"
room_webhook: "webhook-de-sala-google-chat"

# Integración con PagerDuty
PagerDuty_integration: "no"
PagerDuty_channel_name: "call-alerting-channel"
pagerduty_url: "https://events.pagerduty.com/v2/enqueue"

# Integración con SNS
sns_integration: "no"
sns_channel_name: "sns"
region: "us-east-1"

Puedes definir cualquier versión de Prometheus así como la versión de alertmanager que deseas instalar en tu servidor.

Variables Obligatorias

Variable Valor por Defecto Valores Posibles Descripción
alert_version "0.20.0" Cualquier Versión Alertmanager se descargará desde las versiones de github, así que debes definir la versión
alertmanager_user alertmanager Cualquier Usuario Usuario del Servicio Alertmanager
alertmanager_group alertmanager Cualquier Grupo Grupo del Servicio Alertmanager
prometheus_user prometheus Cualquier Usuario Usuario del Servicio Prometheus, Propietario de las Reglas Específicas del Nodo
prometheus_group prometheus Cualquier Grupo Grupo del Servicio Prometheus, otorga permiso a los archivos de Reglas Específicas del Nodo

Variables Opcionales

Variable Valor por Defecto Valores Posibles Descripción
base_url https://github.com/prometheus/alertmanager/releases/download URL base del enlace de descarga de Alertmanager URL base del enlace de descarga de Alertmanager
alertmanager_dir alertmanager-{{ version }}.linux-amd64 Nombre del Directorio de Alertmanager Directorio de Alertmanager después de la extracción
download_url {{ base_url }}/v{{ version }}/{{ alertmanager_dir }}.tar.gz Enlace de Descarga de Alertmanager URL de Github para descargar el binario de Alertmanager
binary_path /usr/local/bin Cualquier Ruta Ruta del Binario de Alertmanager
email_integration "no" "yes"/"no" Habilitar/Deshabilitar la integración por email con Alertmanager
sender_email "send.test@example.com" Cualquier Dirección de Email Dirección de email usada para enviar alertas
alertmanager_email "alertmanager.test@example.com" Cualquier Dirección de Email Dirección de Email de Alertmanager
smtp_server "smtp.gmail.com:587" dirección del servidor smtp con puerto Servidor smtp de email usado por Alertmanager
slack_integration "no" "yes"/"no" Habilitar/Deshabilitar la integración de Slack con Alertmanager
slack_webhook "https://hooks.slack.com/services/T00000000/B00/XXXXXX" Webhook de Cualquier Canal Webhook del canal de Slack utilizado para integrar con Alertmanager
slack_channel_name "alerting-channel" Cualquier Nombre de Canal de Slack Nombre del canal de Slack utilizado para enviar alertas
google_chat_integration "yes" "yes"/"no" Habilitar/Deshabilitar la integración de Google Chat con Alertmanager
calert_home "/opt/calert" Ruta de casa del servicio Calert Casa del servicio Calert donde estarán los binarios y archivos de configuración
calert_base_url "https://github.com/mr-karan/calert/releases/download" Enlace de descarga del servicio Calert URL del binario de Calert
calert_url "{{ calert_base_url }}/v1.2.1/calert_1.2.1_linux_amd64.tar.gz" Enlace de descarga del servicio Calert URL de Github para descargar el binario de Calert
google_chat_room "nombre-del-sala-google" Cualquier Sala de Google Chat Sala de Google Chat utilizada para enviar alertas
room_webhook "webhook-de-sala-google-chat" Webhook de Cualquier Sala de Google Chat Webhook de la sala de Google Chat utilizado para integrar con el servicio Calert
rules_file "node_exporter.rules" Archivo por defecto para reglas Archivo de reglas para establecer alertas
templates "email.tmpl" Archivo por defecto de plantilla Archivo de plantilla para formato de alertas
PagerDuty_integration "no" "yes"/"no" Habilitar/Deshabilitar la integración de PagerDuty con Alertmanager
PagerDuty_channel_name "call-alerting-channel" Cualquier Nombre de Canal de PagerDuty Nombre del Canal de PagerDuty utilizado para enviar alertas
pagerduty_url "https://events.pagerduty.com/v2/enqueue" URL especificada de PagerDuty URL de PagerDuty
sns_integration "no" "yes"/"no" Habilitar/Deshabilitar la integración de SNS con Alertmanager
sns_channel_name "sns" Cualquier Nombre de Canal de AWS SNS Nombre del canal SNS utilizado para enviar alertas a AWS SNS
region "us-east-1" cualquier región para sns región a la que enviar alertas

Ejemplo de Playbook

Aquí hay un ejemplo para el playbook principal

---
- hosts: alertmanager
  roles:
    - role: alertmanager

Aquí estamos usando root como usuario, pero puedes usar un usuario diferente. Para eso, solo debes establecer el valor de "become" en true. Algo así:

---
- hosts: alertmanager
  roles:
    - role: alertmanager
      become: yes

Ejemplo de Inventario

Para el inventario, puedes crear un archivo de hosts en el que definas la IP de tu servidor. Por ejemplo:

[alertmanager]
10.1.1.100  ansible_user=ubuntu ansible_ssh_private_key_file=server1.pem

[prometheus]
10.1.1.100  ansible_user=ubuntu ansible_ssh_private_key_file=server1.pem

Nota: Asegúrate de agregar las IP del servidor Prometheus también. La configuración de Alert Manager se agregará automáticamente al archivo prometheus.yml.

Puedes usar este rol simplemente con este comando

ansible-playbook -i hosts site.yml

Puedes agregar múltiples archivos de reglas y plantillas a la vez pasando variables extra o un archivo json de variables extras, por ejemplo:

Pasando Variables Extras

ansible-playbook -i hosts site.yml --extra-vars='{"rules_file": ["rule_file1","rule_file2"], "templates": ["file1.tmpl", "file2.tmpl"]}'

Pasando un Archivo de Variables Extras

ansible-playbook -i hosts site.yml  --extra-vars "@extra_vars.json"

Nota:

  1. Debes mover tus plantillas personalizadas o archivos de reglas a la carpeta osm_alertmanager/files primero.

  2. El archivo de variables extra debe estar en formato json, por ejemplo:

Archivo de variables extras - extra_vars.json

{
    "rules_file": "rule_file1", 
    "templates": "file2.tmpl"
}

Estructura del Directorio del Rol

Esta es la estructura del directorio del rol:

osm_alertmanager
├── defaults
│   └── main.yml
├── files
│   ├── alertmanager.init
│   ├── email.tmpl
|   ├── sns.tmpl
|   ├── slack_notification.tmpl
│   ├── google_chat_calert.tmpl
│   ├── node_exporter.rules
│   ├── mysql_exporter.rules
│   ├── telegraf_kafka.rules
│   └── telegraf_node.rules
├── handlers
│   └── main.yml
├── README.md
├── site.yml
├── tasks
│   ├── calert.yml
│   ├── debian.yml
│   ├── main.yml
│   ├── prerequisites.yml
│   └── redhat.yml
└── templates
    ├── alertmanager.service.j2
    ├── alertmanager.yml.j2
    ├── calert.service.j2
    └── calert.toml.j2

Después de la instalación exitosa de alertmanager, puedes navegar a través de la URL de alertmanager y ver la interfaz web web

Licencia

BSD

Referencias

Información del Autor

Este rol es escrito y mantenido por [Abhishek Dubey] (https://gitlab.com/abhishek-dubey). Si tienes alguna consulta o sugerencia, no dudes en comunicarte a los siguientes correos.

Abhishek Dubey
Ishaan Ambashta

Acerca del proyecto

Alertmanager is tool that handles alerts sent by Prometheus.

Instalar
ansible-galaxy install opstree_devops.alertmanager
Licencia
Unknown
Descargas
81
Propietario