docs: create betrieb/monitoring
This commit is contained in:
committed by
ThreadNet Wiki
parent
6e23dc2205
commit
370823abb7
@@ -0,0 +1,106 @@
|
||||
---
|
||||
title: Monitoring
|
||||
description: Alloy → Prometheus/Loki
|
||||
published: true
|
||||
date: 2026-08-13T18:04:42.896Z
|
||||
tags:
|
||||
editor: markdown
|
||||
dateCreated: 2026-08-13T18:04:42.895Z
|
||||
---
|
||||
|
||||
**Status**: ✅ live · **Stand**: 2026-08-02
|
||||
**Remote Storage**: `10.0.0.3:9090` (Prometheus), `10.0.0.3:3100` (Loki) — **privates Netz**, nicht die öffentliche IP
|
||||
|
||||
## Überblick
|
||||
|
||||
Alloy (Grafana Agent) sammelt Metriken & Logs vom K3S-Cluster und schickt sie per
|
||||
Remote-Write zu Prometheus/Loki auf CFGMON (Grafana: `selendis.axion1337.de`).
|
||||
Der Monitoring-Stack auf CFGMON selbst liegt im Repo
|
||||
[`threadnet-operating`](https://git.lab/axion1337.chat/threadnet-operating) unter
|
||||
`monitoring/` — dort leben auch Alertmanager, die Alarmregeln und die CVE-Pipeline.
|
||||
|
||||
## Komponenten
|
||||
|
||||
| Komponente | Ort | Rolle |
|
||||
|-----------|-----|-------|
|
||||
| **Alloy** | Cluster | Metrics & Logs Collector, Remote-Write |
|
||||
| **kube-state-metrics** | Cluster | Kubernetes Object Status |
|
||||
| **node-exporter (systemd)** | Host `10.0.0.2` | Host-Metriken — **kein DaemonSet**, siehe unten |
|
||||
| **Prometheus** | CFGMON | Metrics Ingestion + Alarmauswertung |
|
||||
| **Loki** | CFGMON | Logs Ingestion |
|
||||
| **Alertmanager + matrix-alerts** | CFGMON | Alarmzustellung nach Matrix |
|
||||
|
||||
> ⚠️ **Der node-exporter als DaemonSet wurde am 2026-08-01 entfernt** (gitops#45,
|
||||
> Commit `93ee6a3`). Er lief mit `hostNetwork` und kollidierte auf Port 9100 mit dem
|
||||
> etablierten **systemd-Dienst** `prometheus-node-exporter` — Ergebnis war ein
|
||||
> CrashLoopBackOff mit über 4.800 Neustarts, der monatelang unbemerkt blieb.
|
||||
> Host-Metriken kommen unverändert vom systemd-Exporter, den CFGMON direkt über
|
||||
> `10.0.0.2:9100` scrapt. Frühere Fassungen dieser Seite führten den DaemonSet als
|
||||
> Komponente — das ist überholt.
|
||||
|
||||
## Dateien (in `apps/monitoring/`)
|
||||
|
||||
- `namespace.yaml`
|
||||
- `helm-repos.yaml` (prometheus-community, grafana)
|
||||
- `kube-state-metrics.yaml`
|
||||
- `alloy-config.yaml` (River config: Scrape-Targets + Remote-Write)
|
||||
- `alloy.yaml` (HelmRelease)
|
||||
|
||||
## Scrape Targets
|
||||
|
||||
Alloy scrapt:
|
||||
- **Flux Controllers** (flux-system ns, Port 8080)
|
||||
- **kube-state-metrics** (monitoring:8080)
|
||||
- **Synapse** (`matrix.axion1337.chat:9001`) — ⚠️ **Port 9001, nicht 9000**: der falsche
|
||||
Port lief 98 Tage ins Leere und fiel erst mit dem Alerting auf (Fix `b73d887`)
|
||||
|
||||
Host-Metriken laufen **nicht** über Alloy, sondern werden von CFGMON direkt geholt
|
||||
(`10.0.0.2:9100`, Job `k3s_host_node`).
|
||||
|
||||
Alles Weitere per Remote-Write nach `10.0.0.3:9090` bzw. `:3100`.
|
||||
|
||||
## Alerting (seit 2026-08-01, gitops#32)
|
||||
|
||||
Alertmanager auf CFGMON wertet die Regeln aus `monitoring/prometheus/alerts.yml` aus und
|
||||
stellt über einen kleinen Webhook-Empfänger (`matrix-alerts.py`) in Matrix zu:
|
||||
|
||||
| Raum | Zweck | Bot |
|
||||
|---|---|---|
|
||||
| `!qavWkXbhLPfGvqtifj` | Betriebsalarme (TargetDown, OOM, Disk, Restarts) | `@alerts` |
|
||||
| `!YRJvcEbVXtRlUIkNld` | Security: CVE-Meldungen, Upstream-Releases | derselbe Bot |
|
||||
|
||||
Ein Alarm = **eine** Nachricht; bei `resolved` wird dieselbe Nachricht per
|
||||
`m.replace` durchgestrichen und mit ✅ markiert, statt eine zweite zu senden.
|
||||
Routing über das Label `room` in der Alarmregel.
|
||||
|
||||
## CVE-Pipeline (gitops#47/#51)
|
||||
|
||||
Auf CFGMON läuft ein 24-Stunden-Scanloop mit **Trivy** über die deployten Images
|
||||
(`monitoring/cve/images.txt`), ein Exporter stellt die Funde als Metriken bereit
|
||||
(`trivy_vuln_info{cve,severity,target,host,fixed_version}`, `trivy_vuln_first_seen_timestamp`).
|
||||
Die Alarme sind bewusst **pro Ziel aggregiert** (`count by (target, target_type, host)`),
|
||||
nicht pro CVE — die erste Fassung erzeugte 126 Einzelnachrichten und musste
|
||||
stummgeschaltet werden (ADR-0003). Details stehen im Grafana-Dashboard, die
|
||||
Matrix-Nachricht verlinkt nur dorthin.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
```bash
|
||||
# Alloy-Logs im Cluster
|
||||
kubectl logs -n monitoring -l app.kubernetes.io/name=alloy
|
||||
|
||||
# Remote-Write angekommen?
|
||||
curl 'http://10.0.0.3:9090/api/v1/query?query=up'
|
||||
|
||||
# Loki-Test
|
||||
curl -s 'http://10.0.0.3:3100/loki/api/v1/query_range?query=%7B%7D' | jq .
|
||||
|
||||
# Auf CFGMON: Alarme und Silences
|
||||
docker compose exec alertmanager amtool alert --alertmanager.url=http://localhost:9093
|
||||
docker compose exec alertmanager amtool silence --alertmanager.url=http://localhost:9093
|
||||
```
|
||||
|
||||
---
|
||||
**Verwandt**: [Host-Wartungsbenachrichtigungen](/betrieb/host-maintenance-notifications) ·
|
||||
Backlog und Betriebsentscheidungen im
|
||||
[management-Repo](https://git.lab/axion1337.chat/management)
|
||||
Reference in New Issue
Block a user