fix(apache): from_beginning existiert bei inputs.tail nicht (Dienststart scheiterte) + COMMON/COMBINED_LOG_FORMAT; Logpfad-Autoerkennung

This commit is contained in:
mm committed 2026-09-14 00:14:45 +02:00
1 parent feb77e2fc7
commit da3f221c8d
3 files changed
+129 -6

No files matched your search

+68 -5
View File
@@ -1,13 +1,76 @@
# Apache: Access-Log → Loki (roh) + optional Request-Metriken → Prometheus
# Apache: Access-Logs → Loki (roh) UND Request-Metriken → Prometheus
#
# Zwei Wege aus einem Log — sie ergaenzen sich:
# inputs.tail : jede Zeile roh nach Loki (fuer die Fehlersuche im Einzelfall)
# inputs.logparser: dieselben Zeilen als Metriken (Request-Rate, Status-Klassen,
# Antwortzeit) — das ist, was Panels und Alerts brauchen
#
# Die Logs landen NICHT in Prometheus: der Remote-Write-Output hat
# `namedrop = ["docker_log", "journal"]` — hier kommt `apache_log` dazu.
#
# FALLE: `from_beginning` existiert bei inputs.tail NICHT (weder im Docker-Image
# noch im InfluxData-Paket 1.40). Ein solcher Block laesst den Dienst beim Start
# hart scheitern: "plugin inputs.tail: configuration specified the fields
# [from_beginning]" → systemctl start schlaegt fehl, ALLE Metriken aus.
# Stattdessen: initial_read_offset = "saved-or-end" (Default), damit beim ersten
# Lauf nicht die komplette Historie ausgeschuettet wird.
# --------------------------------------------------------------------------
# 1) Roh-Logs → Loki
# --------------------------------------------------------------------------
[[inputs.tail]]
files = ["${APACHE_LOG}"]
from_beginning = false
name_override = "apache_log"
name_override = "journal"
# Beim Erstanlauf nur Neues lesen; danach Position merken.
initial_read_offset = "saved-or-end"
data_format = "value"
data_type = "string"
# Vereinheitlicht den Feldnamen auf `message` — das Logs-Panel in Grafana
# erwartet es; `value` wuerde als value="…" erscheinen.
path_tag = "logfile"
[inputs.tail.tags]
source = "apache"
# Optional: mod_status (a2enmod status; ExtendedStatus On; /server-status?auto lokal freigeben)
[[processors.rename]]
namepass = ["journal"]
order = 1
[[processors.rename.replace]]
field = "value"
dest = "message"
# --------------------------------------------------------------------------
# 2) Request-Metriken (Common/Combined Log Format) → Prometheus
# --------------------------------------------------------------------------
# Common Log Format:
# 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
# VHost-Apache (Debian-Default) stellt den Hostnamen voran:
# example.com:80 127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET / HTTP/1.0" 200 2326
[[inputs.tail]]
files = ["${APACHE_LOG}"]
name_override = "apache_access"
initial_read_offset = "saved-or-end"
data_format = "grok"
# Korrekte Namen der Telegraf-Grok-Sammlung: COMMON_LOG_FORMAT und
# COMBINED_LOG_FORMAT — NICHT HTTPD_* (das sind andere Muster, Telegraf kennt
# sie nicht: "no pattern found for %{HTTPD_COMBINED_LOG_FORMAT}").
# Reihenfolge: spezifischste zuerst — VHost-Varianten vor der einfachen Form.
grok_patterns = [
"%{HOSTNAME:vh}:%{NUMBER:vport} %{COMBINED_LOG_FORMAT}",
"%{HOSTNAME:vh} %{COMBINED_LOG_FORMAT}",
"%{COMBINED_LOG_FORMAT}",
"%{COMMON_LOG_FORMAT}",
]
grok_timezone = "UTC"
# Kein Tag-Wildwuchs: nur das Noetige als Tag, der Rest als Feld.
[inputs.tail.tags]
source = "apache"
# --------------------------------------------------------------------------
# 3) mod_status (optional, auskommentiert)
# --------------------------------------------------------------------------
# Liefert Auslastung (BusyWorkers, ReqPerSec) — nuetzlich, braucht aber
# `a2enmod status`, `ExtendedStatus On` und eine lokale Freigabe von
# /server-status in der Apache-Config.
#
# [[inputs.apache]]
# urls = ["http://localhost/server-status?auto"]
# urls = ["http://127.0.0.1/server-status?auto"]