Wir haben ungefähr 9-10 Appliances, für die wir die Protokollierung an unseren rsyslog-Server leiten möchten. Es gibt jedoch nur 8 lokale Einrichtungen (0-7). Wie können wir diese Einschränkung umgehen?
Wir haben ungefähr 9-10 Appliances, für die wir die Protokollierung an unseren rsyslog-Server leiten möchten. Es gibt jedoch nur 8 lokale Einrichtungen (0-7). Wie können wir diese Einschränkung umgehen?
Antworten:
Protokollieren Sie den Anwendungsnamen in Ihren Nachrichten. Filtern Sie nach dem Anwendungsnamen anstelle der Einrichtung. Wenn Ihre Anwendungen keine Syslog-Nachrichten direkt generieren, können Sie einen Ausgabefilter (z. B. sed
) anwenden, um Dinge so zu massieren, dass sie so aussehen, wie Sie es möchten.
Sehen Sie sich die Rsyslog-Dokumentation zu Filterbedingungen an, um zu sehen, wie Sie dieses Verhalten konfigurieren können. Basierend auf den Informationen auf dieser Seite finden Sie hier ein Beispiel dafür, wie Sie Nachrichten, die mit der Zeichenfolge "application1" beginnen, in Folgendes einfügen können /var/log/application1
:
if $msg startswith 'application1' then /var/log/application1
Sie können auch explizit nach dem Programmnamen filtern , wenn Ihre Anwendung dies richtig einstellt:
if $programname == 'application1' then /var/log/application1
Sie können alle Arten von komplexen Filtern in Ihrem durchführen rsyslog.conf
; Weitere Informationen und Beispiele finden Sie in der Dokumentation.
BEARBEITEN: rsyslog
Kann Vorlagen verwenden, um separate Dateien für jeden Server zu erstellen. So etwas wie das Folgende sollte alle Protokollnachrichten für jeden Hostnamen in separaten Dateien ablegen. (Dies wird von der Manpage entfernt.)
$template DynFile,"/var/log/system-%HOSTNAME%.log
*.* ?DynFile
Das Folgende ist ähnlich, protokolliert jedoch keine Debug-Meldungen. Es wird auch der Hostname der Verbindung anstelle des Hostnamens der Nachricht verwendet. (Dies basiert auf dem, was ich entwickelt habe, um die Ausgabe eines Obi100 zu protokollieren.)
$template HostFormat,"%timegenerated% %fromhost% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$template HostFile,"/var/log/system-%fromhost%.log
if $syslogseverity < 7 then -HostFile;HostFormat
Lesen Sie die Manpage und die Dokumentation, wenn Sie komplexere Anforderungen haben oder verstehen möchten, was die oben genannten tun.
Nach Hostnamen filtern. (Jede Appliance sollte einen eigenen Hostnamen haben.) Wenn Sie möchten, können Sie mehrere Ports abhören und jeden Port separat behandeln.
Die Funktionen sind für die Verarbeitung von Nachrichtenkategorien wie Autorisierung, E-Mail, Drucker, FTP usw. ausgelegt. Da UUCP nicht mehr häufig verwendet wird, können Sie es wahrscheinlich für Ihre eigenen Zwecke verwenden. Dies können andere nicht verwendete Funktionen in Ihrer Konfiguration sein. Es ist jedoch besser, Standardwerte für Einrichtungen zu verwenden und nach anderen Daten zu filtern.
Es gibt 24 Einrichtungen, da es sich um Namen für Bits in einer Bitmaske handelt. Dadurch werden beliebige Sätze von Einrichtungen in demselben Protokoll zusammengefasst. Das Protokoll ist in RFC 5424 angegeben .
Das andere Feld ist der Schweregrad. Normalerweise enthalten Protokolle alle Protokolle mit oder über einem bestimmten Schweregrad. (Strengere Prioritäten haben niedrigere Werte, sodass der normale Vergleich kleiner oder gleich der ausgewählten Priorität ist.) Es können jedoch Nachrichten einer bestimmten Einrichtung ausgewählt werden, wie dies häufig für das Debug-Protokoll der Fall ist, das Debug-Nachrichten für alle Einrichtungen sammelt.
Möglicherweise möchten Sie Daten für einige Einrichtungen unabhängig von der ursprünglichen Appliance im selben Protokoll zusammenfassen. Es ist üblich, dieselbe Nachricht in mehreren Protokolldateien zu protokollieren.