Skip to content

fix(monitoring): route critical alerts off the LAN, and watch the watcher#295

Merged
swares merged 1 commit into
mainfrom
fix/alert-routing
Jul 25, 2026
Merged

fix(monitoring): route critical alerts off the LAN, and watch the watcher#295
swares merged 1 commit into
mainfrom
fix/alert-routing

Conversation

@swares

@swares swares commented Jul 25, 2026

Copy link
Copy Markdown
Owner

Alertmanager had two receivers: null and a webhook to an M5Stack display on
the LAN. Asleep, out, or display off meant every alert was silently
discarded. A wedged apport burned a core on n150-1 for three weeks and
nothing said a word.

  • severity=critical now also routes to ntfy (phone). continue: true keeps
    the M5Stack in the path, so nothing is lost. max_alerts: 5 caps a storm,
    because a phone that buzzes forty times gets muted.
  • The Watchdog alert, which kube-prometheus-stack fires continuously by
    design, went to null - discarding exactly the signal that proves
    monitoring is alive. It now pings a healthchecks.io check every 5m
    against a 15m period, so if Prometheus, Alertmanager or n150-1 dies,
    healthchecks alerts from outside the lab. The only prior heartbeat was
    h4-core.
  • Endpoint URLs come from Vault via ESO and are read with url_file. The
    ntfy topic IS the password; it must not be in git.

Scrape targets (H28): dropped decommissioned 192.168.1.70, which had kept
LabExternalHostDown firing critical for three weeks. Added .116, .217,
.128 (Vault - every ExternalSecret depends on it) and .64.

LabVMUnexpectedShutoff filtered on domain=~ldap-1, decommissioned
2026-07-04, so the rule was structurally unable to fire. Retargeted at
gitlab-1.

Refs: docs/REVIEW-2026-07-24.md H25, H28

…cher

Alertmanager had two receivers: null and a webhook to an M5Stack display on
the LAN. Asleep, out, or display off meant every alert was silently
discarded. A wedged apport burned a core on n150-1 for three weeks and
nothing said a word.

- severity=critical now also routes to ntfy (phone). continue: true keeps
  the M5Stack in the path, so nothing is lost. max_alerts: 5 caps a storm,
  because a phone that buzzes forty times gets muted.
- The Watchdog alert, which kube-prometheus-stack fires continuously by
  design, went to null - discarding exactly the signal that proves
  monitoring is alive. It now pings a healthchecks.io check every 5m
  against a 15m period, so if Prometheus, Alertmanager or n150-1 dies,
  healthchecks alerts from outside the lab. The only prior heartbeat was
  h4-core.
- Endpoint URLs come from Vault via ESO and are read with url_file. The
  ntfy topic IS the password; it must not be in git.

Scrape targets (H28): dropped decommissioned 192.168.1.70, which had kept
LabExternalHostDown firing critical for three weeks. Added .116, .217,
.128 (Vault - every ExternalSecret depends on it) and .64.

LabVMUnexpectedShutoff filtered on domain=~ldap-1, decommissioned
2026-07-04, so the rule was structurally unable to fire. Retargeted at
gitlab-1.

Refs: docs/REVIEW-2026-07-24.md H25, H28
@swares
swares merged commit 26c7ee8 into main Jul 25, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant