Finden syslog-max-message-Länge
Den meisten Unix-Programmierer würden verwendet werden, um die Schnittstelle definiert, die von syslog.h
, und viele Implementierungen (wie glibc) haben keine wirkliche Grenze für die Größe der syslog-Nachricht gesendet wird, aber es ist in der Regel eine Begrenzung der Anwendung hören /dev/log
.
Frage ich mich, ob jemand weiß, einen Weg zu finden, der die maximale Nachrichtengröße für das syslog? Oder einige gute Dokumentation, was die Grenze eigentlich (oder meist) ist?
Edit:
So weit ich gefunden habe, diese RFCs zum Thema:
InformationsquelleAutor Petriborg | 2010-07-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beachten syslog ist ein Protokoll, das heißt, es setzt nur Mindeststandards und gibt Empfehlungen ab. Ich kann nicht finden, eine Quelle, aber ich glaube, dass die minimale Länge, die unterstützt werden sollen, ist 1k, mit 64k empfohlen wird.
Jede Implementierung ist frei zu tun, was Sie wollen, d.h. wenn Sie wollten, eine 16 MB maximal und schrieben ein syslog-server, du bist frei, das zu tun. Ich bin mir nicht sicher, warum Sie würde, aber Sie könnte.
Soweit ich weiß, gibt es keine standard -
programatic
Art und Weise der Feststellung dieser, so halten Sie Nachrichten bei knapp unter 1k wäre ideal für die Portabilität.Update
Benutzer MuMind angegeben in den Kommentaren, dass
rsyslog
abgeschnitten 2097 Zeichen, einschließlich log-Typ /Zeit-Stempel. Da es ein weit verwendet, Umsetzung des Protokolls, dies verstärkt, die Länge sollte möglichst zwischen 1k - 1,5 k für maximale Portabilität.Ehrlich, der einzige Grund zu überschreiten, wäre die zusätzliche debug-log /crash-Ausgang; es ist viel besser, dass irgendwo in
/var/log
statt, und deuten lediglich an, dass Sie das getan haben, wenn im Gespräch mit syslog (zugegeben, es gibt Szenarien, wenn Sie das nicht konnte, aber viele Bibliotheken haben 'best effort' logging eingebaut, um damit umzugehen).Natürlich sollte ich haben, klar, es ist ein RFC(s) über syslog - faqs.org/rfcs/rfc5426.html - faqs.org/rfcs/rfc3164.html So dass ich denke, dass werde tun
Ihre Umsetzung spezifische, aber keine standard-Mittel vorhanden sind, um festzustellen, die Grenze. Könnten Sie (vielleicht) zu schreiben beginnen, in vielfachen von 1k-Blöcken, bis syslog () - Fehler beim konfigurieren von Zeit, um es herauszufinden, aber das ist einfach nur eklig, Ihre logging-Routinen noch haben, um es zu brechen in Stücke, die noch eklig. Was können Sie nicht, senden von syslog - .. senden Sie einfach eine log-Datei und verweisen Sie im syslog? Ich kann nicht finden, einen Konsens auf, wenn eine Nachricht, die den Grenzwert überschreitet, wird abgeschnitten, oder einfach nur abgelehnt, entweder.
Auf meinem system mit rsyslog, sah ich Nachrichten abgeschnitten (bei 2097 Zeichen, einschließlich Zeitstempel) in /var/log/auth.log. Keine Ahnung, ob das mit der Garantie oder anderen Implementierungen die gleiche Arbeit.
BTW, ignoriert die führenden Zeitstempel und der hostname war es 2044 Zeichen.
InformationsquelleAutor Tim Post
Seit syslog ist ein Protokoll über UDP, in diesem Fall der Grenzwert ist die UDP-Datagramm-Größe minus ein paar bytes für den Header, die ist rund 65k.
Die /dev/log unix-domain-socket kann entweder ein stream-oder Datagramm-socket (SOCK_STREAM oder SOCK_DGRAM), im ersteren Fall die 64 Kb-limit nicht anwenden, aber es ist am besten zu betrachten, das UDP-Datagramm-Größe als der Grenzwert, wenn Sie nicht der Autor des Programms Lesen die Nachrichten.
InformationsquelleAutor b0ti
"Alte" Syslog -
Für die "alten" (RFC 3164) syslog die maximale Länge eines syslog-Datagramm-Nutzdaten (einschließlich der kodierten Priorität und timestamp) ist 1024 Bytes, pro Abschnitt 4.1 und es gibt keine Mindestlänge, aber leer syslog-Pakete verworfen werden sollen. Weiter, mehr Datagramme sollten niemals weitergegeben werden, da pro Abschnitt 6.1. (Relais müssen abgeschnitten-Pakete, wenn Sie hinzufügen von timestamp-Informationen, die erhöht die Länge; Abschnitt 4.3.2.)
Dieser ist sehr alt und niemand folgt mehr, aber es ist etwas im Auge zu behalten, wenn Sie arbeiten mit sehr alten Systemen.
"Modernen" Syslog
Modernen Systemen Folgen (mehr oder weniger) RFC 5424, wo in Abschnitt 6.1 es setzt die minimale Größe, dass jeder in der Lage sein müssen, behandeln zu 480 Bytes, deutet darauf hin, dass jeder in der Lage sein zu handhaben, die mindestens 2048 Bytes, und hat kein maximum.
Eine sehr Häufig verwendete transport ist UDP, definiert in RFC 5426, wo Abschnitt 3.2 geht ins detail über die Größe der Nachricht. Die maximal zulässige ist so groß, wie Sie können passen in ein Datagramm, dass man über das Netzwerk (die ein bisschen unter 64 Kb, je nachdem). Allerdings ist der Mindestbetrag erforderlich ist 480 Byte für IPv4 und vorzugsweise Systeme annehmen sollte mindestens 2048 Bytes. Es ist ein bisschen weitere Sachen über MTUs und ähnliches, aber so im Allgemeinen, wenn Sie nicht sicher über die Systeme, die Sie zu tun haben, werden Sie wahrscheinlich wollen, beschränken Sie die Größe, um unter dem niedrigsten MTU von Ihr Weg, wenn alle Header und dergleichen enthalten sind, die über 1300 Bytes wäre eine gute Vermutung, wenn du dir nicht sicher bist.
Ist das nur für UDP -, obwohl; über eine TLS-link Empfänger muss verarbeiten zu können, werden mindestens 2048 Oktett Nachrichten und vorzugsweise 8192 Bytes (RFC 5425 Abschnitt 4.3.1. Aber natürlich müssen Sie vorsichtig mit diesem, weil, wenn die Nachricht passiert, weitergeleitet werden, und über einen UDP-transport später, die UDP-Längen gelten.
Rsyslog
Rsyslog (sorry, Ranier, aber die "richtige" all-upper-case-form ist ablenkende) ist wohl der beliebteste syslog-daemon in diesen Tagen. (Auch Systeme mit systemd/journald noch verwenden rsyslogd für Netzwerk den Empfang und die übertragung von log-Meldungen im syslog-format.)
Rsyslog die Möglichkeit Hinzugefügt, um die maximale Nachrichtengröße, die in vielen Bereichen des Programms (die
maxMessageSize
Konfigurations-parameter) in der version 6.3.4 in 2011 und in dieser Zeit ist der default-Wert eingestellt war, 8096 Bytes, wo es geblieben seit.InformationsquelleAutor Curt J. Sampson