coopdevs.monitoring_role
Rol de Monitoreo 
Un rol de Ansible para mantener herramientas de monitoreo del ecosistema de Grafana.
Utiliza Docker para instalar los exportadores de Prometheus y Loki:
nodeexporter
: exportador de Prometheus que recopila datos generales sobre el estado de un host.postgresexporter
: exportador de Prometheus que monitorea el estado del servidor PostgreSQL.promtail
: el exportador principal para Loki, un servidor de registros similar a Prometheus y compatible con Grafana.
Este rol soporta algunas aplicaciones con su formato de registro por defecto:
Además, soporta un exportador personalizado que expone los usuarios activos en el sistema.
Uso de este rol
Variables públicas
NodeExporter
# defaults/main.yaml
monitoring_nexporter_enabled: true
monitoring_nexporter_host: 127.0.0.1
monitoring_nexporter_port: 9100
monitoring_nexporter_docker_bind: "127.0.0.1:127.0.0.1:9100"
monitoring_nexporter_container_name: nexporter
monitoring_nexporter_image_version: latest
PostgresqlExporter
monitoring_postgres_exporter_enabled: true
monitoring_postgres_exporter_pg_user: "monitor_user"
Promtail
# defaults/main.yaml
monitoring_promtail_enabled: true
monitoring_promtail_host: 127.0.0.1
monitoring_promtail_port: 9080
monitoring_promtail_docker_bind: "127.0.0.1:127.0.0.1:9080"
monitoring_promtail_container_name: promtail
monitoring_promtail_image_version: latest
monitoring_promtail_modules_enabled:
- "app2"
monitoring_promtail_modules_available:
app1:
log_path: "/var/log/app1/error.log"
template: "app1.j2"
app2:
log_path: "/opt/app2/log/app2.log"
template: "app2.j2"
monitoring_promtail_config_dir: "/etc/promtail"
monitoring_promtail_config_filename: "config.yml"
Usuarios activos
monitoring_users_enabled: true
monitoring_users_host: 127.0.0.1
monitoring_users_port: 9839
monitoring_users_endpoint: "/metrics"
monitoring_users_prefix: "what"
monitoring_users_with_timestamp: false
monitoring_users_scrape_interval: 5000
Variables secretas
Promtail
monitoring_loki_user: "1234"
monitoring_loki_key: "eyJrIjoiM2VlZmM2NmQ4ZTQ4ZmE3MDRmZDBmMGE0YzNlNTE1MzRjZDdjNDY0N2YiLCJuIjoieW91ciBncmFmYW5hIGNsb3VkIGtleSIsImlkIjoxMjM0NTZ9"
monitoring_loki_hostname: "logs-somewhere.grafana.net"
PostgresqlExporter
monitoring_postgres_exporter_pg_password: "3%hyZ&toNZ#Xn74"
monitoring_postgres_exporter_pg_port: "3456"
Ejemplos de playbooks
Odoo con promtail
# playbooks/odoo-promtail.yml
---
- name: Instalar Odoo con monitoreo de registros
hosts: servers
become: yes
roles:
- role: coopdevs.odoo_role
- role: coopdevs.monitoring_role
vars:
monitoring_nexporter_enabled: false
monitoring_promtail_enabled: true
monitoring_promtail_modules_enabled: [ "odoo" ]
monitoring_loki_user: "1234"
monitoring_loki_key: "eyJrIjoiM2VlZmM2NmQ4ZTQ4ZmE3MDRmZDBmMGE0YzNlNTE1MzRjZDdjNDY0N2YiLCJuIjoieW91ciBncmFmYW5hIGNsb3VkIGtleSIsImlkIjoxMjM0NTZ9"
monitoring_loki_hostname: "logs-somewhere.grafana.net"
PostgreSQL con métricas del sistema
# playbooks/postgres-nexporter.yml
---
- name: Instalar un servidor de base de datos con métricas del sistema expuestas
hosts: servers
become: yes
roles:
- role: geerlingguy.postgresql
- role: coopdevs.monitoring_role
vars:
monitoring_nexporter_enabled: true
monitoring_promtail_enabled: false
Seguridad
Este rol expone a través de un servidor HTTP muchos datos que pueden ser explotados. Por defecto, escucha en una dirección de loopback, no pública desde Internet.
Sin embargo, es probable que desees que un servidor Prometheus externo obtenga estos datos periódicamente. Para esto, y para proteger la información, se necesita algún tipo de autenticación desde el servidor Prometheus hacia el host.
Una opción es dejar que los exportadores se vinculen a localhost y luego configurar un proxy inverso delante de ellos con Autenticación Básica, utilizando Nginx. La gestión de esta configuración y de las claves implicadas está fuera del alcance de este rol.
Extensión
Un exportador de prometheus
Para agregar un nuevo exportador de Prometheus:
- Copia la sección de
defaults/main.yml
de Node Exporter a ese mismo archivo y cambia todos los términosnexporter
por los tuyos, por ejemplo,someexporter
. - Copia la sección de
templates/monitoring-docker-compose.yml.j2
de Node Exporter y nuevamente, renombra y adapta según tus necesidades. - Adapta
meta/main.yml
: agrega una etiqueta, cambia la descripción si es necesario. - Actualiza
README.md
.
Un módulo de promtail para una nueva app
Para agregar compatibilidad para una aplicación que aún no esté soportada, haz lo siguiente:
- Declárala en
monitoring_promtail_modules_available
. La ruta del registro depende de la aplicación, el nombre de la plantilla que elijas aquí. - Copia el
templates/promtail-config-apps/odoo-role.j2
a la misma carpeta pero cambiando el nombre anew-app.j2
. - Edita la plantilla de acuerdo a tu aplicación. Consulta la documentación oficial.
- Puedes probar la regex en regexr en "modo servidor" o regex101.com. Incluye un comentario con un par de entradas de registro para mayor claridad, ayudará a futuros lectores de regex.
- Establece la etapa
labels
para definir qué etiquetas se exportan a Loki, entre todas las recolectadas. - Establece la etapa
timestamp
para marcar la línea de registro con la real en lugar del tiempo en que promtail la recolectó.- Incluye milisegundos solo si es posible. Golang solo entiende el punto '.' como separador decimal. Si tu aplicación utiliza ',', no lo entiende. Consulta el problema de golang #6189.
- Incluye la zona horaria ya sea a través del análisis como en
backups-role.j2
o manualmente como enodoo-role.j2
.
- Opcionalmente incluye una etapa
match
si deseas eliminar entradas que no coincidan con tu regex.
Install Prometheus and Loki exporters to monitor your project instances
ansible-galaxy install coopdevs.monitoring_role