rsyslogd: Wie kann man die Anzahl der lokalen Einrichtungen umgehen?

7

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?

Belmin Fernandez
quelle

Antworten:

12

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: rsyslogKann 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.

Larsks
quelle
Wie konfigurieren Sie dies in rsyslog.conf?
Belmin Fernandez
Was genau möchten Sie konfigurieren? Ich bin mir nicht einmal sicher, ob ich Ihre Frage beantwortet habe, da Sie nicht für jede Anwendung eine andere Funktion benötigen, es sei denn, Sie möchten die Nachrichten von jeder Anwendung in einer separaten Protokolldatei ablegen ... aber dies ist nur sinnvoll Verwenden Sie dazu Syslog, wenn Sie sie remote senden. Andernfalls können Sie die Ausgabe unserer Anwendung auch direkt in eine Datei leiten. Vielleicht können Sie genau erläutern, was Sie versuchen zu tun?
Larsks
Sie werden aus der Ferne gesendet. Die Appliances senden es an einen rsyslog-Server. Ich möchte die Daten in separate Protokolldateien leiten.
Belmin Fernandez
3

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.

BillThor
quelle
RFC 5424 definiert 24 Einrichtungen.
Adaptr
@adaptr: Hat eine grobe Zählung von einer Manpage durchgeführt, anstatt den RFC zu überprüfen. Eine genaue Ansicht des RFC zeigt nur 20 eindeutige Zwecke aufgrund der Verwendung mehrerer Einrichtungsbits für Takt- und Authentifizierungsnachrichten.
BillThor
Wie sie in der Praxis verwendet werden, ändert nichts daran, dass das Protokoll auf 192 eindeutige Werte beschränkt ist. Wenn Sie DAS verletzen, wird es kein Syslog mehr sein.
Adaptr
@adaptr: Wenn das Facility-Bit in der Umgebung nicht verwendet wird, kann es ohne Kollision für einen nicht standardmäßigen Zweck verwendet werden. Ich empfehle es nicht, aber es ist möglich.
BillThor
Ich stimme zu, aber es ist ein großes Wenn.
Adaptr