Checkmk-Überwachung von Läufen und Hängern #19

Closed
thorsten.spille wants to merge 0 commits from thorsten.spille/feature-15-checkmk-monitoring into main AGit

Setzt #15 um: verlässlich erkennen, dass eine Replikation nicht ins Stocken gerät – auch bei Hängern, weil ZFS darunter blockiert.

bashclub-zsync berichtet (rein additiv)

  • /run/bashclub-zsync/<config>.state: pid, Prozessstart (gegen PID-Wiederverwendung), Phase (start, prepare, replicate, snapshot, send, delete, checkzfs), Dataset, seit wann
  • /var/lib/bashclub-zsync/<config>.last per trap EXIT: Ende, Exit-Code, Dauer, Datasets gesamt/fehlerhaft, letzter Erfolg
  • .history (letzte Startzeiten), .skipped (von der Sperre abgewiesene Läufe)
  • neue Einstellung monitor_max_age (leer = gelernt, 0 = aus)

Replikations- und Löschalgorithmus unverändert; in allen 14 Szenarien sind verändernde Aufrufe und Logs identisch zu main.

Local Check bashclub_zsync – ein Service zsync <config>

Liest nur die Status-Dateien und /proc, ruft nie zfs auf.

Zustand Erkennung
letzter Erfolg zu alt Intervall = Median der Startabstände; WARN nach Intervall + max(20 %, 5 min) + Dauer, CRIT nach 3 Intervallen; Lernphase bis 5 Abstände: OK bzw. höchstens WARN
letzter Lauf fehlgeschlagen WARN mit Exit-Code und fehlerhaften Datasets
Phase ohne Transfer zu lang WARN 15 min, CRIT 1 h
Transfer ohne Fortschritt rchar von zfs receive unverändert: WARN 10 min, CRIT 30 min
Prozess im Zustand D WARN 5 min, CRIT 15 min, mit Kernel-Funktion (wchan)
abgebrochener Lauf Status-Datei ohne Ergebnis, Prozess weg oder fremd: WARN bis zum nächsten Lauf
übersprungene Läufe ab 3 während eines Laufs: WARN

Ein aktiver Lauf, der länger dauert als der letzte, verschiebt die Altersgrenze (der Lauf selbst wird über Phase/Fortschritt/D-Zustand überwacht). Schwellen änderbar in /etc/bashclub/zsync-checkmk.conf. Metriken: last_success_age, last_duration, datasets_failed.

Paket

  • Check unter /usr/share/bashclub-zsync/checkmk/, postinst verlinkt nach /usr/lib/check_mk_agent/local/, wenn der Agent da ist
  • dpkg-Trigger interest-noawait /usr/lib/check_mk_agent: wird der Agent später installiert, wird der Check automatisch verlinkt
  • Opt-out: /etc/bashclub/zsync-checkmk.disabled (+ dpkg-reconfigure bashclub-zsync)
  • remove entfernt den Link, purge zusätzlich den Status
  • CI-Smoke-Test prüft, dass der Check installiert ist

Tests

  • tests/checkmk.sh: 30 Fälle mit Status-Dateien und nachgebautem /proc (Lernphase, Median gegen Handläufe, 5-min-Puffer, Override, Phasen, Fortschritt über mehrere Prüfungen, D-Zustand mit wchan, Abbruch, PID-Wiederverwendung, übersprungene Läufe, gelöschte Config, Metriken)
  • echte Prozesse im Container: Phase send während des Transfers, Ergebnis nach dem Lauf, kill -9 → abgebrochen, nächster Lauf hebt es auf
  • Paket (nfpm, Debian 13): ohne Agent kein Link; Agent später installiert → Trigger verlinkt; Opt-out/Update; remove; purge
  • run.sh hält die Status-Dateien je Szenario fest (.status)

Closes #15

🤖 Generated with Claude Code

Setzt #15 um: verlässlich erkennen, dass eine Replikation nicht ins Stocken gerät – auch bei Hängern, weil ZFS darunter blockiert. ## bashclub-zsync berichtet (rein additiv) - `/run/bashclub-zsync/<config>.state`: pid, Prozessstart (gegen PID-Wiederverwendung), Phase (start, prepare, replicate, snapshot, send, delete, checkzfs), Dataset, seit wann - `/var/lib/bashclub-zsync/<config>.last` per `trap EXIT`: Ende, Exit-Code, Dauer, Datasets gesamt/fehlerhaft, letzter Erfolg - `.history` (letzte Startzeiten), `.skipped` (von der Sperre abgewiesene Läufe) - neue Einstellung `monitor_max_age` (leer = gelernt, `0` = aus) Replikations- und Löschalgorithmus unverändert; in allen 14 Szenarien sind verändernde Aufrufe und Logs identisch zu `main`. ## Local Check `bashclub_zsync` – ein Service `zsync <config>` Liest nur die Status-Dateien und `/proc`, ruft nie `zfs` auf. | Zustand | Erkennung | |---|---| | letzter Erfolg zu alt | Intervall = Median der Startabstände; WARN nach Intervall + max(20 %, 5 min) + Dauer, CRIT nach 3 Intervallen; Lernphase bis 5 Abstände: OK bzw. höchstens WARN | | letzter Lauf fehlgeschlagen | WARN mit Exit-Code und fehlerhaften Datasets | | Phase ohne Transfer zu lang | WARN 15 min, CRIT 1 h | | Transfer ohne Fortschritt | `rchar` von `zfs receive` unverändert: WARN 10 min, CRIT 30 min | | Prozess im Zustand D | WARN 5 min, CRIT 15 min, mit Kernel-Funktion (`wchan`) | | abgebrochener Lauf | Status-Datei ohne Ergebnis, Prozess weg oder fremd: WARN bis zum nächsten Lauf | | übersprungene Läufe | ab 3 während eines Laufs: WARN | Ein aktiver Lauf, der länger dauert als der letzte, verschiebt die Altersgrenze (der Lauf selbst wird über Phase/Fortschritt/D-Zustand überwacht). Schwellen änderbar in `/etc/bashclub/zsync-checkmk.conf`. Metriken: `last_success_age`, `last_duration`, `datasets_failed`. ## Paket - Check unter `/usr/share/bashclub-zsync/checkmk/`, postinst verlinkt nach `/usr/lib/check_mk_agent/local/`, wenn der Agent da ist - dpkg-Trigger `interest-noawait /usr/lib/check_mk_agent`: wird der Agent später installiert, wird der Check automatisch verlinkt - Opt-out: `/etc/bashclub/zsync-checkmk.disabled` (+ `dpkg-reconfigure bashclub-zsync`) - remove entfernt den Link, purge zusätzlich den Status - CI-Smoke-Test prüft, dass der Check installiert ist ## Tests - `tests/checkmk.sh`: 30 Fälle mit Status-Dateien und nachgebautem `/proc` (Lernphase, Median gegen Handläufe, 5-min-Puffer, Override, Phasen, Fortschritt über mehrere Prüfungen, D-Zustand mit wchan, Abbruch, PID-Wiederverwendung, übersprungene Läufe, gelöschte Config, Metriken) - echte Prozesse im Container: Phase `send` während des Transfers, Ergebnis nach dem Lauf, `kill -9` → abgebrochen, nächster Lauf hebt es auf - Paket (nfpm, Debian 13): ohne Agent kein Link; Agent später installiert → Trigger verlinkt; Opt-out/Update; remove; purge - `run.sh` hält die Status-Dateien je Szenario fest (`.status`) Closes #15 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Add a Checkmk local check for runs, hangs and the age of the last success
All checks were successful
/ build (pull_request) Successful in 25s
/ test (debian-13) (pull_request) Successful in 41s
/ test (ubuntu-24.04) (pull_request) Successful in 48s
/ test (ubuntu-26.04) (pull_request) Successful in 48s
/ test (debian-12) (pull_request) Successful in 50s
/ publish (pull_request) Has been skipped
/ package (pull_request) Successful in 0s
614e95f865
bashclub-zsync writes its run status (additive, replication and deletion
unchanged):
- /run/bashclub-zsync/<config>.state: pid, process start, phase, dataset
- /var/lib/bashclub-zsync/<config>.last: result of the last run and of the
  last successful run, datasets failed (trap EXIT)
- .history (last start times) and .skipped (runs skipped by the lock)

The local check bashclub_zsync (one service per configuration) reads only
these files and /proc, never zfs:
- age of the last successful run against the interval learned from the start
  times (median, learning phase up to 5 intervals with at most WARN), or
  monitor_max_age from the config (0 = off)
- failed and aborted runs, phases that take too long, transfers without
  progress (bytes read by zfs receive), processes blocked in state D with the
  kernel function, skipped runs
- an active run that takes longer than the last one extends the age tolerance

Packaging: the check is shipped in /usr/share/bashclub-zsync/checkmk and
linked into /usr/lib/check_mk_agent/local if the agent is installed, also
later via dpkg trigger; opt-out with /etc/bashclub/zsync-checkmk.disabled;
removed on remove, status removed on purge. CI smoke test checks the file.

Tests: tests/checkmk.sh (30 cases with status files and a fake /proc);
run.sh records the status files per scenario.

Refs #15

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
Owner

Manuell nach main gemergt (843a67a), CI inkl. publish nach testing grün. Schließe den PR.

Manuell nach `main` gemergt (843a67a), CI inkl. publish nach testing grün. Schließe den PR.
thorsten.spille closed this pull request 2026-10-15 18:56:19 +02:00
All checks were successful
/ build (pull_request) Successful in 25s
/ test (debian-13) (pull_request) Successful in 41s
/ test (ubuntu-24.04) (pull_request) Successful in 48s
/ test (ubuntu-26.04) (pull_request) Successful in 48s
/ test (debian-12) (pull_request) Successful in 50s
/ publish (pull_request) Has been skipped
/ package (pull_request) Successful in 0s

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
bug
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
bashclub/zsync!19
No description provided.