Die Weiterleitung von rsyslog udp wird bei 2048 Zeichen abgeschnitten

7

Rsyslog auf einem RHEL 6-Server empfängt Nachrichten lokal auf Port 514 UDP. Diese Nachrichten sind manchmal viel größer als normale Syslog-Nachrichten. Ich sehe, dass rsyslog alle Nachrichten einwandfrei verarbeitet und ohne Probleme in die lokalen Dateien schreibt. Wenn ich jedoch einen Remote-Host zur rsyslog-Konfiguration hinzufüge, werden dieselben großen Nachrichten mit etwa 2048 Zeichen abgeschnitten.

Ich verwende rsyslogd Version: 5.8.10

rsyslogd 5.8.10, compiled with:
  FEATURE_REGEXP:               Yes
  FEATURE_LARGEFILE:            No
  GSSAPI Kerberos 5 support:        Yes
  FEATURE_DEBUG (debug build, slow code):   No
  32bit Atomic operations supported:    Yes
  64bit Atomic operations supported:    Yes
  Runtime Instrumentation (slow code):  No

Die einzigen Änderungen, die ich an rsyslog conf vorgenommen habe, sind die folgenden zwei:

Dies ist ganz oben in meiner rsyslog conf-Datei:

 $MaxMessageSize 64k

Dies ist ganz unten in meiner rsyslog conf-Datei:

$template RemoteHost,"<%%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%
*.* @my-rsyslog-central-logger:514; RemoteHost

Weiß jemand, warum rsyslog Protokolle über UDP auf dem Remote-Host abschneidet, aber in der Lage ist, die Protokolle beim Schreiben in die lokalen Dateien zu verarbeiten?

** Hinweis: Ich habe überprüft, ob es auf dem Remote-rsyslog-Host nicht passiert ist, indem ich mit netcat einen lokalen Port abgehört habe, an den rsyslog über UDP weitergeleitet hat.

** Hinweis: Ich habe TCP ausprobiert und die große weitergeleitete Nachricht wurde nicht abgeschnitten. Daher stellt sich jetzt die Frage, warum UDP abgeschnitten wird. (Ich gehe davon aus, dass die Antwort möglicherweise mit den Eigenschaften von UDP zusammenhängt, möchte sie aber dennoch wissen und möglicherweise nach Möglichkeit für UDP-weitergeleitete Nachrichten beheben.)

nictrix
quelle

Antworten:

4

UDP hat keine Sequenznummern, es gibt keine Möglichkeit, Nachrichten kohärent zu kombinieren (wenn sie nicht in der richtigen Reihenfolge ankommen).

Syslog UDP Transport - http://tools.ietf.org/html/rfc5426

3.1. Eine Nachricht pro Datagramm

Jedes Syslog-UDP-Datagramm MUSS nur eine Syslog-Nachricht enthalten, die möglicherweise vollständig oder abgeschnitten ist. Die Nachricht MUSS gemäß RFC 5424 [2] formatiert und abgeschnitten werden. Zusätzliche Daten dürfen NICHT in der Datagramm-Nutzlast vorhanden sein.

Jeff Warnica
quelle
Danke, das habe ich mir gedacht, wollte aber sehen, ob es eine Möglichkeit gibt, die Pakete nicht zu fragmentieren. Ich denke, die bessere Antwort ist der Abschnitt hier: tools.ietf.org/html/rfc5426#section-3.2 - hier geht es um die tatsächliche Größe des Pakets, das basierend auf Empfehlungen des RFC erfolgreich gesendet wird. Mit anderen Worten, beenden Sie die Verwendung von UDP für Syslog-Nachrichten, die über das Kabel gesendet werden. (Ich glaube jedoch, dass es immer noch einen Fall gibt, UDP lokal auf einem Server zu verwenden)
nictrix
Wenn es der lokale Server ist, verwenden Sie einfach Sockets (/ dev / log)
Jeff Warnica
Ahh ja gute Idee
Nictrix
Wie sind Sie dazu gekommen, große Syslog-Nachrichten drahtlos zu senden? Ich habe TCP ausprobiert und war auch erfolglos.
Chris F
Hast du es geschafft? Ich versuche das auch ohne Glück.
Ramadheer Singh