rsyslog – wie kann ich Regelsätze nach Zeileninhalten markieren und anwenden?

rsyslog – wie kann ich Regelsätze nach Zeileninhalten markieren und anwenden?

Ich räume auf und standardisiere unsere Protokollverwaltung, indem ich fluentd und ELK hinzufüge. Dieser Teil funktioniert gut, da nginx in seine eigene Datei protokolliert:

input(type="imfile" tag="app.nginx" file="/var/log/nginx/access.log" ruleset="fluentd")

Andere Komponenten der App, z. B. der Python-Prozess, melden sich jedoch /var/log/syslogmit Protokollnachrichten an, die mit beginnen [flask]. Ich möchte /var/log/syslogNachrichten mit filtern [flask], sie mit markieren app.flaskund den fluentdRegelsatz anwenden.

Ich könnte jeden Dienst so konfigurieren, dass er in seine eigene Datei protokolliert, wie z. B. nginx, aber ich möchte Änderungen an der systemd-Konfiguration möglichst vermeiden.

Antwort1

Ich habe dieses Problem letztendlich dadurch gelöst, dass ich die Nachrichten an eine bestimmte Protokolldatei umgeleitet und inputihr dann einen Verweis hinzugefügt habe.

if $rawmsg contains "[flask]" then /var/log/flask.log

input(type="imfile" tag="app.flask" file="/var/log/flask.log" ruleset="fluentd")

Wenn es eine Möglichkeit gibt, dies zu tun, ohne auf eine andere Datei umzuleiten, würde ich es trotzdem gerne wissen.

verwandte Informationen