101 lines
5.4 KiB
Markdown
101 lines
5.4 KiB
Markdown
# Monitoring Stack
|
|
|
|
Zielzustand: ein zentraler Observability-Stack fuer KalliLab CORE.
|
|
|
|
## Enthaltene Dienste
|
|
|
|
- `monitoring-grafana`: zentrale UI unter `https://monitoring.kaleschke.info`
|
|
- `monitoring-prometheus`: Metriken mit 30 Tagen Retention
|
|
- `monitoring-alertmanager`: Alert-Routing fuer Prometheus-Regeln
|
|
- `monitoring-alertmanager-ntfy-bridge`: uebersetzt Alertmanager-Webhooks zu ntfy-Pushes
|
|
- `monitoring-loki`: Container-Logs mit 30 Tagen Retention
|
|
- `monitoring-promtail`: Docker-Log-Discovery ueber read-only Docker-Socket
|
|
- `monitoring-node-exporter`: Host-Metriken
|
|
- `monitoring-cadvisor`: Container-Metriken
|
|
- `monitoring-blackbox-exporter`: externe HTTP-Erreichbarkeit als Uptime-Kuma-Ersatz
|
|
- `monitoring-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:
|
|
|
|
```text
|
|
/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:
|
|
|
|
```env
|
|
INFLUXDB_BIND_IP=127.0.0.1
|
|
```
|
|
|
|
Wenn Home Assistant aus der VM schreiben soll, in Komodo fuer den `monitoring`-Stack setzen:
|
|
|
|
```env
|
|
INFLUXDB_BIND_IP=192.168.178.58
|
|
```
|
|
|
|
## Migration
|
|
|
|
1. Secrets anlegen. Erledigt.
|
|
2. Alten `ops/loki`-Stack stoppen, wenn `monitoring-loki` und `monitoring-promtail` live gehen. Erledigt.
|
|
3. Alten `ops/grafana-influxdb`-Stack stoppen, bevor `monitoring-influxdb3-core` den LAN-Port `192.168.178.58:8181` uebernimmt. Erledigt.
|
|
4. `monitoring` via Komodo deployen und `INFLUXDB_BIND_IP=192.168.178.58` erst setzen, wenn der Altcontainer den Port freigegeben hat. Erledigt.
|
|
5. Alte Repo-Verzeichnisse `ops/loki` und `ops/grafana-influxdb` entfernen. Erledigt.
|
|
6. Optionales Dashboard-Bootstrap-Profil einmalig ausfuehren.
|
|
7. Home Assistant Writer gegen `http://192.168.178.58:8181/` pruefen; `401 Unauthorized` ohne Token ist erwartbar.
|
|
|
|
## Smoke-Tests
|
|
|
|
- `https://monitoring.kaleschke.info` leitet zu Authelia.
|
|
- Grafana-Datasources `Prometheus`, `Loki` und `InfluxDB 3 Core` testen erfolgreich.
|
|
- Prometheus Targets: `prometheus`, `node-exporter`, `cadvisor`, `traefik`, `blackbox-http`.
|
|
- Node Exporter Textfile Collector: `/mnt/user/services/posture-check/textfile/homelab.prom` wird vom Host-Skript `services/posture-check/export-prometheus-textfile.sh` befuellt.
|
|
- Alertmanager ist erreichbar und sendet ueber `monitoring-alertmanager-ntfy-bridge` nach `https://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 + Logs` ersetzt Live-Logs und Error-Rate.
|
|
- Glances erst stoppen, wenn `Homelab / Host Overview` und `Homelab / Containers + Logs` fuer 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`.
|
|
|
|
## 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:
|
|
|
|
- `HomelabExternalConnectivityDown` feuert, wenn mindestens 5 Public-Endpoints gleichzeitig fuer 8 Minuten nicht erreichbar sind. Das deckt WAN-, DNS- oder Provider-Ausfaelle ab, inklusive laengerer DSL-Reconnects.
|
|
- `HomelabEndpointDown` feuert 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.
|
|
- `HomelabCertificateExpiresSoon` und `HomelabCertificateExpiresCritical` nutzen Blackbox TLS-Metriken fuer 21-/7-Tage-Warnungen.
|
|
- `HomelabBorgBackupStale`, `HomelabBorgLastJobFailed`, `HomelabBorgLastJobCompletedWithWarnings` und `HomelabCriticalContainerDown` nutzen Host-Textfile-Metriken. Voraussetzung: `services/posture-check/export-prometheus-textfile.sh` laeuft regelmaessig auf dem Host, empfohlen alle 15 Minuten.
|
|
|
|
Test:
|
|
|
|
```bash
|
|
curl -fsS http://alertmanager-ntfy-bridge:8080/healthz
|
|
```
|
|
|
|
Textfile-Metriken manuell aktualisieren:
|
|
|
|
```bash
|
|
bash /mnt/user/services/homelab-infra/services/posture-check/export-prometheus-textfile.sh
|
|
```
|