Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8.4 KiB
Monitoring Stack
Zielzustand: ein zentraler Observability-Stack fuer KalliLab CORE.
Enthaltene Dienste
monitoring-grafana: zentrale UI unterhttps://monitoring.kaleschke.infomonitoring-prometheus: Metriken mit 30 Tagen Retentionmonitoring-alertmanager: Alert-Routing fuer Prometheus-Regelnmonitoring-alertmanager-ntfy-bridge: uebersetzt Alertmanager-Webhooks zu ntfy-Pushesmonitoring-loki: Container-Logs mit 30 Tagen Retentionmonitoring-promtail: Docker-Log-Discovery ueber read-only Docker-Socketmonitoring-node-exporter: Host-Metrikenmonitoring-cadvisor: Container-Metrikenmonitoring-blackbox-exporter: externe HTTP-Erreichbarkeit als Uptime-Kuma-Ersatzmonitoring-influxdb3-core: InfluxDB 3 Core fuer Home-Assistant-/Ecowitt-Langzeitdaten
Die alten Pfade ops/loki und ops/grafana-influxdb wurden am 2026-05-26 aus dem aktiven Repo entfernt. Rollback erfolgt bei Bedarf ueber Git-Historie, nicht ueber parallel gepflegte Compose-Verzeichnisse.
Live-Stand 2026-06-01: die zehn monitoring-* Container laufen produktiv, die alten Container grafana, influxdb3-core, loki und alloy sind in Docker nicht mehr vorhanden. Uptime Kuma ist durch Blackbox Exporter, Prometheus-Alerts und das Dashboard Homelab / Availability abgeloest.
Secrets
Vor dem Deploy muessen diese Host-Dateien existieren:
/mnt/user/appdata/secrets/monitoring_grafana_admin_password.txt
/mnt/user/appdata/secrets/monitoring_grafana_influxdb_token.txt
/mnt/user/appdata/secrets/influxdb3_admin_token.json
Alle Dateien mit Rechten 600 anlegen. Werte niemals ins Git schreiben.
monitoring-influxdb3-core uebernimmt bewusst /mnt/user/appdata/influxdb3/data und /mnt/user/appdata/influxdb3/plugins vom bisherigen Grafana/Influx-Stack, damit Home-Assistant-/Ecowitt-Historie und Token-Katalog erhalten bleiben.
Stack Environment
Default ist sicher lokal:
INFLUXDB_BIND_IP=127.0.0.1
Wenn Home Assistant aus der VM schreiben soll, in Komodo fuer den monitoring-Stack setzen:
INFLUXDB_BIND_IP=192.168.178.58
Migration
- Secrets anlegen. Erledigt.
- Alten
ops/loki-Stack stoppen, wennmonitoring-lokiundmonitoring-promtaillive gehen. Erledigt. - Alten
ops/grafana-influxdb-Stack stoppen, bevormonitoring-influxdb3-coreden LAN-Port192.168.178.58:8181uebernimmt. Erledigt. monitoringvia Komodo deployen undINFLUXDB_BIND_IP=192.168.178.58erst setzen, wenn der Altcontainer den Port freigegeben hat. Erledigt.- Alte Repo-Verzeichnisse
ops/lokiundops/grafana-influxdbentfernen. Erledigt. - Optionales Dashboard-Bootstrap-Profil einmalig ausfuehren.
- Home Assistant Writer gegen
http://192.168.178.58:8181/pruefen;401 Unauthorizedohne Token ist erwartbar.
Smoke-Tests
https://monitoring.kaleschke.infoleitet zu Authelia.- Grafana-Datasources
Prometheus,LokiundInfluxDB 3 Coretesten erfolgreich. - Prometheus Targets:
prometheus,node-exporter,cadvisor,traefik,blackbox-http. - Node Exporter Textfile Collector:
/mnt/user/services/posture-check/textfile/homelab.promwird vom Host-Skriptservices/posture-check/export-prometheus-textfile.shbefuellt. - Alertmanager ist erreichbar und sendet ueber
monitoring-alertmanager-ntfy-bridgenachhttps://ntfy.kaleschke.info/homelab-alerts. - Loki zeigt Container-Logs mit Labels
container,compose_project,compose_service. - InfluxDB 3 Core enthaelt die Datenbank
homelab.
Abloesestand
- Dozzle bleibt abgeloest:
Homelab / Containers + Logsersetzt Live-Logs und Error-Rate. - Glances erst stoppen, wenn
Homelab / Host OverviewundHomelab / Containers + Logsfuer CPU, RAM, Disk, Network, Container-CPU und Container-RAM passen. - Uptime Kuma ist entfernt;
Homelab / Availability, Blackbox Exporter und Prometheus-Alerts sind der Zielzustand fuer HTTP-Verfuegbarkeit. - Dashboard-Zielbestand:
Homelab / Availability,Homelab / Containers + Logs,Homelab / Host Overview,Homelab / Family Status,Traefik Official Standalone Dashboard.
Wetter-Tagesberichte
Die Ecowitt-/HA-Wetterdaten (DB homeassistant, Datasource ha-weather-influx)
werden in drei Grafana-Dashboards sichtbar (Ordner Homelab, Tag weather):
Wetterarchiv KalliHome(ha-weather-archive): Verlaeufe und Gauges ueber einen Zeitbereich.Wetterbericht KalliHome(ha-weather-day-report): visueller Tagesbericht fuer einen Tag (Bewertungs-Banner, Kennzahl-Karten mit Sparkline, Tagescharts Temperatur und Solar/UV).Wetter-Tagesberichte KalliHome(ha-weather-report-history): Index/Finder, eine Zeile pro Tag mit Kurzbewertung, T min/max/Mittel, Regen, UV und Boee.
Alte Tagesberichte finden und ein Datum waehlen
- Dashboard
Wetter-Tagesberichteoeffnen (Standard: letzte 30 Tage, Europe/Berlin). In der Tabelle auf das Datum klicken -> der ausfuehrliche Tagesbericht oeffnet sich fuer genau diesen Tag. Weiter zurueck: Zeitbereich oben rechts vergroessern. - Alternativ im Dashboard
Wetterbericht KalliHomedirekt einen Tag waehlen: Zeitbereich oben rechts -> Absolute time range -> z. B. From2026-06-15 00:00:00, To2026-06-16 00:00:00-> Apply. Beide Dashboards haben ZeitzoneEurope/Berlin, die Eingaben gelten also in Berliner Lokalzeit; Standard istgestern(now-1d/dbisnow/d).
Grafana hat keine echte Datepicker-Variable: eine Textbox-Variable kann den
Zeitbereich nicht setzen, und ein report_date-Ansatz braeuchte zeitzonen-genaues
Tages-Bounding in InfluxDB-3-SQL. Deshalb ist der Timepicker bei Dashboard-Zeitzone
Europe/Berlin der exakte Weg fuer einen vollstaendigen Lokaltag, und die
Index-Tabelle der bequeme Klick-Selektor fuer alte Tage. Die Tabellen-Buckets liegen
auf UTC-Mitternacht (~01:00/02:00 Berlin); der verlinkte Tagesbericht zeigt das
gewaehlte Fenster vollstaendig.
Quelle: InfluxDB statt Markdown-Index
Die Dashboards rendern direkt per SQL aus InfluxDB 3 Core - gleiche Quelle wie der
Markdown-Generator services/posture-check/weather-day-report.py. Damit ist jeder
zurueckliegende Tag reproduzierbar, solange die Rohdaten vorgehalten werden; ein
separater Markdown-Index ist bewusst nicht noetig. Die erzeugten Tagesberichte als
Datei (E-Mail/Offline-Archiv) liegen weiterhin unter
/mnt/user/services/posture-check/daily-reports/homelab-day-YYYY-MM-DD.md.
Deploy und Test
Dashboards werden aus monitoring/grafana/dashboards/ provisioniert (Verzeichnis-
Mount, Reload alle 5 Minuten, Ordner Homelab). Nach Push nach Gitea deployt Komodo
den monitoring-Stack; Grafana laedt die JSON-Dateien automatisch nach. Kein
Bootstrap-Importer noetig (der gilt nur fuer grafana.com-Dashboard-ID 17346).
SQL der Index-Tabelle vor dem Verlassen einmal pruefen: Grafana -> Explore ->
Datasource ha-weather-influx -> die rawSql aus weather-report-history.json
einfuegen und einen Zeitbereich (z. B. letzte 7 Tage) waehlen. Erwartet: eine Zeile
pro Tag mit gefuellten Spalten. Falls extract(epoch FROM ...) auf dem InfluxDB-3-
Build nicht unterstuetzt wird, stattdessen to_unixtime(...) verwenden.
Alerting
Prometheus wertet monitoring/prometheus/alerts.yml aus und sendet an monitoring-alertmanager.
Alertmanager routet alle Alerts an den ntfy-Bridge-Container.
Der Bridge-Container postet nach https://ntfy.kaleschke.info/homelab-alerts.
Blackbox-HTTP-Alerts unterscheiden zwischen einem einzelnen kaputten Endpoint und einem externen Connectivity-Problem:
HomelabExternalConnectivityDownfeuert, wenn mindestens 5 Public-Endpoints gleichzeitig fuer 8 Minuten nicht erreichbar sind. Das deckt WAN-, DNS- oder Provider-Ausfaelle ab, inklusive laengerer DSL-Reconnects.HomelabEndpointDownfeuert fuer einzelne Endpoints erst nach 8 Minuten und wird unterdrueckt, solange der Sammelalert aktiv ist. Dadurch erzeugt ein Telekom-24h-Reconnect keine ntfy-Flut pro Domain.HomelabCertificateExpiresSoonundHomelabCertificateExpiresCriticalnutzen Blackbox TLS-Metriken fuer 21-/7-Tage-Warnungen.HomelabBorgBackupStale,HomelabBorgLastJobFailed,HomelabBorgLastJobCompletedWithWarningsundHomelabCriticalContainerDownnutzen Host-Textfile-Metriken. Voraussetzung:services/posture-check/export-prometheus-textfile.shlaeuft regelmaessig auf dem Host, empfohlen alle 15 Minuten.
Test:
curl -fsS http://alertmanager-ntfy-bridge:8080/healthz
Textfile-Metriken manuell aktualisieren:
bash /mnt/user/services/homelab-infra/services/posture-check/export-prometheus-textfile.sh