Ich habe das Gefühl, dass ich das Offensichtliche übersehen habe, aber ich kann nicht herausfinden, wie ich meinen Arch Linux-Server bekomme, der Nachrichten von einem Remote-System systemd
empfängt und protokolliert syslog
.
Ich habe ein Cisco 678 DSL-Modem und ein DD-WRT WAP. Beide können so konfiguriert werden, dass sie Nachrichten im Syslog-Format an einen anderen Computer senden. Ich möchte, dass diese Maschine mein Arch Linux-Server ist.
Ich habe herumgegoogelt, und alles, was ich finde, ist, dass "systemd syslog ersetzt" oder dass ich nicht mehr laufen muss syslog
oder etwas, das für meine Frage ebenso irrelevant ist.
AKTUALISIEREN
Ich habe in den Arch-Foren nachgefragt und keine relevanten Antworten erhalten. Ich habe syslog-ng installiert, um nur den UDP-Port 514 abzuhören. Syslog-ng schreibt Nachrichten von meinem Cisco 678 und einen DD-WRT-WAP, den ich habe. Leider landen die Nachrichten nicht im Journal von systemd, sondern in Einfachdateien. Also keine exakte Lösung, sondern eine Art Workaround. Ich möchte die Syslog-Nachrichten lieber im Journal haben, nicht in Einfachdateien.
quelle
Antworten:
Mit socat können Sie ganz einfach den Syslog-Server eines armen Mannes schreiben . Sie brauchen nur eine Serviceeinheit wie diese:
Über den Syslog-Service-Port empfangene Daten werden blind an das systemd-Journal gesendet. Speichern Sie das oben genannte wie, sagen wir,
/etc/systemd/system/syslog.service
und dannSie müssen dann nur noch Ihre Quelle angeben, um Nachrichten an den UDP-Port 514 Ihres Listening-Servers zu senden.
Möglicherweise möchten Sie dies verbessern, um die empfangenen Daten tatsächlich zu analysieren und zu formatieren. Es ist jedoch nicht erforderlich, dass Sie nur die empfangenen Daten protokollieren.
( Socat ist im Arch Linux Extra - Repository:
pacman -S socat
)quelle
import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
Hier ist also eine kleine Lücke.
Systemd unterstützt Remote-Messaging über die Systemd-Journal-Gateway-Komponente. Abgesehen davon sind diese Nachrichten nicht im Syslog-Format. Syslog (als Format) ist eine von der IETF ratifizierte Spezifikation, die in RFC 5424 dokumentiert ist (die die Vorgängerversion RFC 3164 veraltete).
Weitere Feinheiten, wie man diese gut zusammenspielen kann, sind hier dokumentiert:
http://www.freedesktop.org/wiki/Software/systemd/syslog/
und hier (man systemd-journald.service)
Stellen Sie zusammenfassend sicher, dass Nachrichten von syslog-ng an STDOUT gesendet werden und dass sie im Journal landen.
Als ich dies weiter verfolgte, fand ich dies auch:
https://github.com/intgr/pg_journal/blob/master/doc/pg_journal.md
Wo jemand eine Bindung von PostgreSQL an systemd zur Protokollierung schreibt. In diesem zitieren sie, dass derzeit (zum Zeitpunkt dieser Datei, 2013/06) mehrzeilige Nachrichten in systemd nicht unterstützt werden, achten Sie also auch darauf.
quelle
Ich kenne die Arch-Distribution nicht. Ich habe Fedora 20 (einschließlich systemd) und habe es so konfiguriert, dass es Remote-Syslog-Nachrichten akzeptiert.
IMHO, diese Funktionalität hat nichts mit systemd zu tun. Der systemd-journald.service fügt sich zwischen die Kernel- / Userspace-Programme und das Syslog-Subsystem ein. Es erfasst (glaube ich) nur die lokalen Nachrichten aus diesen Quellen in seiner Journaldatenbank und leitet sie dann an Syslog weiter. Siehe zum Beispiel "man systemd-journald.service" (zumindest auf Fedora).
In meinem Fall aktiviere ich dies, indem ich ein optionales "TCP-Syslog-Empfängermodul" in /etc/rsyslog.conf konfiguriere
Ein UDP-Modul ist ebenfalls verfügbar.
Es ist auch notwendig, (R) Syslog-Regeln hinzuzufügen, um die Ausgabe zu den gewünschten Dateien zu leiten. Eine vollständige Dokumentation finden Sie unter: http://www.rsyslog.com/doc/
HTH.
quelle
Ich habe syslog-ng installiert und konnte Syslog-Log-Meldungen empfangen. Aber ich wollte unbedingt Syslog-Log-Nachrichten erhalten und diese dann an Journald schreiben. Ich konnte syslog-ng nicht so konfigurieren, dass Remote-Syslog-Nachrichten an journald geschrieben werden.
Also schrieb ich ein Hilfsprogramm, um dies zu tun.
https://github.com/advantageous/rsyslog-journald-repeater
Build-Dateien und Anweisungen zum Testen sowie Beispieldateien für System-Units sind im Projekt enthalten. Genießen!
quelle
syslog-ng und systemd journal
Aus syslog-ng
Ab syslog-ng Version 3.6.1 verwendet die Standardquelle
system()
auf Linux-Systemen mit systemd Journald als Standardquellesystem()
.Wenn Sie dagegen nicht die Journald-Protokolle, sondern nur die Textprotokolle von syslog-ng behalten möchten, setzen Sie
Storage=volatile
undForwardToSyslog=yes
in/etc/systemd/journald.conf
. Dadurch wird der Journald im RAM gespeichert. Ab syslog-ng 3.6.3 verwendet syslog-ng Journald alssystem()
Quelle. Wenn Sie also Storage = none festlegen, löscht das systemd-Journal alle Nachrichten und leitet sie nicht an syslog-ng weiter.Nach der Änderung starten Sie die Daemons
systemd-journald.service
und neusyslog-ng.service
.quelle