107 lines
4.3 KiB
Markdown
107 lines
4.3 KiB
Markdown
---
|
|
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)
|