Skip to main content
Health monitoring across three layers: is the container running, is the app internally functional, and is it reachable externally.

Tools

  • Homepage — dashboard with container status, internal site monitors, and per-service API widgets. Talks to the swarm API via docker-socket-proxy_dockerproxy on the swarm overlay, so it sees services scheduled on both nodes.
  • tests/check-endpoints.sh — on-demand external HTTP check against all public URLs (run from anywhere). There is no continuous external prober; critical alerting is moving to a small Mastra scheduled health-check → ntfy on the endpoints that matter.
  • Dozzle — log aggregation across both nodes (mode: global swarm service).
  • Beszel — self-hosted system metrics dashboard at https://beszel.augustin.ai. Hub is a swarm stack on debian-1; agents run as plain compose on each node (swarm drops devices: which breaks SMART). Auto-registers via universal token. Telegram alerts via @beszel_am_bot (Shoutrrr URL configured per-user).

Coverage Matrix

ServiceContainer StatusInternal FunctionalityExternal Reachability
aiclient2apiHomepageDocker healthcheck (healthcheck.js) + kiro-cli whoami heartbeat from sync-kiro-token.py (catches OAuth wedging)check-endpoints
audiobookshelfHomepageDocker healthcheck + widgetcheck-endpoints
bazarrHomepageDocker healthcheck + widgetcheck-endpoints
bulwarkHomepage/api/health via healthcheckcheck-endpoints
calibre-webHomepageDocker healthcheck + widgetcheck-endpoints
chaptarrHomepageDocker healthcheckcheck-endpoints
cloudflaredHomepageCloudflare API widget (external)— (implicit; if down, every public URL fails)
docker-socket-proxyHomepage— (internal only)
dozzleHomepagecheck-endpoints
drawHomepagePort check onlycheck-endpoints
elementHomepageDocker healthcheckcheck-endpoints
flaresolverrHomepageDocker healthcheck (sessions.list probe)check-endpoints
gluetunDocker healthcheck + Homepage API widget (real VPN status)check-endpoints
homepageHomepageDocker healthcheckcheck-endpoints
jellyfinHomepageWidget (no healthcheck)check-endpoints
matrix-db (postgres)HomepageDocker healthcheck
mautrix-discordHomepage
minifluxHomepageDocker healthcheck + widgetcheck-endpoints
miniflux-db (postgres)HomepageDocker healthcheck
n8nHomepagecheck-endpoints
nextfluxHomepagePort check onlycheck-endpoints
openclawHomepageDocker healthcheck (/healthz)check-endpoints
openwebuiHomepageDocker healthcheckcheck-endpoints
pocket-idHomepageDocker healthcheckcheck-endpoints
prowlarrHomepageDocker healthcheck + widgetcheck-endpoints
qbittorrentHomepageDocker healthcheck (via gluetun)— (behind VPN, only through seerr)
radarrHomepageDocker healthcheck + widgetcheck-endpoints
reader/feed-scraperHomepage
reader/rsshubHomepagecheck-endpoints
registryHomepage— (internal only)
searxngHomepagecheck-endpoints
seerrHomepageDocker healthcheck + widgetcheck-endpoints
sonarrHomepageDocker healthcheck + widgetcheck-endpoints
stalwartHomepageHomepage JMAP widget (real query)check-endpoints
synapseHomepageDocker healthcheckcheck-endpoints
traefikHomepageHomepage API widgetcheck-endpoints
yamtrackHomepageDocker healthcheckcheck-endpoints
yamtrack/redisHomepage

Drive Monitoring

scripts/drive-check.sh runs on i3 every 15 min via cron. For each drive + the mergerfs pool, it checks mountpoint status, read, and write — printing OK/FAIL per drive and exiting non-zero if any drive failed, so cron surfaces the failure (mail/log). There is no push monitor anymore. Monitored drives: sandisk-2tb, sandisk-1tb-lg, sandisk-1tb-dg (pool members), mergerfs-pool (/mnt/main/media).

Backup & Maintenance Scripts

The cron scripts print OK/FAIL and exit non-zero on failure; cron surfaces failures via its own mail/log. There is no external heartbeat monitor (Uptime Kuma was retired) — a small Mastra scheduled health-check → ntfy is the intended replacement for the alerting these push monitors used to provide.
ScriptNodeFrequency
scripts/backup-i3.shi3daily 03:00
scripts/backup-pentium.shPentiumdaily 04:00
scripts/restic-check.shi3weekly Sun 05:00
scripts/rebuild-images.shi3weekly Sun 04:00
aiclient2api/sync-kiro-token.pyi3every 15 min (kiro-cli whoami is the heartbeat)
scripts/drive-check.shi3every 15 min

Gaps

  • No continuous external prober. tests/check-endpoints.sh is on-demand only; nothing alerts automatically when a public URL goes down. The Mastra health-check → ntfy job is the planned replacement.
  • Healthchecks still missing on: cloudflared, docker-socket-proxy, dozzle, draw, jellyfin, n8n, qbittorrent, registry, traefik, mautrix-discord, feed-scraper, nextflux, rsshub, searxng, stalwart, yamtrack/redis. Most of these ship no healthcheck upstream; a few could use a cheap curl-based one added in our compose file.
  • Cloudflared has no external monitor. Its status is implicit — if the tunnel is down, every public URL fails at once.
  • Gluetun — Homepage’s widget (with API key) gets the real VPN-tunnel state.
Cheapest wins: add Docker healthchecks to draw, stalwart, n8n, and searxng. All have trivial HTTP endpoints.