Empfangen von Syslog-Nachrichten mit einem systemd Arch Linux

25

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 systemdempfä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 syslogoder 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.

Bruce Ediger
quelle
systemd verwendet ein eigenes Protokoll . Es gibt auch metalog , das in den zentralen Arch-Repos verfügbar ist - ich persönlich verwende alle drei: syslog, systemd's journal und metalog. Überprüfen Sie das systemd-Journal. Wenn ich mich richtig erinnere, wurde syslog seit der Umstellung auf systemd so konfiguriert, dass alle Nachrichten und dergleichen an das Journal von systemd gesendet werden.
Alexej Magura

Antworten:

11

Mit socat können Sie ganz einfach den Syslog-Server eines armen Mannes schreiben . Sie brauchen nur eine Serviceeinheit wie diese:

[Service]
Restart=on-success
ExecStart=/usr/bin/socat -u UDP-RECV:514 STDOUT

Ü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.serviceund dann

# systemctl daemon-reload
# systemctl start syslog

Sie 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)

starfry
quelle
4
Gute Antwort. Ich habe ein schnelles Python-Skript verwendet, da ich socat nicht installieren konnte:import socket; sock = socket.socket(type=socket.SocketKind.SOCK_DGRAM); sock.bind(("0.0.0.0", 514)); while True: print(sock.recv(1024 * 1024))
awelkie
3

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)

   systemd-journald is a system service that collects and stores logging data.
   It creates and maintains structured, indexed journals based on logging
   information that is received from the kernel, from user processes via the
   libc syslog(3) call, from STDOUT/STDERR of system services or via its native
   API. It will implicitly collect numerous meta data fields for each log
   messages in a secure and unfakeable way. See systemd.journal-fields(7) for
   more information about the collected meta data.

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.

Brian Redbeard
quelle
2

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

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

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.

Robb W.
quelle
2

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

./rsyslog-journald-repeater -h
Usage of ./rsyslog-journald-repeater:
-debug
    debug flag
-host string
    hostname to listen on (default "0.0.0.0")
-port int
    port to listen on (default 5514 on darwin, default 514 on Linux, Unix, etc.)

Build-Dateien und Anweisungen zum Testen sowie Beispieldateien für System-Units sind im Projekt enthalten. Genießen!

RickHigh
quelle
0

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 Standardquelle system().

Wenn Sie sowohl die Journald- als auch die Syslog-Datei verwenden möchten, stellen Sie sicher, dass die folgenden Einstellungen wirksam sind. Für systemd-journald ist in der Datei /etc/systemd/journald.conf Storage = entweder auf auto oder unset (standardmäßig auto) und ForwardToSyslog = no oder unset (standardmäßig no) eingestellt. Für /etc/syslog-ng/syslog-ng.conf benötigen Sie die folgende Zeilengruppe:

 source src {
   system();
   internal();
 };

Wenn Sie dagegen nicht die Journald-Protokolle, sondern nur die Textprotokolle von syslog-ng behalten möchten, setzen Sie Storage=volatileund ForwardToSyslog=yesin /etc/systemd/journald.conf. Dadurch wird der Journald im RAM gespeichert. Ab syslog-ng 3.6.3 verwendet syslog-ng Journald als system()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.serviceund neu syslog-ng.service.

RickHigh
quelle