Un veilleur HORS de Prometheus — le silence de trois jours devient du bruit en ≤ 8 min #39

Merged
arcodange merged 3 commits from arcodange/veilleur-prometheus into main 2026-09-07 10:55:17 +02:00
Showing only changes of commit d03b323394 - Show all commits
+46 -25
View File
@@ -170,6 +170,52 @@ jobs:
- uses: actions/checkout@v4
# ⚠⚠ UNE GATE QUI N'EST CÂBLÉE NULLE PART N'EXISTE PAS (tools#36) — et une
# gate placée APRÈS une étape qui échoue toujours n'existe pas non plus :
# elle sort `Skipped`, ni rouge ni absente, rien ne dépasse. Le banc du
# veilleur passe donc AVANT le téléchargement des dépendances, qui a besoin
# du réseau et du registre Helm interne. Il n'a besoin d'aucun des deux :
# stdlib Python seule, plus `yq`/`jq` déjà présents.
- name: Banc du veilleur (chart prometheus)
if: >-
${{
matrix.chart == 'prometheus'
&& (
contains(fromJSON('["","pull_request"]'), github.event_name)
|| github.ref != 'refs/heads/main'
)
}}
run: |
set -euo pipefail
python3 -m unittest discover -s prometheus/veilleur -v
# Le témoin toujours allumé ne doit JAMAIS partir sur Telegram : sans
# sa route vers le récepteur vide il sonnerait toutes les 3 h, et un
# témoin qui sonne est un témoin qu'on coupe.
yq -o=json eval '.prometheus.alertmanager.config' prometheus/values.yaml > /tmp/am.json
jq -e '[.route.routes[] | select(.matchers[0] == "alertname=\"Veilleur\"") | .receiver] == ["neant"]' /tmp/am.json
jq -e '[.receivers[] | select(.name == "neant") | keys] == [["name"]]' /tmp/am.json
# ⚠ RELEVÉ, PAS UNE GATE — il ne peut pas faire échouer le job. Le premier
# run du job `Application charts prometheus` (le tout premier depuis que
# #32 a énuméré les charts) est mort ICI, `curl` code 6 : le runner ne
# RÉSOUT PAS l'hôte de la dépendance. Sept charts sur dix dépendent du
# registre Helm interne `gitea.arcodange.lab` — donc sept jobs sur dix ne
# peuvent pas passer, quel que soit leur contenu. Ce relevé nomme lequel
# des deux hôtes tombe, pour que la prochaine session n'ait pas à le
# deviner. À retirer quand le trou est bouché.
- name: RELEVÉ — ce que le runner sait résoudre
run: |
set +e
echo "GITHUB_SERVER_URL=${GITHUB_SERVER_URL:-<vide>}"
for hote in gitea.arcodange.lab prometheus-community.github.io; do
echo "--- $hote ---"
getent hosts "$hote" || echo " PAS DE RÉSOLUTION (getent code $?)"
curl -sS -o /dev/null -m 10 -w " http=%{http_code}\n" "https://$hote/" \
|| echo " curl code $?"
done
exit 0
- run: *helm_install_dependencies_sh
- name: Install Helm for test
@@ -193,31 +239,6 @@ jobs:
}}
run: helm template $chart --debug
# ⚠⚠ UNE GATE QUI N'EST CÂBLÉE NULLE PART N'EXISTE PAS (tools#36). Le banc
# du veilleur — celui qui rejoue les trois modes de la panne du 4 au 7
# septembre — tourne donc ICI, dans le job qui construit déjà le chart
# prometheus, à chaque PR qui le touche. Stdlib Python seule : rien à
# installer, rien à télécharger.
- name: Banc du veilleur (chart prometheus)
if: >-
${{
matrix.chart == 'prometheus'
&& (
contains(fromJSON('["","pull_request"]'), github.event_name)
|| github.ref != 'refs/heads/main'
)
}}
run: |
set -euo pipefail
python3 -m unittest discover -s prometheus/veilleur -v
# Le témoin toujours allumé ne doit JAMAIS partir sur Telegram : sans
# sa route vers le récepteur vide il sonnerait toutes les 3 h, et un
# témoin qui sonne est un témoin qu'on coupe.
yq -o=json eval '.prometheus.alertmanager.config' prometheus/values.yaml > /tmp/am.json
jq -e '[.route.routes[] | select(.matchers[0] == "alertname=\"Veilleur\"") | .receiver] == ["neant"]' /tmp/am.json
jq -e '[.receivers[] | select(.name == "neant") | keys] == [["name"]]' /tmp/am.json
- name: publish ${{ matrix.chart }} helm chart
if: ${{ contains(fromJSON('["","push"]'), github.event_name) && github.ref == 'refs/heads/main' }}
run: |