Skip to content

feat(observability): probe the in-house ntfy, and the Pixel trusts the tier root (#136) - #715

Merged
Gerrrt merged 1 commit into
mainfrom
gerrrt/ntfy-probe-enable-136
Sep 29, 2026
Merged

Gerrrt merged 1 commit into
mainfrom
gerrrt/ntfy-probe-enable-136

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Sep 28, 2026

Copy link
Copy Markdown
Owner

What changed

Why

This is step 7 of the #136 cutover in docs/runbooks/verify-the-alert-path.md. With the target enabled, a dead in-house ntfy fires EndpointUnreachable. That alert is critical, so it reaches urgent and its ntfy.sh copy.

Blast radius

  • prometheus: one new blackbox target. file_sd picks it up within 5 minutes, with no restart.

  • Before merging: the probe was run from the live exporter first and is green. It will not page on load.

  • No change to network segmentation or firewall rules

  • No new port published to a VLAN that could not already reach the service

  • No credential added outside secrets/*.sops.yaml

Verification

The probe, run on prometheus from the running exporter:

probe_http_status_code 200
probe_ssl_earliest_cert_expiry 1.791237544e+09   # 2026-10-05T21:59:04Z
probe_success 1

That expiry matches the leaf Caddy serves on trinity.

Also observed during the cutover so far:

  • trinity: all 14 containers are healthy. Through Caddy, anonymous publish and read both got 403.

  • Phones: both received a test publish made with Alertmanager's token. The iPhone's arrived through the ntfy.sh wake-up.

  • prometheus: make up passed with the new receivers.

  • make validate passes

  • Deployed to the lab and confirmed working (the probe, from the live exporter)

  • Docs updated

Still to come: steps 8 and 9, the synthetic page on both networks and the docker stop drill. Their times go into the runbook in a follow-up.

Refs #136

🤖 Generated with Claude Code

…e tier root (#136)

Enables the blackbox target for https://ntfy.matrix.elysium/v1/health,
which #712 wrote out commented. It was run first from the live exporter
on prometheus: probe_success 1, status 200, and a cert expiry of
2026-10-05T21:59:04Z. That is the same seven-day leaf Caddy serves on
trinity, so the chain verified against the tier's root end to end.

From now on a dead in-house ntfy fires EndpointUnreachable, which is
critical and so reaches urgent's ntfy.sh copy.

The stack README records the open question from #712: the Pixel's ntfy
app accepts a user-installed root. Both phones received a test publish
made with Alertmanager's token.

Refs #136

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Gerrrt
Gerrrt merged commit 6049bee into main Sep 29, 2026
7 checks passed
@Gerrrt
Gerrrt deleted the gerrrt/ntfy-probe-enable-136 branch September 29, 2026 01:51
Gerrrt added a commit that referenced this pull request Sep 29, 2026
…es (#136) (#718)

Enabling the ntfy probe (#715) paged `urgent` within ten minutes:
"ntfy's certificate has 7 days left", on a leaf Caddy had just issued.
Every sensitive-tier leaf is seven days from step-ca (ADR-0037), so it is
always inside TlsCertificateExpiryImminent's 7-day threshold and the
30-day one. It would have repeated every 4h indefinitely. The comment in
#712 that said the 30-day warning "should never fire here" was wrong.

- The ntfy target gains `renewal: acme`. Both existing expiry rules
  select renewal!="acme", which is a no-op for every target that lacks
  the label.
- New TlsAcmeRenewalStalled, critical, fires when an ACME leaf has under
  36h left for 30m. Caddy renews at a third of the lifetime, about 56h,
  so this means about 20h of failed renewals. Critical so it reaches
  urgent's ntfy.sh copy: when that leaf lapses the in-house path goes too.
- promtool cases: a healthy leaf at five days fires nothing; the same
  leaf at 30h fires only the new rule.
- Rule counts in the docs move from 102 to 103.

Refs #136

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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