Als alter “syslog-ng” Nutzer tue ich mir immer wieder hart mit der Protokollierung durch “systemd”. Der Schlüssel-Befehl “journactl” ist mir natürlich präsent – aber welche Opionen muss ich dann wählen, um die Unzahl von Journal-Einträge nach solchen zu ganz bestimmten Services oder Kommandos zu filtern?
Den entscheidenden Tip für Dummies wie mich habe ich hier gefunden:
http://blog.delouw.ch/2013/07/24/why-journalctl-is-cool-and-syslog-will-survive-for-another-decade/
(Vielen Dank für den hilfreichen Blog-Artikel).
journactl hat eine Autocompletion-Funktionalität über die Tab-Taste:
Generelle Filter-Optionen erreicht man über
journalctl <TAB>[<TAB>]
Ggf. muss man die TAB-Taste 2-mal drücken.
mytux:~ # journalctl CODE_FILE= _KERNEL_DEVICE= CODE_FUNC= _KERNEL_SUBSYSTEM= CODE_LINE= _MACHINE_ID= COREDUMP_EXE= _PID= ERRNO= _SELINUX_CONTEXT= MESSAGE= _SOURCE_REALTIME_TIMESTAMP= MESSAGE_ID= _SYSTEMD_CGROUP= PRIORITY= _SYSTEMD_OWNER_UID= SYSLOG_FACILITY= _SYSTEMD_SESSION= SYSLOG_IDENTIFIER= _SYSTEMD_UNIT= SYSLOG_PID= _TRANSPORT= _AUDIT_LOGINUID= _UDEV_DEVLINK= _AUDIT_SESSION= _UDEV_DEVNODE= _BOOT_ID= _UDEV_SYSNAME= _CMDLINE= _UID= _COMM= __CURSOR= _EXE= __MONOTONIC_TIMESTAMP= _GID= __REALTIME_TIMESTAMP= _HOSTNAME=
Das ist doch schon sehr hilfreich. Da die meisten System-Services direkt zu irgendwelchen “systemd UNITs” korrespondieren, kommt man hier schon ein gutes Stück weiter. Beispiel:
mytux:~ # journalctl _SYSTEMD_UNIT=sshd.service -- Logs begin at Fri 2014-12-19 17:40:02 CET, end at Sun 2015-09-27 19:02:35 CEST. -- ...... -- Reboot -- Jan 24 10:49:37 mytux sshd-gen-keys-start[5942]: Checking for missing server keys in /etc/ssh Jan 24 10:49:37 mytux sshd[5947]: Server listening on 0.0.0.0 port 22. Jan 24 10:49:37 mytux sshd[5947]: Server listening on :: port 22. Jan 24 10:50:03 mytux sshd[5971]: Accepted keyboard-interactive/pam for root from xxx.xxx.xxx.xxx port 33032 ssh2 Jan 24 10:50:03 mytux sshd[5971]: pam_unix(sshd:session): session opened for user root by (uid=0) Jan 24 10:50:03 mytux sshd[6013]: Accepted keyboard-interactive/pam for root from xxx.xxx.xxx.xxx port 33033 ssh2 Jan 24 10:50:03 mytux sshd[6013]: pam_unix(sshd:session): session opened for user root by (uid=0) Jan 24 12:10:20 mytux sshd[13201]: Accepted keyboard-interactive/pam for root from xxx.xxx.xxx.xxx port 33310 ssh2 .......
Oder:
mytux:~ # journalctl _SYSTEMD_UNIT=vmware.service -- Logs begin at Fri 2014-12-19 17:40:02 CET, end at Sun 2015-09-27 19:07:41 CEST. -- Jan 03 09:31:07 mytux vmware[1475]: Starting VMware services: Jan 03 09:31:07 mytux vmware[1475]: [33B blob data] Jan 03 09:31:07 mytux vmware[1475]: [49B blob data] Jan 03 09:31:07 mytux vmware[1475]: [50B blob data] Jan 03 09:31:07 mytux vmware[1475]: [30B blob data] Jan 03 09:31:07 mytux vmnetBridge[1775]: Bridge process created. Jan 03 09:31:07 mytux vmnetBridge[1775]: RTM_NEWLINK: name:enp8s0 index:2 flags:0x00011043 Jan 03 09:31:07 mytux vmnetBridge[1775]: Adding interface enp8s0 index:2 Jan 03 09:31:07 mytux vmnetBridge[1775]: Started bridge enp8s0 to virtual network 0. .......
Erinnert man sich nicht mehr an laufende Services bzw. systemd-Units, so benutzt man die TAB-Taste erneut:
mytux:~ # journalctl _SYSTEMD_UNIT=<TAB>[<TAB>]
Display all 196 possibilities? (y or n)
Das Ganze geht auch für Optionen:
journalctl –<TAB>[<TAB>]
Also:
mytux:~ # journalctl -<TAB>[<TAB>] --all --system --boot --this-boot --cursor --unit --directory --until --disk-usage --update-catalog --field --user --file --user-unit --follow --verify --full --verify-key --header --version --help -D --interval -F --lines -a --list-boots -b --list-catalog -c --local -f --merge -h --new-id128 -l --no-pager -m --no-tail -n --output -o --priority -p --quiet -q --setup-keys -u --since
Wie so oft führen bzgl. eines bestimmten Dienstes bzw. eines korrespondierenden Kommandos mehrere Wege zum Ziel:
mytux:~ # journalctl _SYSTEMD_UNIT=sshd.service
oder
mytux:~ # journalctl -u sshd
oder
mytux:~ # journalctl –unit sshd
und
rux:~ # journalctl _COMM=sshd
führen zu sehr ähnlichen Outputs. Der letzte Befehl zeigt am meisten an.
“_COMM” steht dabei für “Command” – das ermöglicht natürlich sehr vielfältige Filtermöglichkeiten – je nach Logging-Einstellungen.
Nun kombiniert man den Filter für eine Unit oder ein Komamndo noch mit einer Zeiteinschränkung über die Optionen “–since” und “–until” und jeweiligen Zeitstempeln im Format „2015-06-30 10:13:16“ – und schon fühlt man sich als Admin bzgl. der Analyse etwas besser. Z.B.:
mytux:~ # journalctl -u sshd –since “2015-06-30” –until “today”
Fazit: Durch die Autocompletion-Funktionalität wird einem der Gewöhnungsprozess an “journalctl” doch erheblich erleichtert. Man muss es halt nur wissen – und irgendwann sitzen die Kommando-Optionen auch bei mir.
Links:
https://wiki.archlinux.org/index.php/Systemd
http://0pointer.de/blog/projects/journalctl.html
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/s1-Using_the_Journal.html
https://www.digitalocean.com/community/tutorials/how-to-use-journalctl-to-view-and-manipulate-systemd-logs