4.9 KiB
Runbook — Supervision et alertes
Ce qui tourne
| Service | Adresse (interne, 10.10.0.1) |
Déployé par |
|---|---|---|
| Prometheus | :9091 |
Kolla (enable_prometheus: "yes") |
| Alertmanager | :9093 |
Kolla |
| Grafana | :3000 |
Kolla |
| node_exporter | :9100 |
Kolla (+ collecteur textfile, rôle supervision) |
| openstack-exporter | :9198 |
Kolla |
| cAdvisor, libvirt/mysqld/memcached exporters | ports divers | Kolla |
| Relais Alertmanager → ntfy | 127.0.0.1:9099 |
rôle Ansible supervision |
| Uptime Kuma | 127.0.0.1:3001 |
rôle Ansible supervision (conteneur Docker) |
Rien de tout cela n'est exposé sur eno1 (vérifié : seuls 22/80/443 répondent
depuis Internet). Tant qu'il n'y a pas de domaine, l'accès se fait par
tunnel SSH.
Accéder aux interfaces (tunnel SSH depuis le Mac)
ssh -L 3000:10.10.0.1:3000 -L 9091:10.10.0.1:9091 -L 9093:10.10.0.1:9093 -L 3001:127.0.0.1:3001 paillasse
Puis dans le navigateur : http://localhost:3000 (Grafana), :9091
(Prometheus), :9093 (Alertmanager), :3001 (Uptime Kuma — premier accès :
créer le compte admin toi-même, c'est une étape interactive).
Identifiants Grafana/Prometheus/Alertmanager : utilisateur admin, mot de
passe dans /etc/kolla/passwords.yml sur le serveur (grafana_admin_password,
prometheus_password, prometheus_alertmanager_password) — jamais affichés
ici, à lire toi-même :
sudo grep '^grafana_admin_password:' /etc/kolla/passwords.yml
Alertes en place
Fichier kolla/config/prometheus/alertes.rules (poussé par le rôle
supervision, chargé par Prometheus) :
| Alerte | Condition | Sévérité |
|---|---|---|
DisqueSature |
occupation de / > 80 % pendant 5 min |
avertissement |
MemoireSaturee |
RAM utilisée > 90 % pendant 5 min | avertissement |
ServiceOpenStackArrete |
un agent Nova ou Neutron à l'état différent de up pendant 2 min |
critique |
SauvegardeAncienne |
dernière sauvegarde Dedibackup réussie il y a plus de 26 h | critique |
SauvegardeAncienne dépend d'une métrique maison
(syllabus_derniere_sauvegarde_reussie_timestamp), écrite par
sauvegarde-dedibackup.sh dans /var/lib/node_exporter/textfile/sauvegarde.prom
à chaque sauvegarde réussie (collecteur "textfile" de node_exporter).
Limite connue, assumée pour l'instant : pas d'alerte « serveur injoignable ». Toute la chaîne (Prometheus, Alertmanager, le relais, ntfy) tourne sur le même serveur que ce qu'elle surveille : si le serveur tombe complètement, rien ne peut prévenir personne. C'est exactement pour ça que CLAUDE.md prévoyait à l'origine une sonde hors du serveur (un petit Hetzner CX23). Dans ce déploiement (un seul serveur Scaleway), ce n'est pas fait — à décider avec Adam s'il veut un jour un point de supervision externe.
Le relais Alertmanager → ntfy
Alertmanager ne sait pas parler nativement le format ntfy. Un petit service
Python (/usr/local/sbin/alertmanager-ntfy.py, service systemd
alertmanager-ntfy, écoute uniquement sur 127.0.0.1:9099) reçoit le webhook
JSON standard d'Alertmanager et le retraduit en notification ntfy.
- L'URL ntfy (avec le topic) est lue à chaque notification depuis
/root/.alertes-webhook(600 root:root) — jamais mise en cache, jamais journalisée, jamais dans Git. - Configuration Alertmanager :
kolla/config/prometheus/prometheus-alertmanager.yml(receveur uniquentfy, webhook vers le relais local).
Déclencher une alerte de test
Sans toucher à rien de réel sur le serveur, via l'API d'Alertmanager :
ssh paillasse
sudo bash -c '
PASS=$(awk -F": " "/^prometheus_alertmanager_password:/{print \$2}" /etc/kolla/passwords.yml)
MAINTENANT=$(date -u +%Y-%m-%dT%H:%M:%S.000Z)
FIN=$(date -u -d "+5 minutes" +%Y-%m-%dT%H:%M:%S.000Z)
curl -s --user "admin:$PASS" -XPOST http://10.10.0.1:9093/api/v2/alerts -H "Content-Type: application/json" -d "[{
\"labels\": {\"alertname\": \"TestManuel\"},
\"annotations\": {\"description\": \"Test manuel.\"},
\"startsAt\": \"$MAINTENANT\", \"endsAt\": \"$FIN\"
}]"
unset PASS
'
Vérifié le 2026-10-07 : alerte de test reçue par Adam sur ntfy, par ce
mécanisme et en testant aussi le relais directement
(curl -XPOST http://127.0.0.1:9099/alertmanager ...).
Après tout changement à kolla/config/prometheus/* ou kolla/globals.yml
cd ansible && script -q /dev/null ansible-playbook kolla.yml -i inventory.ini
cd ansible && script -q /dev/null ansible-playbook supervision.yml -i inventory.ini
ssh paillasse "sudo -i bash -c 'export PATH=/opt/kolla-venv/bin:\$PATH; kolla-ansible reconfigure -i /etc/kolla/all-in-one --tags prometheus'"
Piège vécu le 2026-10-07 : modifier kolla/globals.yml ou un fichier de
kolla/config/ dans le dépôt ne suffit pas : il faut d'abord rejouer
kolla.yml/supervision.yml pour le copier sur le serveur, puis
kolla-ansible reconfigure. Oublier la première étape fait tourner
reconfigure sur l'ancienne config, sans erreur visible.