Skip to content

Monitoring

What we watch

Layer Tool Where
Public endpoints Uptime Kuma (36 monitors) joaoluisbrazao.cloud/uptime/ via SSH tunnel
Container health Docker healthchecks docker ps shows (healthy)
Runtime security Falco container logs + Telegram
Antivirus ClamAV scheduled scans, results to Telegram
LLM spend LiteLLM proxy litellm dashboard, cost cap enforced
Skill execution command_runs table joaoluisbrazao.cloud/admin/runs
Disk/RAM/CPU Telegram hourly health report @DownRabbitbot
Brain ingestion Brain Q&A panel brain.joaoluisbrazao.com

Alert routing

Everything actionable goes to Telegram chat @DownRabbitbot (CHAT_ID 1827458013).

  • Silent = OK (no news is good news)
  • A message means something happened that a human should look at
  • Daily health summary lands at 08:00 UTC every day
  • Hourly heartbeat from infra-telegram-webhook

SLO targets

Informal — no formal SLOs are signed off yet.

Service Target Reality
Brain Q&A 99% during business hours currently met
Vikunja 99.5% always currently met
Gamine public site 99% known issue: gamine-app was restart-looping on 2026-05-11
Forgejo 99.5% currently met

Runbook integration

When Uptime Kuma trips a monitor, the alert text should link to a runbook in runbooks/. If the runbook does not exist yet, the on-call should write one after resolving the incident.

What we do not monitor (yet)

  • Application-level error rates (no APM in place — Sentry deferred)
  • Database query latency
  • nginx 5xx rates
  • TLS cert expiry beyond the 60-day automatic renewal cycle (Telegram alert is set for 7 days before expiry)