coopdevs.monitoring_role

Rol de Monitoreo Rol de Ansible

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:

  1. Copia la sección de defaults/main.yml de Node Exporter a ese mismo archivo y cambia todos los términos nexporter por los tuyos, por ejemplo, someexporter.
  2. Copia la sección de templates/monitoring-docker-compose.yml.j2 de Node Exporter y nuevamente, renombra y adapta según tus necesidades.
  3. Adapta meta/main.yml: agrega una etiqueta, cambia la descripción si es necesario.
  4. 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:

  1. Declárala en monitoring_promtail_modules_available. La ruta del registro depende de la aplicación, el nombre de la plantilla que elijas aquí.
  2. Copia el templates/promtail-config-apps/odoo-role.j2 a la misma carpeta pero cambiando el nombre a new-app.j2.
  3. 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 en odoo-role.j2.
  • Opcionalmente incluye una etapa match si deseas eliminar entradas que no coincidan con tu regex.
Acerca del proyecto

Install Prometheus and Loki exporters to monitor your project instances

Instalar
ansible-galaxy install coopdevs.monitoring_role
Licencia
Unknown
Descargas
22.4k
Propietario
Coopdevs, Free and Open Source Software for Social and Solidarity Economy.