docs: Error-Log-Erfassung dokumentiert (LogQL-Beispiele, drei stille Fallen)

This commit is contained in:
mm committed 2026-09-14 10:03:21 +02:00
1 parent 3236d9cede
commit 0e94bf4d91
1 file changed
+35
+35
View File
@@ -480,6 +480,41 @@ Wer kein sudo hat, aber in der Gruppe `docker` ist: Container-Variante aus
[netbird-observability/stacks/telegraf-node](https://gitea.m-m.bio/mm/netbird-observability) (privates Repo). [netbird-observability/stacks/telegraf-node](https://gitea.m-m.bio/mm/netbird-observability) (privates Repo).
Dort ist `network_mode: host` gesetzt — ohne das sieht Telegraf nur `lo`+`eth0` statt der echten Interfaces. Dort ist `network_mode: host` gesetzt — ohne das sieht Telegraf nur `lo`+`eth0` statt der echten Interfaces.
## Error-Logs (seit 1.3.0)
Apache schreibt **zwei** Logarten mit **verschiedenen** Formaten:
| Datei | Format | Ziel |
|---|---|---|
| `access.log` | `IP ident auth [HTTPDATE] "VERB REQ" CODE BYTES` | Loki (roh) **und** Prometheus (Metriken) |
| `error.log` | `[Mon Sep 14 00:10:01.123456 2026] [core:error] [pid 9] AH00124: …` | Loki (roh), Tag `logtype=error` |
Bis 1.2.0 wurden **nur** Access-Logs gesammelt. Nachgemessen: 31 `logfile`-Labels
in Loki, **0** davon `error.log` — auf einem Panel-Host mit PHP/CMS fehlten damit
genau die Fehler, für die man ins Monitoring schaut.
Error-Logs laufen über einen **eigenen Input**, nicht durch den Access-Grok: das
Format passt nicht, und der Aggregator würde sie sonst in leere Gruppen einordnen.
Sie tragen `logtype=error` und `logfile=<pfad>` — in Grafana nach beiden filterbar:
```logql
{node="<host>", logtype="error"}
{node="<host>", logtype="error"} | logfmt | line_format "{{.message}}" |~ "PHP Fatal"
```
### Drei stille Fallen, die dabei behoben wurden
Alle drei hätten dazu geführt, dass die Logs **gesammelt und dann verworfen**
werden — ohne Fehlermeldung:
1. `processors.rename` hatte `namepass = ["journal"]`. Für `apache_error` hieß
das Feld deshalb `value` statt `message` — jede Query mit `{{.message}}` hätte
es nicht gefunden.
2. `outputs.loki` hatte `namepass = ["docker_log", "apache_log", "journal"]` —
ohne `apache_error`. Der Input sammelt ein, der Output verwirft.
3. `outputs.prometheus` fehlte `apache_error` in `namedrop` — sonst wandern
Textzeilen als Zeitreihen in die TSDB.
## Alte Logs archivieren (Historie nachträglich auswertbar machen) ## Alte Logs archivieren (Historie nachträglich auswertbar machen)
`inputs.tail` liest mit `initial_read_offset = "saved-or-end"` nur **Neues** — die `inputs.tail` liest mit `initial_read_offset = "saved-or-end"` nur **Neues** — die