Verwalte Log Messagen ënner Systemd mat Journalctl [Comprehensive Guide]
Systemd ass e modernste System a Servicemanager fir Linux Systemer: en Init Daemon Ersatz geduecht fir Prozesser parallel beim Systemboot ze starten. Et gëtt elo an enger Zuel vun aktuellen Mainstream Verdeelung ënnerstëtzt, dorënner Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, etc.
Virdrun hu mir d'Geschicht hannert 'init' an 'systemd' erkläert; wou mir diskutéiert hunn wat déi zwee Daemone sinn, firwat 'init' technesch ersat muss ginn duerch 'systemd' souwéi d'Haaptmerkmale vu systemd.
Ee vun den Haaptvirdeeler vu Systemd iwwer aner gemeinsam Init Systemer ass Ënnerstëtzung fir zentraliséiert Gestioun vu System a Prozesser Logbicher mat engem Journal. An dësem Artikel léiere mir wéi Dir Log Messagen ënner systemd verwalten a kuckt mat journalctl Kommando am Linux.
Wichteg: Ier Dir weider an dësem Guide plënnert, wëllt Dir vläicht léiere wéi Dir nei Service-Eenheeten an Systemd erstellt a leeft mat Shell-Skripten am Linux. Wéi och ëmmer, wann Dir an der Rei sidd mat all uewendriwwer, fuert weider duerch.
Journald konfiguréieren fir Log Messagen ënner Systemd ze sammelen
journald ass en Daemon, deen Journalen aus dem ganze System sammelt a schreift; dëst sinn am Wesentlechen Boot Messagen, Messagen vum Kernel a vu Syslog oder verschiddenen Uwendungen an et späichert all Messagen an enger zentraler Plaz - Journal Datei.
Dir kënnt d'Behuele vu journald iwwer seng Default Konfiguratiounsdatei kontrolléieren: /etc/systemd/journald.conf déi zur Kompiléierungszäit generéiert gëtt. Dëse Fichier enthält Optiounen deenen hir Wäerter Dir änneren kënnt fir Är lokal Ëmfeld Ufuerderunge ze passen.
Drënner ass e Probe vu wéi d'Datei ausgesäit, gekuckt mat dem Cat Kommando.
$ cat /etc/systemd/journald.conf
# See journald.conf(5) for details. [Journal] #Storage=auto #Compress=yes #Seal=yes #SplitMode=uid #SyncIntervalSec=5m #RateLimitInterval=30s #RateLimitBurst=1000 #SystemMaxUse= #SystemKeepFree= #SystemMaxFileSize= #SystemMaxFiles=100 #RuntimeMaxUse= #RuntimeKeepFree= #RuntimeMaxFileSize= #RuntimeMaxFiles=100 #MaxRetentionSec= #MaxFileSec=1month #ForwardToSyslog=yes #ForwardToKMsg=no #ForwardToConsole=no #ForwardToWall=yes #TTYPath=/dev/console #MaxLevelStore=debug #MaxLevelSyslog=debug #MaxLevelKMsg=notice #MaxLevelConsole=info #MaxLevelWall=emerg
Bedenkt datt verschidde Packagen installéiert a Konfiguratiounsextrakter an /usr/lib/systemd/*.conf.d/ benotzen an d'Zäitkonfiguratioune kënnen an /run/systemd/journald.conf.d/*.conf fonnt ginn, wat Dir vläicht net onbedéngt benotzen.
Eng Zuel vu Linux Verdeelungen inklusiv Ubuntu an hir Derivate wéi Linux Mint aktivéieren net persistent Späichere vu Bootmeldungen op der Disk par défaut.
Et ass méiglech dëst z'aktivéieren andeems Dir d'Optioun \Storage op \persistent setzt wéi hei ënnendrënner. Dëst wäert den/var/log/Journal Verzeechnes erstellen an all Journaldateien ginn ënner deem gespäichert.
$ sudo vi /etc/systemd/journald.conf OR $ sudo nano /etc/systemd/journald.conf
[Journal] Storage=persistent
Fir zousätzlech Astellungen, fannt Dir d'Bedeitung vun all Optiounen, déi solle konfiguréiert sinn an der Rubrik [Journal] andeems Dir tippt.
$ man journald.conf
Fir zouverlässeg Logverwaltung ënner systemd benotzt journald Service, sécherstellen datt d'Zäitastellunge mat abegraff d'Zäitzone am System korrekt sinn.
Fir déi aktuell Datum an Zäit Astellungen op Ärem System ze gesinn, Typ.
$ timedatectl OR $ timedatectl status Local time: Thu 2017-06-15 13:29:09 EAT Universal time: Thu 2017-06-15 10:29:09 UTC RTC time: Thu 2017-06-15 10:29:09 Time zone: Africa/Kampala (EAT, +0300) Network time on: yes NTP synchronized: yes RTC in local TZ: no
Fir déi richteg Zäitzone an eventuell Systemzäit ze setzen, benotzt d'Befehle hei ënnen.
$ sudo timedatectl set-timezone Africa/Kampala $ sudo timedatectl set-time “13:50:00”
journalctl ass en Utility dat benotzt gëtt fir den Inhalt vum systemd Journal ze gesinn (wat vum journald Service geschriwwe gëtt).
Fir all gesammelt Logbicher ouni Filter ze weisen, tippt.
$ journalctl
-- Logs begin at Wed 2017-06-14 21:56:43 EAT, end at Thu 2017-06-15 12:28:19 EAT Jun 14 21:56:43 tecmint systemd-journald[336]: Runtime journal (/run/log/journal Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuset Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpu Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuacct Jun 14 21:56:43 tecmint kernel: Linux version 4.4.0-21-generic ([email ) Jun 14 21:56:43 tecmint kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21- Jun 14 21:56:43 tecmint kernel: KERNEL supported cpus: Jun 14 21:56:43 tecmint kernel: Intel GenuineIntel Jun 14 21:56:43 tecmint kernel: AMD AuthenticAMD Jun 14 21:56:43 tecmint kernel: Centaur CentaurHauls Jun 14 21:56:43 tecmint kernel: x86/fpu: xstate_offset[2]: 576, xstate_sizes[2] Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x01: 'x87 flo Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x02: 'SSE reg Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x04: 'AVX reg Jun 14 21:56:43 tecmint kernel: x86/fpu: Enabled xstate features 0x7, context si Jun 14 21:56:43 tecmint kernel: x86/fpu: Using 'eager' FPU context switches. Jun 14 21:56:43 tecmint kernel: e820: BIOS-provided physical RAM map: Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000000 Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000090000-0x00000000000 Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000100000-0x000000001ff Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020000000-0x00000000201 Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020200000-0x00000000400
Dir kënnt mat der Optioun --list-boots
eng Lëscht mat Bootnummeren (relativ zum aktuellen Boot), hir IDen an d'Zäitstempele vun der éischter a leschter Noriicht entspriechend dem Boot weisen.
$ journalctl --list-boots -1 9fb590b48e1242f58c2579defdbbddc9 Thu 2017-06-15 16:43:36 EAT—Thu 2017-06-15 1 0 464ae35c6e264a4ca087949936be434a Thu 2017-06-15 16:47:36 EAT—Thu 2017-06-15 1
Fir d'Journal Entréen aus dem aktuellen Boot (Nummer 0) ze gesinn, benotzt den -b
Schalter esou (selwecht wéi d'Proufausgang hei uewen).
$ journalctl -b
a fir e Journal aus dem fréiere Boot ze gesinn, benotzt de -1
relative Pointer mat der -b
Optioun wéi hei ënnen.
$ journalctl -b -1
Alternativ benotzt d'Boot ID esou.
$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9
Fir Zäit am Coordinated Universal Time (UTC) Format ze benotzen, füügt d'--utc
Optiounen wéi follegt derbäi.
$ journalctl --utc
Fir all Entréen zënter engem bestëmmten Datum an Zäit ze gesinn, z.B. 15. Juni 2017 um 8:15 Auer, gitt dëse Kommando.
$ journalctl --since "2017-06-15 08:15:00" $ journalctl --since today $ journalctl --since yesterday
Fir rezent Logmeldungen ze gesinn (10 par défaut), benotzt de -n
Fändel wéi hei ënnendrënner.
$ journalctl -n $ journalctl -n 20
Fir nëmmen Kernel Messagen ze gesinn, ähnlech wéi den dmesg Kommando Output, kënnt Dir de -k
Fändel benotzen.
$ journalctl -k $ journalctl -k -b $ journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9
Fir all Journal Entréen fir eng bestëmmten Eenheet ze gesinn, benotzt de -u
Schalter wéi follegt.
$ journalctl -u apache2.service
Fir den aktuelle Boot ze null, gitt dëse Kommando.
$ journalctl -b -u apache2.service
Fir Logbicher vum fréiere Boot ze weisen, benotzt dëst.
$ journalctl -b -1 -u apache2.service
Drënner sinn e puer aner nëtzlech Kommandoen:
$ journalctl -u apache2.service $ journalctl -u apache2.service --since today $ journalctl -u apache2.service -u nagios.service --since yesterday
Fir Logbicher ze gesinn generéiert vun engem spezifesche Prozess, spezifizéiert et ass PID esou.
$ journalctl _PID=19487 $ journalctl _PID=19487 --since today $ journalctl _PID=19487 --since yesterday
Fir Logbicher ze gesinn, déi vun engem spezifesche Benotzer oder Grupp generéiert sinn, spezifizéieren d'Benotzer oder d'Grupp ID esou.
$ journalctl _UID=1000 $ journalctl _UID=1000 --since today $ journalctl _UID=1000 -b -1 --since today
Fir all Logbicher ze weisen, déi vun enger Datei generéiert ginn (méiglecherweis en ausführbar), wéi den D-Bus ausféierbaren oder bash ausführbaren, tippt einfach.
$ journalctl /usr/bin/dbus-daemon $ journalctl /usr/bin/bash
Dir kënnt och d'Ausgab filteren op Basis vu Messageprioritéiten oder Prioritéitsberäicher mam -p
Fändel. Déi méiglech Wäerter sinn: 0 – emerg, 1 – alert, 2 – crit, 3 – err, 4 – warning, 5 – notice, 6 – info, 7 – debug):
$ journalctl -p err
Fir e Beräich ze spezifizéieren, benotzt d'Format hei ënnen (entsteet op d'Warnung).
$ journalctl -p 1..4 OR $ journalctl -p emerg..warning
Dir kënnt praktesch Logbicher kucken wéi se mat der -f
-Optioun geschriwwe ginn (ähnlech wéi Schwanz -f Funktionalitéit).
$ journalctl -f
Wann Dir d'Ausgabformatéierung vun de Journalenträg kontrolléiere wëllt, füügt de -o
Fändel derbäi a benotzt dës Optiounen: cat, export, json, json-pretty, json-sse, short, short-iso, kuerz-monotonesch, kuerz-präzis a verbose (iwwerpréift d'Bedeitung vun den Optiounen op der Man-Säit:
D'Katzeoptioun weist den aktuellen Message vun all Journalentrée ouni Metadaten (Zäitstempel a sou weider).
$ journalctl -b -u apache2.service -o cat
Fir d'Journaldatei fir intern Konsistenz ze kontrolléieren, benotzt d'Optioun --verify
. Wann alles gutt ass, soll d'Ausgab e PASS uginn.
$ journalctl --verify PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal 491f68: Unused data (entry_offset==0) PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 9866c3d4d.journal PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 5d8945a9e.journal PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 1becab02f.journal PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 01cfcedff.journal
Dir kënnt och déi aktuell Diskussioun vun all Journaldateien mat den --disk-usage
Optiounen weisen. Et weist d'Zomm vun der Diskverbrauch vun all archivéierten an aktive Journaldateien:
$ journalctl --disk-usage
Fir al (archivéiert) Journaldateien ze läschen, lafen d'Befehle hei ënnen:
$ sudo journalctl --vacuum-size=50M #delete files until the disk space they use falls below the specified size $ sudo journalctl --vacuum-time=1years #delete files so that all journal files contain no data older than the specified timespan $ sudo journalctl --vacuum-files=4 #delete files so that no more than the specified number of separate journal files remain in storage location
Lescht awer net zulescht, kënnt Dir Journald instruéieren Journaldateien mat der Optioun --rotate
ze rotéieren. Notéiert datt dës Direktiv net zréckkënnt bis d'Rotatiounsoperatioun fäerdeg ass:
$ sudo journalctl --rotate
Fir en am-Déift Benotzungsguide an Optiounen, kuckt d'journalctl Man Säit wéi follegt.
$ man journalctl
Kuckt e puer nëtzlech Artikelen.
- Gestioun vum System Startup Prozess a Servicer (SysVinit, Systemd an Upstart)
- Petiti - En Open Source Log Analyse Tool fir Linux SysAdmins
- Wéi konfiguréieren a verwalten Logrotatioun mat Logrotate a Linux
- lnav - Apache Logbicher vun engem Linux Terminal kucken an analyséieren
Dat ass et fir elo. Benotzt de Feedback vun ënnen fir Froen ze stellen oder Är Gedanken iwwer dëst Thema ze addéieren.