Kernel Loggin via UDP
Montag, Mai 8th, 2017Wir haben das Problem, dass wir Server haben die einfach Abstürzen ohne einem Meldung im /var/log/kernel.log zu hinterlassen. Wir haben nun das Kernel Loggin Modul „netconsole“ verwendet, um die Logzeilen direkt vom Kernel via UDP verschicken zu können.
Dafür würde auf Empfänger und Sender Seite folgendes eingerichtet.
Empfänger:
Möchte man das ganze nicht Reboot fest machen und für mehrere Ports/Server einrichten kann man auch einfach den socat Befehl von Hand ausführen. Hier wird nun beschreiben wie wir einen dynamischer Systemd Service verwenden.
/etc/systemd/system/netconsole@.service
[Unit] Description=netconsole After=network.target remote-fs.target nss-lookup.target PartOf=netconsole.service [Service] Type=simple Environment="LANG=C" ExecStart=/usr/bin/socat OPEN:/var/log/netconsole-%i,append udp4-listen:%i,reuseaddr,fork Restart=always [Install] WantedBy=multi-user.target
/etc/systemd/system/netconsole.service
[Unit] Description=netconsole Wants=netconsole@10001.service netconsole@10002.service [Service] RemainAfterExit=yes ExecStart=/bin/true [Install] WantedBy=multi-user.target
An dieser Stelle kann das der Punkt „Wants“ beliebig anpassen werden. Der Zahlen wert hinter dem @xxxx ist der übergebene Port.
Abschließend müssen das systemd noch aktiviert werden:
systemctl enable netconsole.service systemctl start netconsole.service systemctl status netconsole.service ● netconsole.service - netconsole Loaded: loaded (/etc/systemd/system/netconsole.service; enabled; vendor preset: enabled) Active: active (exited) since Mo 2017-05-08 10:54:23 CEST; 4s ago Process: 11124 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 11124 (code=exited, status=0/SUCCESS) Mai 08 10:54:23 server systemd[1]: Started netconsole.
Sender:
/etc/modprobe.d/netconsole.conf
options netconsole netconsole=10000@192.168.0.1/br0,10001@192.168.0.9/00:00:00:00:00
Dann kann das Kernel Modul geladen werden:
modprobe netconsole
Möchte man das ganze reboot fest machen, muss das Modul in /etc/modules
eingetragen werden:
echo "netconsole" >> /etc/modules
Zum Testen erzeugt folgender Befehl einen Eintrag im Kernel log, als auch auf dem Empfänger Server:
echo h > /proc/sysrq-trigger
Update 17.05.2017: für die Verwendung von CentOS7 wurde das Script von nc auf socat umgebaut.