# 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 unique `ntfy`, 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.