18. Oktober 2020, 12:20

Conditional Logging im Apache

Dieses Wochenende prüfe ich aktuell den Apache-Exporter1 und wie sinnvoll dieser sich in meinem Prometheus2 Monitoring integrieren lässt. Die ständigen Server-Status Abfragen führen zwangsläufig zu mehr “Hintergrundrauschen” in den Logdateien. Im Screenshot wird das im less im oberen Abschnitt gut sichtbar:

Screenshot

Die Aufrufe lassen sich nicht verhindern, wohl aber was ein Apache in seine Logs schreibt. Conditional Logging nennt sich das Ganze und ermöglicht einer Ressource mit SetEnvIf3 eine Variable anhand eines passenden Regex setzen zu können. Mit SetEnvIfExpr sind sogar logische Abfragen4 möglich, ob zum Beispiel ein Aufruf aus einem internen Segment kommt:

SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" isInternal

In meinem Fall habe ich auf alle Server-Status Abrufe die Variable “dontlog” gesetzt und schliesse diese im Logging explizit aus:

SetEnvIf Request_URI "^/server-status(.*)$" dontlog
CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined env=!dontlog

Weitergehende Regex-Abfragen z.B. nach bestimmten Dateierweiterungen sind auch möglich. Das alles ist aber mit Vorsicht anzuwenden. Schliesslich machen zu viele Ausnahmen ein üblicherweise präzises Instrument zur Fehlersuche stumpf. Traue keinem Log, das nicht von Dir selbst kommt!


  1. https://github.com/Lusitaniae/apache_exporter ↩︎

  2. https://prometheus.io/ ↩︎

  3. https://httpd.apache.org/docs/2.4/mod/mod_setenvif.html ↩︎

  4. https://httpd.apache.org/docs/2.4/expr.html ↩︎

© 2020 Tomas Jakobs - Impressum und Datenschutzhinweis