coopdevs.monitoring_role
Rôle de surveillance 
Un rôle Ansible pour maintenir les outils de surveillance de l'écosystème Grafana.
Utilise Docker pour installer les exportateurs Prometheus et Loki :
nodeexporter
: exportateur Prometheus qui collecte des données générales sur l'état d'un hôte.postgresexporter
: exportateur Prometheus qui surveille l'état du serveur PostgreSQL.promtail
: l'exportateur principal pour Loki, un serveur de logs similaire à Prometheus et compatible avec Grafana.
Ce rôle prend en charge certaines applications avec leur format de logging par défaut :
De plus, il supporte un exportateur personnalisé qui expose les utilisateurs actifs dans le système.
Utilisation de ce rôle
Variables publiques
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"
Utilisateurs actifs
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 secrètes
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"
Exemples de playbooks
Odoo avec promtail
# playbooks/odoo-promtail.yml
---
- name: Installer Odoo avec surveillance des logs
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 avec métriques système
# playbooks/postgres-nexporter.yml
---
- name: Installer un serveur de base de données avec des métriques système exposées
hosts: servers
become: yes
roles:
- role: geerlingguy.postgresql
- role: coopdevs.monitoring_role
vars:
monitoring_nexporter_enabled: true
monitoring_promtail_enabled: false
Sécurité
Ce rôle expose, via un serveur HTTP, de nombreuses données qui pourraient être exploitées. Par défaut, il écoute sur une adresse de boucle locale, donc non publique depuis Internet.
Cependant, vous voudrez probablement qu'un serveur Prometheus externe récupère ces données régulièrement. Dans ce but, et pour protéger les données, un certain type d'authentification du serveur Prometheus envers l'hôte est nécessaire.
Une approche consiste à laisser les exportateurs liés à localhost, puis à configurer un proxy inverse devant eux avec une authentification de base, en utilisant Nginx. La gestion de cette configuration et des clés impliquées sort du cadre de ce rôle.
Extension
Un exportateur prometheus
Pour ajouter un nouvel exportateur prometheus :
- Copiez la section
defaults/main.yml
de Node Exporter dans le même fichier et remplacez tous les termesnexporter
par le vôtre, par exemple,someexporter
. - Copiez la section
templates/monitoring-docker-compose.yml.j2
de Node Exporter et renommez-la et adaptez-la à vos besoins. - Adaptez
meta/main.yml
: ajoutez une étiquette, modifiez la description si nécessaire. - Mettez à jour
README.md
.
Un module promtail pour une nouvelle application
Pour ajouter la compatibilité pour une application qui n'est pas encore supportée, faites :
- Déclarez-la dans
monitoring_promtail_modules_available
. Le chemin des logs dépend de l'application, le nom du modèle que vous décidez ici. - Copiez le
templates/promtail-config-apps/odoo-role.j2
dans le même répertoire mais avec le nom de fichiernew-app.j2
. - Modifiez le modèle en conséquence pour votre application. Consultez la documentation officielle.
- Vous pouvez tester les regex sur regexr en "mode serveur" ou regex101.com. Incluez un commentaire avec quelques entrées de logs pour plus de clarté, cela aidera les futurs lecteurs des regex.
- Définissez l'étape
labels
pour indiquer les étiquettes exportées vers Loki, parmi toutes celles collectées. - Définissez l'étape
timestamp
pour horodater la ligne de log avec l'heure réelle au lieu du moment où promtail l'a récupéré.- Incluez les millisecondes uniquement si possible. Golang ne comprend que le point '.' comme séparateur décimal. Si votre application utilise ',', ce n'est pas le cas. Consultez le problème golang #6189.
- Incluez le fuseau horaire soit par le parsing comme dans
backups-role.j2
, soit manuellement comme dansodoo-role.j2
.
- Optionnellement, incluez une étape
match
si vous voulez supprimer les entrées qui ne correspondent pas à votre regex.
Install Prometheus and Loki exporters to monitor your project instances
ansible-galaxy install coopdevs.monitoring_role