GNU/Linux >> Znalost Linux >  >> Linux

Použití žurnálů systemd k řešení přechodných problémů

Odhalování problémů může být stejně umění jako věda a někdy se zdá, že i trocha magie může být užitečná. Každý se setkal se situacemi, kdy nebylo možné nahlášenou poruchu reprodukovat, což je vždy frustrující pro uživatele i správce systému. Dokonce i domácí spotřebiče a automobily mohou být tvrdohlavé a odmítají selhat, když se objeví servisní technik.

Pomineme-li antropomorfismus, systémoví správci mají některé nástroje, které mohou s různou mírou granularity ukázat, co se děje na jejich počítačích s Linuxem. Existují nástroje jako top, htop, looks, sar, iotop, tcpdump, traceroute, mtr, iptraf-ng, df, du a mnoho dalších, z nichž všechny mohou zobrazit aktuální stav hostitele a některé z nich mohou vytvářet protokoly. různých úrovní detailů.

I když lze tyto nástroje použít k nalezení přetrvávajících problémů, nejsou zvláště užitečné u přechodných problémů nebo u těch, u kterých nejsou žádné přímo pozorovatelné příznaky – alespoň ne pozorovatelné, dokud nenastane nějaký velký a možná katastrofický problém.

Důležitým nástrojem, který používám k určování problémů, jsou systémové protokoly – a u systemd systémové deníky. Systemd journal je vždy jedním z prvních nástrojů, na které se obracím při řešení problému, zejména problémů, které se při sledování zdánlivě nestávají. Na začátku mé kariéry systémového administrátora mi trvalo dlouho, než jsem si uvědomil množství informací v souborech protokolu, a tento objev mi výrazně zvýšil rychlost při řešení problémů.

Již jste viděli některá použití journalctl příkaz v mnoha předchozích článcích této série. V tomto článku prozkoumám některé podrobnosti o deníku systemd, jak funguje a jak používat journalctl k lokalizaci a identifikaci problémů.

O časopisech

Účelem jakéhokoli protokolu nebo žurnálu je udržovat časově uspořádanou historii běžných aktivit služeb a programů, které běží na hostiteli, a zaznamenávat jakékoli chyby nebo varovné zprávy, které se vyskytnou. Zprávy protokolu bývaly udržovány v samostatných souborech v /var/log , obvykle jeden soubor pro jádro a samostatné soubory pro většinu služeb běžících na hostiteli. Bohužel velké množství souborů protokolu by mohlo rozšířit potřebné informace a zpozdit odhalení hlavní příčiny problému. To může být zvláště časově náročné, když se snažíte zjistit, co se dělo v systému, když došlo k chybě.

Starý /var/log/dmesg soubor byl obvykle používán pro jádro, ale tento soubor byl před několika lety ukončen ve prospěch použití dmesg příkaz k zobrazení stejných informací a integraci těchto zpráv (a dalších) do /var/log/messages soubor. Toto sloučení dalších protokolů do zpráv soubor pomohl urychlit určování problému tím, že většinu dat uchovával v jednom souboru, ale stále existovalo mnoho služeb, jejichž protokoly nebyly integrovány do centrálnějších zpráv soubor.

Systemd journal je navržen tak, aby shromažďoval všechny zprávy do jediné jednotné struktury, která může ukázat úplný obraz o všem, co se stalo v systému v určitém čase nebo události a kolem nich. Protože události, bez ohledu na zdroj, jsou na jednom místě a v časové posloupnosti, je možné na první pohled vidět vše, co se děje v konkrétním bodě nebo časovém rozmezí. Podle mého názoru je to jedna z hlavních výhod systemd journalingu.

O deníku systemd

Služba žurnálování systemd je implementována pomocí systemd-journald démon. Podle systemd-journald manuálová stránka:

systemd-journald je systémová služba, která shromažďuje a ukládá data protokolování. Vytváří a spravuje strukturované, indexované časopisy založené na protokolování informací, které jsou přijímány z různých zdrojů:

  • Zprávy protokolu jádra prostřednictvím kmsg
  • Jednoduché zprávy systémového protokolu prostřednictvím libc syslog(3) zavolat
  • Strukturované zprávy systémového protokolu prostřednictvím nativního rozhraní Journal API, viz sd_journal_print(3)
  • Standardní výstup a standardní chyba servisních jednotek. Další podrobnosti viz níže.
  • Záznamy auditu pocházející ze subsystému auditu jádra

Démon bude implicitně shromažďovat četná pole metadat pro každou zprávu protokolu bezpečným a nefalšovatelným způsobem. Viz systemd.journal-fields(7) pro více informací o shromážděných metadatech.

Data protokolu shromážděná časopisem jsou primárně textová, ale v případě potřeby mohou zahrnovat také binární data. Jednotlivá pole tvořící záznam protokolu uložená v deníku mohou mít velikost až 2^64-1 bajtů.

Změny konfigurace

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Démon žurnálu systemd lze nakonfigurovat pomocí /etc/systemd/journald.conf soubor. Pro mnoho hostitelů tento soubor nepotřebuje žádné změny, protože výchozí hodnoty jsou docela rozumné. Podívejte se na svůj journald.conf soubor nyní, pokud jste tak již neučinili.

Nejběžnější změny konfigurace, o kterých byste mohli uvažovat, by určovaly maximální velikost souboru deníku, počet starších souborů deníku a maximální doby uchovávání souborů. Primárním důvodem k provedení těchto změn by bylo snížení úložného prostoru používaného žurnálem, pokud máte malé úložné zařízení. V kritickém prostředí můžete také chtít zkrátit dobu mezi synchronizací dat žurnálu uložených v paměti RAM do úložného zařízení.

Soubor journald.conf manuálová stránka obsahuje více podrobností.

Kontroverze ohledně formátu dat

Jednou z kontroverzí kolem systemd je binární formát, ve kterém je uložen obsah žurnálu. Některé argumenty proti systemd jsou založeny na tom, že žurnál systemd je uložen v binárním formátu. Zdá se, že je to v rozporu s filozofií Unix/Linux používat pro data text ASCII, což je jeden argument, který lidé používají k ospravedlnění své nechuti k systemd. Například Doug McIlroy, vynálezce dýmek, řekl:

"Toto je filozofie Unixu:Pište programy, které dělají jednu věc dobře. Pište programy, které budou spolupracovat. Pište programy pro práci s textem, protože to je univerzální rozhraní." —Doug McIlroy, citovaný v knize Erica S. Raymonda The Art of Unix Programming

Zdá se však, že tyto argumenty jsou založeny alespoň na částečné mylné představě, protože manuálová stránka jasně uvádí, že data „jsou primárně založena na textu“, ačkoli umožňuje binární datové formy. Tvůrce linuxového jádra Linus Torvalds, který má vždy jasno ve svých pocitech, řekl:

"Ve skutečnosti nemám žádné zvlášť vyhraněné názory na samotný systemd. Měl jsem problémy s některými základními vývojáři, o kterých si myslím, že jsou příliš lstiví ohledně chyb a kompatibility, a myslím si, že některé detaily návrhu jsou šílené (I nelíbí se mi například binární protokoly), ale to jsou detaily, nikoli velké problémy." —Linus Torvalds, citovaný v ZDNet „Linus Torvalds and others on Linux's systemd“ v roce 2014

Soubory deníku systemd jsou uloženy v jednom nebo více podadresářích /var/log/journal . Přihlaste se do testovacího systému, kde máte root přístup, a vytvořte /var/log/journal současný pracovní adresář (PWD). Vypište tam podadresáře, vyberte jeden a udělejte z něj PWD. Na tyto soubory se můžete podívat několika způsoby. Začal jsem se stat příkaz (všimněte si, že názvy souborů deníku na vašem hostiteli se budou lišit od mých):

 [root @ testvm1 3bccd1140fca488187f8a1439c832f07] # stat system@7ed846aadf1743139083681ec4042037-0000000000000001-0005a99c0280fd5f.journal 
Soubor:system@7ed846aadf1743139083681ec4042037-0000000000000001-0005a99c0280fd5f.journal
Velikost:8388608 bloky:16392 IO Blok:4096 pravidelné soubor
Zařízení:fd04h/64772d    Inode:524384      Odkazy:1
Přístup:(0640/-rw-r-----)  Uid:(    0/   j  root) 1 Gid 0/system:( 0 )
Přístup:2020-07-13 08:30:05.764291231 -0400
Změnit:2020-07-04 07:33:52.916001110 -0400
 Narození:-
[root@testvm1 3bccd1140fca488187f8a1439c832f07]#

Soubor deníku je identifikován jako „běžný“ soubor, což není nijak zvlášť užitečné. soubor příkaz jej identifikuje jako soubor "žurnálu", ale to už víte. Podívejte se dovnitř souboru s dd příkaz. Následující příkaz odešle výstupní datový tok do STDOUT; možná to budete chtít protáhnout přes méně pager:

[root@testvm1 3bccd1140fca488187f8a1439c832f07]# dd if=system@7ed846aadf1743139083681ec4042037-00000000000000059a.000000059a.08 méně

9�P1�8��9_SOURCE_MONOTONIC_TIMESTAMP=191726���/��P����9MESSAGE=Inode-cache hash table entries:191726���/��P����9MESSAGE=Inode-cache hash table entries:191726 der , lineární)�hx
9�P1�p�9��/��P�b������9��9_SOURCE_MONOTONIC_TIMESTAMP=191825�9MpdX :stack:off, heap alloc:off, heap free:off�i��
��(n�O���@Y�    �����Zս���82�X� �������8��DZR�����8<~B�4�<� �8tM˞8$����8���8��Ph9 �����`@�9�pdXY�7b�ͺ��WV��9��9_SOURCE_MONOTONIC_TIM
ESTAMP=234745��4K/49KM500034745��4K29K18 k dispozici (14339K kód jádra, 2406K rwdata, 8164K rodata, 2468K init, 5072K b
ss, 365356K rezervováno, 0K cma-rezervováno)�j������������(n��� �]��m�82���7X�8�������8��DZR�����8<~B�4���8 O ���9��9MESSAGE=random:get_random_u64 voláno z __kmem_cache_create+0x3e/0x610 wi
th crng_init=0�k���(n��y���(n��Y��O�Y��O ���82���7X��8C�X�Y“��8����������8���R����$ 48b�(+I)�x�9�9_SOURCE_MONOTONIC_TIMESTAMP=2354444r =Izolace tabulek stránek jádra/uživatele:povolena�m����(n�O���@Y�     ����k��B0��8
2�X��� ����8��DZR�����8<~B�4�<� �8tM˞8$����8��Ж���+h9����+h9� I)Ҡ�9�%/pb8O{ W���8�9��9_SOURCE_MONOTONIC_TIMESTAMP=235464u�N`�FP    M��9 položek
�36 stránek za 16 milionů ����(n�O���@Y�

I tato malá část datového toku z dd ukazuje zajímavou směs ASCII textu a binárních dat. Dalším užitečným nástrojem jsou řetězce příkaz, který jednoduše zobrazí všechny textové řetězce ASCII obsažené v souboru a ignoruje binární data:

 [root @ testvm1 3bccd1140fca488187f8a1439c832f07] # řetězce system@7ed846aadf1743139083681ec4042037-0000000000000001-0005a99c0280fd5f.journal 

MESSAGE =Linux verze 5.7.6-201.fc32.x86_64 ([email protected] .fedoraproject.org) (gcc verze 10.1.1 20200507 (Red Hat 10.1.1-1) (GC
C), GNU ld verze 2.34-3.fc32) #1 SMP Po 29. června 15:15:52 UTC 2020
ZPRÁVA
_BOOT_ID=6e944f99ebd9405984090f829a927fa4
_BOOT_ID
_MACHINE_ID=3bccd1140fca488187fc8a2brIDfNAME.
HOST7 /1439_test.>PRIORITY=6
MESSAGE=Příkazový řádek:BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.7.6-201.fc32.x86_64 root=/dev/mapper/VG01-root ro restore=/dev/mapper/ VG01-swap rd.lv
m.lv=VG01/root rd.lvm.lv=VG01/swap rd.lvm.lv=VG01/usr selinux=0
MESSAGE=x86/fpu:Podpora XSAVE vlastnost 0x001:'x87 registry s plovoucí desetinnou čárkou'
MESSAGE=x86/fpu:Podpora funkce XSAVE 0x002:'SSE registry'
MESSAGE=x86/fpu:Podpora funkce XSAVE 0x00 4:'AVX registry'
Z_g3;
MESSAGE=x86/fpu:xstate_offset[2]:576, xstate_sizes[2]: 256
Z_g3;
MESSAGE=x86/fpu :Povolené funkce xstate 0x7, velikost kontextu je 832 bajtů, používá se „standardní“ formát.
MESSAGE=Mapa fyzické paměti RAM poskytnutá systémem BIOS:
`k2X
MESSAGE=BIOS-e820:[mem 0x0000000000000000 -0x00000000000009FBFF] Použitelný
Zpráva =BIOS-E820:[MEM 0x00000000000009FC00-0x0000000000000009FFFFFF] Vyhrazeno
Zpráva =BIOS-E820:[MEM 0x00000000000000F0000-0x000000000000FFFFFF] Vyhrazeno
Pylm
Zpráva =BIOS -E820:[MEM 0x0000000000100000-0x0000000000DFFFFFFFF] Použitelné
Zpráva =BIOS-E820:[MEM 0x0000000000dFFFFFFF] ACPI data
Zpráva =BIOS-E820:[MEM 0x0000000000FEC00000-0x00000000FEC00FFF] Vyhrazeno
Zpráva =BIOS-E820:[mem 0x00000000fee00000-0x00000000fee00fff] vyhrazené
MESSAGE =BIOS-E820:[mem 0x00000000fffc0000-0x00000000ffffffff] vyhrazené
MESSAGE =BIOS-E820:[mem 0x0000000100000000-0x00000003373fffff] použitelné

Tato data mohou být interpretována lidmi a tento konkrétní segment vypadá velmi podobně jako výstupní datový proud z dmesg příkaz. Nechám vás, abyste to prozkoumali sami, ale můj závěr je, že soubory deníku jsou zjevně směsí binárního a ASCII textu. Díky této kombinaci je použití tradičních textových nástrojů Linuxu k extrahování použitelných dat těžkopádné. Existuje však lepší způsob, který poskytuje mnoho možností pro extrahování a prohlížení dat deníku.

O journalctl

journalctl je navržen tak, aby extrahoval použitelné informace z žurnálů systemd pomocí výkonných a flexibilních kritérií pro identifikaci požadovaných dat. Předchozí články této série popisovaly journalctl , a je toho ještě co vědět.

Nejprve trochu zopakuji a začnu s některými základy pro případ, že jste nečetli předchozí články nebo si jen potřebujete zopakovat.

Můžete použít journalctl příkaz bez jakýchkoli voleb nebo argumentů pro zobrazení žurnálu systemd, který obsahuje všechny informace žurnálu a protokolu:

[root@testvm1 ~]# journalctl
-- Záznamy začínají v Po 2020-06-08 07:47:20 EDT, končí ve čtvrtek 2020-07-16 10:30:43 EDT. --
Jun 08 07:47:20 testvm1.both.org jádro:Linux verze 5.6.6-300.fc32.x86_64 ([email protected]) (gcc verze 10.0>
Jun 08 07:47:20 testvm1.both.org jádro:Příkazový řádek:BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.6.6-300.fc32.x86_64 root=/dev/mapper/VG01-root ro>
Jun 08 07:47:20 testvm1.both.org kernel:x86/fpu:Podpora funkce XSAVE 0x001:'x87 floating point registers'
Jun 08 07:47:20 testvm1.both.org kernel:x86/fpu:Podpora funkce XSAVE 0x002:'registry SSE'
Jun 08 07:47:20 testvm1.both.org jádro:x86/fpu:Podpora funkce XSAVE 0x004:'AVX registry'
Červ 08 07:47:20 testvm1.both.org jádro:x86/fpu:xstate_offset[2]:576, xstate_sizes[2]:256
Jun 08 07:47:20 testvm1.both.org jádro:x86/fpu :Povolené funkce xstate 0x7, velikost kontextu je 832 bajtů, s použitím „standardního“ formátu.
Jun 08 07:47:20 testvm1.both.org kernel:BIOSem poskytnutá fyzická mapa RAM:
Jun 08 07 :47:20 testvm1.both.org jádro:BIOS-e820:[mem 0x00 00000000000000-0x000000000009fbff] použitelné

16. července 09:51:00 testvm1.both.org NetworkManager[760]:  [1594907460.1 požadované prouters' 055]):4 možnost c prou_6 '
Jul 16 09:51:00 testvm1.both.org NetworkManager[760]:  [1594907460.1765] dhcp4 (enp0s3):option required_static_routes => '1'
Jul 16:09 00 testvm1.both.org NetworkManager[760]:  [1594907460.1765] dhcp4 (enp0s3):option required_subnet_mask => '1'
červenec 16 09:51:00 testvm1.both.org NetworkManager[7.0  [1594907460.1765] dhcp4 (enp0s3):option required_time_offset => '1'
červenec 16 09:51:00 testvm1.both.org NetworkManager[760]:  [16946enh07 option required_wpad       => '1'
červenec 16 09:51:00 testvm1.both.org NetworkManager[760]:  [1594907460.1766] dhcp4 (enp0s3):možnost routery 0 19 2. =8' 19   2. 1 8 . />Jul 16 09:51:00 testvm1.both.org NetworkManager[760]:  [1594907460.1766] dhcp4 (enp0s3):option subnet_ mask          => '255.255.255>
16. července 09:51:00 testvm1.both.org NetworkManager[760]:  [1594907460.1766]16. července 09:51:00 testvm1.both.org systemd[1]:Spuštěn Správce sítě Script Dispatcher Service.
červenec 16 09:51:00 testvm1.both.org audit[1]:SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=Networkcom> 16. července 09:51:10 testvm1.both.org systemd[1]:NetworkManager-dispatcher.service:Úspěšné.
16. července 09:51:10 testvm1.both.org audit[1]:SERVICE_STOP pid =1 uid=0 auid=4294967295 ses=4294967295 msg='unit=NetworkManager-dispatcher comm>
16. července 09:59:13 testvm1.both.org systemd[1]:Spouštění dnf makecache... />Jul 16 09:59:13 testvm1.both.org audit[1]:SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=dnf-makecache comm="systemd">
16. července 09:59:13 auditu testvm1.both.org[1]:SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=dnf-makecache comm="systemd" e>
16. července 09:59 testvm1.both.org systemd[1]:dnf-makecache.service:Úspěšné.
16. července 09:59:13 testvm1.both.org systemd[1]:Dokončeno dnf makecache.
16. července 09 :59:14 testvm1.both.org dnf[378549]:Mezipaměť metadat byla nedávno obnovena.
16. července 10:00:42 testvm1.both.org systemd[1]:Spouštění nástroje pro účtování aktivity systému...
16. července 10:00:42 testvm1.both.org systemd[1]:sysstat-collect.service:Úspěšné.
16. července 10:00:42 testvm1.both.org audit[1]:SERVICE_START pid =1 uid=0 auid=4294967295 ses=4294967295 msg='unit=sysstat-collect comm="systemd>
Jul 16 10:00:42 testvm1.both.org systemd[1]:Dokončený nástroj pro účtování aktivity systému .
Jul 16 10:00:42 testvm1.both.org audit[1]:SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=sysstat-collect comm="systemd">
16. července 10:01:01 testvm1.both.org CROND[378562]:(kořen) CMD (run-parts /etc/cron.hourly)
Jul 16 10:01:01 testvm1.both.org run-parts[378565]:(/etc/cron.hourly) od 0anacron
Jul 16 10:01:01 testvm1.both.org run-parts[378571]:(/etc/cron.hourly) dokončeno 0anacron

Stejná data můžete také explicitně zobrazit v dmesg příkaz představuje. Otevřete dvě terminálové relace vedle sebe a zadejte dmesg příkaz v jednom a následující příkaz v druhém:

[root@testvm1 ~]# journalctl --dmesg 

Jediný rozdíl, který byste měli vidět, je formát času. Soubor dmesg příkaz je v monotónním formátu, který ukazuje počet sekund od spuštění systému. journalctl výstup je ve formátu data a času. Krátká monotónní možnost zobrazuje čas od spuštění:

[root@testvm1 ~]# journalctl --dmesg -o short-monoton
-- Záznamy začínají v Po 2020-06-08 07:47:20 EDT, končí v Po 2020-07-20 13 :01:01 EDT. --
[    0,000000] jádro testvm1.both.org:Linux verze 5.7.6-201.fc32.x86_64 ([email protected]) (gcc verze 10.1. 0 0.0>[ 0.0 ] jádro testvm1.both.org:Příkazový řádek:BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.7.6-201.fc32.x86_64 root=/dev/mapper/VG01-root ro r>
[    00.000 jádro testvm1.both.org:x86/fpu:Podpora funkce XSAVE 0x001:'x87 registry s plovoucí desetinnou čárkou'
[    0.000000] jádro testvm1.both.org:x86/fpu:Podpora funkce XSAVE 0x002:'SSE registry'
[    0.000000] jádro testvm1.both.org:x86/fpu:Podpora funkce XSAVE 0x004:'AVX registry'
[    0.000000] jádro testvm1.both.org:x86/fpu[2] xstate 6 , xstate_sizes[2]: 256
[    0.000000] jádro testvm1.both.org:x86/fpu:Povolené funkce xstate 0x7, velikost kontextu je 832 bajtů, používá se „standardní“ formát.

[    0.000002] testvm1.both.org jádro:clocksource:kvm-clock:mask:0xffffffffffffffff max_cycles:0x1cd42e4dffb, max_idle_ns:881 5905914>
[    0,000005] jádro testvm1.both.org:tsc:Zjištěn procesor 2807,988 MHz
[   0,001157] testvm1.both.org jádro:e820:0ffx000m=vyhrazeno> aktualizace e820:00x000m
[    0.001159] jádro testvm1.both.org:e820:odstranit [mem 0x000a0000-0x000ffffff] použitelné
[    0.001162] testvm1.both.org0 brarch 7>4 pf0 7x kernel =0_0x1 max. ] jádro testvm1.both.org:výchozí typ MTRR:uncachable
[    0.001173] jádro testvm1.both.org:rozsahy proměnných MTRR zakázány:
[    0.001173] testvm1.both.org[    0.001174] jádro testvm1.both.org:x86/PAT:MTRR zakázány, inicializace PAT se také vynechává.
[    0.001176] jádro testvm1.both.org:CPU MTRR všechny prázdné – virtualizovaný systém.
0,001179] jádro testvm1.both.org:x86/PAT:Konfigurace [0-7]:WB  WT  UC- UC  WB  WT  UC- UC  
[    0,001182] testvm1.both_org00, jádro 0_pfx 0 max. 0_0
[    0,001238] test Jádro vm1.both.org:nalezena tabulka SMP MP na adrese [mem 0x0009fff0-0x0009ffff]
[    0.081068] jádro testvm1.both.org:RAMDISK:[mem 0x34194000 08] br> 0ffv181m. jádro both.org:ACPI:Včasné ověření kontrolního součtu tabulky zakázáno

[   34.037575] jádro testvm1.both.org:16:43:32.734466 hlavní     6.1.10_Fedora r138449 spuštěna Podrobná úroveň =0
[   34.042209] jádro testvm1.both.org:16:43:32.739032 main     vbglR3GuestCtrlDetectPeekGetCancelSupport:Podporováno (č. 1)
.049] Test odkazu 0 en 0 je až 1000 Mbps Full Duplex, Řízení toku:RX
[   55.747738] jádro testvm1.both.org:IPv6:ADDRCONF(NETDEV_CHANGE):enp0s3:odkaz je připraven

řádky 624 -681/681 (KONEC)

journalctl má mnoho voleb, včetně -o (výstup) s několika podvolbami, které vám umožňují vybrat formát času a data, který splňuje různé sady požadavků. Většinu z nich jsem uvedl níže spolu s krátkým popisem, který jsem rozšířil nebo upravil z journalctl manuálová stránka. Všimněte si, že hlavním rozdílem mezi většinou z nich je formát data a času a ostatní informace zůstávají stejné.

formáty času a data deníku

  • krátké: Toto je výchozí formát a generuje výstup, který se nejvíce podobá formátování klasických souborů syslog a zobrazuje jeden řádek na záznam žurnálu. Tato volba zobrazuje metadata žurnálu včetně monotónního času od spuštění, plně kvalifikovaného názvu hostitele a názvu jednotky, jako je jádro, DHCP atd.
    Jul 20 08:43:01 testvm1.both Jádro .org:Záznamy hash tabulky Inode-cache:1048576 (pořadí:11, 8388608 bajtů, lineární) 
  • krátký-úplný:  Tento formát je velmi podobný výchozímu, ale zobrazuje časová razítka ve formátu --since= a --until= možnosti přijmout. Na rozdíl od informací o časovém razítku zobrazených v režimu krátkého výstupu tento režim obsahuje ve výstupu informace o dni v týdnu, roce a časovém pásmu a je nezávislý na národním prostředí.
    Po 2020-06-08 07:47:20 EDT testvm1.both.org jádro:x86/fpu:Podpora funkce XSAVE 0x004:'AVX registry' 
  • krátké iso: Formát short-iso je velmi podobný výchozímu, ale zobrazuje časová razítka nástěnných hodin ISO 8601.
    2020-06-08T07:47:20-0400 testvm1.both.org jádro:kvm-clock :Použití msrs 4b564d01 a 4b564d00 
  • krátká-iso-přesná:   Tento formát je stejný jako short-iso, ale zahrnuje plnou mikrosekundovou přesnost.
    2020-06-08T07:47:20.223738-0400 testvm1.both.org kernel:Booting paravirtualized kernel on KVM 
  • krátký-monotónní:   Velmi podobné výchozímu, ale zobrazuje monotónní časová razítka místo časových razítek nástěnných hodin.
    [    2.091107] testvm1.both.org jádro:ata1.00:ATA-6:VBOX HARDDISK, 1.0, max UDMA/ 133 
  • krátká-přesná:  Tento formát je také podobný výchozímu, ale zobrazuje klasická časová razítka syslog s plnou mikrosekundovou přesností.
    Jun 08 07:47:20.223052 testvm1.both.org jádro:BIOS-e820:[mem 0x000000000009fc00 0x000000000009ffff] vyhrazeno 
  • short-unix:  Stejně jako výchozí, ale zobrazuje sekundy uplynulé od 1. ledna 1970, UTC namísto časových razítek nástěnných hodin ("čas Unix"). Čas se zobrazuje s přesností na mikrosekundy.
    1591616840.232165 jádro testvm1.both.org:tcp_listen_portaddr_hash položky hash tabulky:8192 
  • kočka: Generuje velmi stručný výstup zobrazující pouze zprávu každého záznamu deníku bez metadat, dokonce ani s časovým razítkem.
    ohci-pci 0000:00:06.0:irq 22, io mem 0xf0804000 
  • podrobné: Tento formát zobrazuje úplnou datovou strukturu pro všechny položky položky se všemi poli. Toto je možnost formátu, která se nejvíce liší od všech ostatních.
    Po 2020-06-08 07:47:20.222969 EDT [s=d52ddc9f3e8f434b9b9411be2ea50b1e;i=1;b7071cb6d8c t=5a7912c6148f9;x=8f>
        _SOURCE_MONOTONIC_TIMESTAMP=0
        _TRANSPORT=kernel
        PRIORITY=5
        SYSLOG_FACILITY=0
     IDENT FIER=SYS_L verze 5.6.6-300.fc32.x86_64 ([email protected]) (gcc verze 10.0.1 20200328 (Red Hat 10.0.1-0>
    c
    0   _2BACHINE_160 d8 d8 6 _8b856 d =d8 3bccd1140fca488187f8a1439c832f07
        _HOSTNAME=testvm1.both.org

Další možnosti dostupné pomocí -o možnost umožňuje export dat v různých formátech, jako je binární nebo JSON. Také jsem našel -x možnost svítí, protože může zobrazit další vysvětlující zprávy pro některé položky deníku. Pokud tuto možnost vyzkoušíte, uvědomte si, že může výrazně zvýšit výstupní datový tok. Například dodatečné informace pro položku jako:

[    4.503737] testvm1.both.org systemd[1]:Spouštění kontroly systému souborů na /dev/mapper/VG01-root...
[    4.691555] testvm1.both.org systemd-fsck[548] :root:čistý, 1813/327680 souborů, 48555/1310720 bloků
[    4.933065] testvm1.both.org systemd[1]:Dokončená kontrola souborového systému na /dev/mapper/VG01-root.

expanduje na toto:

[    4.503737] testvm1.both.org systemd[1]:Spouštění kontroly systému souborů na /dev/mapper/VG01-root...
-- Předmět:Spouštěcí úloha pro jednotku systemd-fsck-root Služba .service byla zahájena
-- Defined-By:systemd
-- Podpora:https://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Spouštěcí úloha pro jednotku systemd-fsck-root.service byla zahájena.
--
-- Identifikátor úlohy je 36.
[    4.691555] testvm1.both.org systemd -fsck[548]:root:čistý, 1813/327680 souborů, 48555/1310720 bloků
[    4.933065] testvm1.both.org systemd[1]:Dokončená kontrola souborového systému na /dev/mapper/VG01-root.
-- Předmět:Spouštěcí úloha pro jednotku systemd-fsck-root.service byla úspěšně dokončena
-- Defined-By:systemd
-- Podpora:https://lists.freedesktop. org/mailman/listinfo/systemd-devel
--
-- Spouštěcí úloha pro jednotku systemd-fsck-root.service byla úspěšně dokončena.
--
-- The identifikátor práce je 36

Jsou zde nějaké nové informace, ale myslím, že hlavní výhodou je, že informace jsou kontextualizovány, aby do určité míry objasnily původní stručné zprávy.

Většinou není nutné a ani žádoucí vypisovat všechny deníkové záznamy a ručně v nich vyhledávat. Někdy hledám záznamy související s konkrétní službou a jindy hledám záznamy, které se staly v konkrétních časech. journalctl poskytuje výkonné možnosti, které vám umožní zobrazit pouze data, která vás zajímají.

Začněte s --list-boots volba, která uvádí všechna spouštění během časového období, kdy existují záznamy žurnálu. Všimněte si, že journalctl.conf soubor může specifikovat, že záznamy žurnálu jsou vyřazeny poté, co dosáhnou určitého stáří nebo poté, co místo na úložném zařízení (HDD/SSD) zabrané žurnálem dosáhne určené maximální velikosti:

[root@testvm1 ~]# journalctl --list-boots 
-10 dcb6dcc0658e4a8d8c781c21a2c6360d Po 2020-06-08 07:47:20 EDT:Po 2020-076-08 EDT:Po 2020-076-08 /> -9 7D61951A85F445C5946774AAAAE8BC2A4 PÁN 2020-07-03 15:50:06 EDT-FRI 2020-07-03 18:21:23 EDT
-8 1b3A847577E544B4A2679FE576B62206 PRI 2020-07-03 18:21:58 EDT- Pá 2020-07-03 22:10:54 EDT
 -7 5fef01a3568743af99118107ca6f61ae Pá 2020-07-03 22:18:41 EDT-So 2020<0-01-06:5604 6E944F999EBD9405984090F829A927FA4 SAT 2020-07-04 07:33:25:56 EDT-SAT 2020-07-04 07:58:59 EDT
-5 -5 -5 EC8B0C81CA4744B1BAD071BDEF432959 So 2020-07-04 08:12:06 EDT-SAT 2020-07 -04 09:12:47 EDT
 -4 cb173ec716824e21b87ccf6cb43a9a99 So 2020-07-04 10:19:53 EDT-So 2020-07-04 2020-07-04 E25431>21b87ccf /83938 07-04 07:59:58 EDT–Ne 2020-07-05 09:39:30 EDT
 -2 06fb81f1b29e4f68af9860844668446c Po 2020-07-07-05-05 02:02 50:06 EDT
 -1 33dbf8e6b9de4113a591c4f487d0ac37 Po 2020-07-13 04:50:33 EDT— Čt 2020-07-16 13:49:32 EDT
  0 75c9b70913934748b5396b3b172bee50 Po 2020-07-20 08:43:01 EDT-Pá 20240:02:02

Nejnovější ID spouštění se zobrazí ve spodní části; je to dlouhé náhodné hexadecimální číslo. Tato data můžete použít k zobrazení žurnálů pro konkrétní spouštění. To lze zadat pomocí čísla posunu spouštění ve sloupci zcela vlevo nebo pomocí UUID ve druhém sloupci. Tento příkaz zobrazí žurnál spouštěcí instance s offsetem -2 —druhé předchozí spuštění z aktuálního:

[root@testvm1 ~]# journalctl -b -2
-- Záznamy začínají v Po 2020-06-08 07:47:20 EDT, končí v Pá 2020-07-24 12:44:06 EDT. --
Jul 06 06:27:05 testvm1.both.org jádro:Linux verze 5.7.6-201.fc32.x86_64 ([email protected]) (gcc verze 10.1>
Jul 06 06:27:05 testvm1.both.org kernel:Command line:BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.7.6-201.fc32.x86_64 root=/dev/mapper/VG01-root ro>
Jul 06 06:27:05 testvm1.both.org kernel:x86/fpu:Supporting XSAVE feature 0x001:'x87 floating point registers'
Jul 06 06:27:05 testvm1.both.org kernel:x86/fpu:Supporting XSAVE feature 0x002:'SSE registers'

Or you could use the UUID for the desired boot. The offset numbers change after each boot, but the UUID does not:

[root@testvm1 ~]# journalctl -b 06fb81f1b29e4f68af9860844668446c 

The -u option allows you to select specific units to examine. You can use a unit name or a pattern for matching, and you can use this option multiple times to match multiple units or patterns. In this example, I used it in combination with -b to show chronyd journal entries for the current boot:

[root@testvm1 ~]# journalctl -u chronyd -b
-- Logs begin at Mon 2020-06-08 07:47:20 EDT, end at Sun 2020-07-26 09:10:47 EDT. --
Jul 20 12:43:31 testvm1.both.org systemd[1]:Starting NTP client/server...
Jul 20 12:43:31 testvm1.both.org chronyd[811]:chronyd version 3.5 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCD>
Jul 20 12:43:31 testvm1.both.org chronyd[811]:Frequency -0.021 +/- 0.560 ppm read from /var/lib/chrony/drift
Jul 20 12:43:31 testvm1.both.org chronyd[811]:Using right/UTC timezone to obtain leap second data
Jul 20 12:43:31 testvm1.both.org systemd[1]:Started NTP client/server.
Jul 20 12:44:00 testvm1.both.org chronyd[811]:Selected source 192.168.0.52
Jul 20 12:44:00 testvm1.both.org chronyd[811]:System clock TAI offset set to 37 seconds
Jul 20 12:44:00 testvm1.both.org chronyd[811]:System clock wrong by 1.412227 seconds, adjustment started
Jul 20 12:44:01 testvm1.both.org chronyd[811]:System clock was stepped by 1.412227 seconds
[root@testvm1 ~]#

Suppose you want to look at events that were recorded between two arbitrary times. You can also use -S (--since ) and -U (--until ) to specify the beginning and ending times. The following command displays journal entries starting at 15:36:00 on July 24, 2020, through the current time:

[root@testvm1 ~]# journalctl -S "2020-07-24 15:36:00" 

And this command displays all journal entries starting at 15:36:00 on July 24, 2020, until 16:00:00 on July 25:

[root@testvm1 ~]# journalctl -S "2020-07-24 15:36:00" -U "2020-07-25 16:00:00" 

This command combines -S , -U , and -u to give journal entries for the NetworkManager service unit starting at 15:36:00 on July 24, 2020, until 16:00:00 on July 25:

[root@testvm1 ~]# journalctl -S "2020-07-24 15:36:00" -U "2020-07-25 16:00:00" -u NetworkManager 

Some syslog facilities, such as cron, auth, mail, daemon, user, and more, can be viewed with the --facility volba. You can use --facility=help to list the available facilities. In this example, the mail facility is not the Sendmail service that would be used for an email service, but the local client used by Linux to send email to root as event notifications. Sendmail actually has two parts, the server, which (for Fedora and related distributions) is not installed by default, and the client, which is always installed so that it can be used to deliver system emails to local recipients, especially root:

[root@testvm1 ~]# journalctl --facility=mail 

The journalctl man page lists all the options that can be used to narrow searches. The table below summarizes some of the options I use most frequently. Most of these options can be used in various combinations to further narrow a search. Refer to my previous article Analyzing systemd calendar and timespans for details on creating and testing timestamps, as well as important tips like using quotes around timestamps.

Options to narrow searches of the journal

Option Description
--list-boots This displays a list of boots. The information can be used to show journal entries only for a particular boot.
-b [offset|boot ID] This specifies which boot to display information for. It includes all journal entries from that boot through shutdown or reboot.
--facility=[facility name] This specifies the facility names as they're known to syslog. Use --facility=help to list the valid facility names.
-k , --dmesg These display only kernel messages and are equivalent to using the dmesg command.
-S , --since [timestamp] These show all journal entries since (after) the specified time. They can be used with --until  to display an arbitrary range of time. Fuzzy times such as "yesterday" and "2 hours ago"—with quotes—are also allowed.
-u [unit name] The -u option allows you to select specific units to examine. You can use a unit name or a pattern for matching. This option can be used multiple times to match multiple units or patterns. 
-U , --until [timestamp] These show all journal entries until (prior to) the specified time. They can be used with --since  to display an arbitrary range of time. Fuzzy times such as "yesterday" and "2 hours ago"—with quotes—are also allowed.

Other interesting options

The journalctl program offers some other interesting options, as well. These are useful for refining the data search, specifying how the journal data is displayed, and managing the journal files.

Additional interesting journalctl options

Option Description
-f , --follow This journalctl option is similar to using the tail -f příkaz. It shows the most recent entries in the journal that match whatever other options have been specified and also displays new entries as they occur. This can be useful when watching for events and when testing changes.
-e , --pager-end The -e option displays the end of the data stream instead of the beginning. This does not reverse the order of the data stream, rather it causes the pager to jump to the end.
--file [journal filename] This names a specific journal file in /var/log/journal/ .
-r , --reverse This option reverses the order of the journal entries in the pager so that the newest are at the top rather than the bottom.
-n , --lines=[X] This shows the most recent X number of lines from the journal.
--utc This displays times in UTC rather than local time.
-g , --grep=[REGEX] I like the -g option because it enables me to search for specific patterns in the journal data stream. This is just like piping a text data stream through the grep příkaz. This option uses Perl-compatible regular expressions.
--disk-usage This option displays the amount of disk storage used by the current and archived journals. It might not be as much as you think.
--flush Journal data stored in the virtual filesystem /run/log/journal/ , which is volatile storage, is written to /var/log/journal/ which is persistent storage. This option ensures that all data is flushed to /run/log/journal/ at the time it returns.
--sync This writes all unwritten journal entries (still in RAM but not in /run/log/journal ) to the persistent filesystem. All journal entries known to the journaling system at the time the command is entered are moved to persistent storage.
--vacuum-size= --vacuum-time= --vacuum-files= These can be used singly or in combination to remove the oldest archived journal files until the specified condition is met. These options only consider archived files, and not active files, so the result might not be exactly what was specified.

I'll explore some of these entries below. More options can be found in the journalctl man page.

Journal files

If you have not already, be sure to list the files in the journal directory on your host. Remember that the name of the directory containing the journal files is a long, random number. This directory contains multiple active and archived journal files, including some for users:

[root@david ~]# cd /var/log/journal/ad8f29ed15044f8ba0458c846300c2a4/
[root@david ad8f29ed15044f8ba0458c846300c2a4]# ll
total 352308
-rw-r-----+ 1 root systemd-journal  33554432 May 28 13:07 system@0c91aaef57c441859ea5e421edff6528-0000000000000001-0005a6703120d448.journal
-rw-r-----+ 1 root systemd-journal 109051904 Jun 23 21:24 system@0c91aaef57c441859ea5e421edff6528-0000000000008238-0005a6b85e4e03c6.journal
-rw-r-----+ 1 root systemd-journal 100663296 Jul 21 18:39 system@0c91aaef57c441859ea5e421edff6528-0000000000021f3e-0005a8ca55efa66a.journal
-rw-r-----+ 1 root systemd-journal  41943040 Jul 30 09:34 system.journal
-rw-r-----+ 1 root systemd-journal   8388608 May 28 13:07 user-1000@037bcc7935234a5ea243b3af304fd08a-0000000000000c45-0005a6705ac48a3c.journal
-rw-r-----+ 1 root systemd-journal  16777216 Jun 23 21:24 user-1000@bc90cea5294447fba2c867dfe40530db-0000000000008266-0005a6b85e910761.journal
-rw-r-----+ 1 root systemd-journal  41943040 Jul 21 16:08 user-1000@bc90cea5294447fba2c867dfe40530db-0000000000021f4b-0005a8ca68c83ab7.journal
-rw-r-----+ 1 root systemd-journal   8388608 Jul 30 09:34 user-1000.journal
[root@david ad8f29ed15044f8ba0458c846300c2a4]#

You can see the user files in this listing for the user ID (UID) 1000, which is my Linux account. The --files option allows me to see the content of specified files, including the user files:

[root@david ad8f29ed15044f8ba0458c846300c2a4]# journalctl --file user-1000.journal

Jul 29 14:13:32 david.both.org tumblerd[145509]:Registered thumbnailer /usr/bin/gdk-pixbuf-thumbnailer -s %s %u %o
Jul 29 14:13:32 david.both.org Thunar[2788]:ThunarThumbnailer:got 0 handle (Queue)
Jul 29 14:13:32 david.both.org Thunar[2788]:ThunarThumbnailer:got 0 handle (Error or Ready)
Jul 29 14:13:32 david.both.org Thunar[2788]:ThunarThumbnailer:got 0 handle (Finished)
Jul 29 14:15:33 david.both.org tumblerd[145552]:error:Broken zip file structure
Jul 29 14:20:34 david.both.org systemd[2466]:dbus-:[email protected]:Succeeded.
Jul 29 14:34:17 david.both.org systemd[2466]:Starting Cleanup of User's Temporary Files and Directories...
Jul 29 14:34:17 david.both.org systemd[2466]:systemd-tmpfiles-clean.service:Succeeded.
Jul 29 14:34:17 david.both.org systemd[2466]:Finished Cleanup of User's Temporary Files and Directories.
Jul 29 14:48:26 david.both.org systemd[2466]:Started dbus-:[email protected].
Jul 29 14:48:26 david.both.org tumblerd[145875]:Registered thumbnailer gsf-office-thumbnailer -i %i -o %o -s %s

This output shows, among other things, temporary file cleanup for the UID1000 user. Data relating to individual users may be helpful in locating the root cause of problems originating in user space. I found a number of interesting entries in this output. Try it on your host and see what you find.

Adding journal entries

It can be useful to add your own entries to the journal. This is accomplished with the systemd-cat program that allows piping the STDOUT of a command or program to the journal. This command can be used as part of a pipeline on the command line or in a script:

[root@testvm1 ~]# echo "Hello world" | systemd-cat -p info -t myprog
[root@testvm1 ~]# journalctl -n 10
Jul 27 09:01:01 testvm1.both.org CROND[976442]:(root) CMD (run-parts /etc/cron.hourly)
Jul 27 09:01:01 testvm1.both.org run-parts[976445]:(/etc/cron.hourly) starting 0anacron
Jul 27 09:01:01 testvm1.both.org run-parts[976451]:(/etc/cron.hourly) finished 0anacron
Jul 27 09:07:53 testvm1.both.org unknown[976501]:Hello world
Jul 27 09:10:47 testvm1.both.org systemd[1]:Starting system activity accounting tool...
Jul 27 09:10:47 testvm1.both.org systemd[1]:sysstat-collect.service:Succeeded.
Jul 27 09:10:47 testvm1.both.org systemd[1]:Finished system activity accounting tool.
Jul 27 09:10:47 testvm1.both.org audit[1]:SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=sysstat-collect comm="systemd" exe="/usr/lib/syst>
Jul 27 09:10:47 testvm1.both.org audit[1]:SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=sysstat-collect comm="systemd" exe="/usr/lib/syste>
Jul 27 09:17:10 testvm1.both.org myprog[976516]:Hello world
[root@testvm1 ~]#

The -p option specifies a priority, emerg, alert, crit, err, warning, notice, info, debug, or a value between 0 and 7 that represents each of those named levels. These priority values are the same as those defined by syslog(3) . The default is info. The -t option is an identifier, which can be any arbitrary short string, such as a program or script name. This string can be used for searches by the journalctl příkaz:

[root@testvm1 ~]# journalctl -t myprog
-- Logs begin at Mon 2020-06-08 07:47:20 EDT, end at Mon 2020-07-27 09:21:57 EDT. --
Jul 27 09:17:10 testvm1.both.org myprog[976516]:Hello world
[root@testvm1 ~]#

Journal management

I use the --disk-usage option to check on journal sizes, along with other commands relating to disk usage, to ensure that my /var filesystem is not filling up:

[root@testvm1 ~]# journalctl --disk-usage 
Archived and active journals take up 136.0M in the file system.
[root@testvm1 ~]#

The disk usage for the journals on the testvm1 host is about 136MB. The result on my primary workstation is 328MB, and the host I use for my firewall and router uses 2.8GB for the journals. Journal sizes depend greatly on the host's use and daily run time. My physical hosts all run 24x7.

The /etc/systemd/journald.conf file can be used to configure the journal file sizes, rotation, and retention times to meet any needs not met by the default settings. You can also configure the journal storage location—you can specify a directory on the storage device or whether to store everything in RAM, which is volatile storage. If the journals are stored in RAM, they will not be persistent between boots.

The default time unit in the journald.conf file is seconds, but it can be overridden using the suffixes year , month , week , day , h , or m .

Suppose you want to limit the total amount of storage space allocated to journal files to 1GB, store all journal entries in persistent storage, keep a maximum of 10 files, and delete any journal archive files that are more than a month old. You can configure this in /etc/systemd/journald.conf using:

SystemMaxUse=1G
Storage=persistent
SystemMaxFiles=10
MaxRetentionSec=1month

By default, the SystemMaxUse is 10% of available disk space. The default settings have been fine for the systems I work with, and I have not needed to change any of them. The journald.conf man page states that the time-based settings for specifying how long to store journal entries in a single file or to retain older files are normally not necessary. This is because file number and size configurations usually force rotation and deletion of old files before any time settings might be needed.

The SystemKeepFree option ensures a specific amount of space is kept free for other data. Many databases and application programs use the /var filesystem to store data, so ensuring enough available storage space may be critical in systems with smaller hard drives and minimum space allocated to /var .

If you make changes to this configuration, be sure to monitor the results carefully for an appropriate period of time to ensure they are performing as expected.

Journal file rotation

The journal files are typically rotated automatically based upon the configuration in the /etc/systemd/journald.conf soubor. Files are rotated whenever one of the specified conditions is met. So if, for example, the space allocated to journal files is exceeded, the oldest file(s) is deleted, the active file is made into an archive, and a new active file is created.

Journal files can also be rotated manually. I suggest using the --flush option to ensure current data is moved to persistent storage before you run the command:

[root@testvm1 ~]# journalctl --rotate 

There is another way to purge old journal files without performing a file rotation. The vacuum-size= , vacuum-files= , and vacuum-time= commands can be used to delete old archive files down to a specified total size, number of files, or prior time. The option values consider only the archive files and not the active ones, so the resulting reduction in total file size might be somewhat less than expected.

The following command purges old archive files so that only ones that are less than one month old are left. You can use the s , m , h , days , months , weeks , and years suffixes:

[root@testvm1 ~]# journalctl --vacuum-time=1month  

This command deletes all archive files except for the four most recent ones. If there are fewer than four archive files, nothing will happen, and the original number of files remains:

[root@testvm1 ~]# journalctl --vacuum-files=4 

This last vacuum command deletes archive files until 200MB or less of archived files are left:

[root@testvm1 ~]# journalctl --vacuum-size=200M 

Only complete files are deleted. The vacuum commands do not truncate archive files to meet the specification. They also work only on archive files, not active ones.

Final thoughts

This article looked at using the journalctl command to extract various types of data from the systemd journal in different formats. It also explored managing journal files and how to add entries to the log from commands and scripts.

The systemd journal system provides a significant amount of metadata and context for entries compared to the old syslogd program. This additional data and the context available from the other journal entries around the time of an incident can help the sysadmin locate and resolve problems much faster than having to search multiple syslog files.

In my opinion, the journalctl command meets the Unix philosophy that programs should do one thing and do it well. The only thing journalctl does is extract data from the journal and provide many options for selecting and formatting that data. At about 85K, it is not very big. Of course, that does not include shared libraries, but those are, by definition, shared with other programs.

You should now have enough information to use the systemd journal more effectively. If you would like to know more than what I covered here, look in the man pages for journalctl and systemd-cat .

Resources

There is a great deal of information about systemd available on the internet, but much is terse, obtuse, or even misleading. In addition to the resources mentioned in this article, the following webpages offer more detailed and reliable information about systemd startup. This list has grown since I started this series of articles to reflect the research I have done.

  • DigitalOcean has a very good article about journalctl and how to view and manipulate systemd logs.
  • The Fedora Project has a good, practical guide to systemd. It has pretty much everything you need to know in order to configure, manage, and maintain a Fedora computer using systemd.
  • The Fedora Project also has a good cheat sheet that cross-references the old SystemV commands to comparable systemd ones.
  • Red Hat documentation contains a good description of the Unit file structure as well as other important information.
  • For detailed technical information about systemd and the reasons for creating it, check out Freedesktop.org's description of systemd.
  • Linux.com's "More systemd fun" offers more advanced systemd information and tips.

There is also a series of deeply technical articles for Linux sysadmins by Lennart Poettering, the designer and primary developer of systemd. These articles were written between April 2010 and September 2011, but they are just as relevant now as they were then. Much of everything else good that has been written about systemd and its ecosystem is based on these papers.

  • Rethinking PID 1
  • systemd for Administrators, Part I
  • systemd for Administrators, Part II
  • systemd for Administrators, Part III
  • systemd for Administrators, Part IV
  • systemd for Administrators, Part V
  • systemd for Administrators, Part VI
  • systemd for Administrators, Part VII
  • systemd for Administrators, Part VIII
  • systemd for Administrators, Part IX
  • systemd for Administrators, Part X
  • systemd for Administrators, Part XI

Linux
  1. Spravujte spouštění pomocí systemd

  2. přesměrovat protokoly služeb systemd do souboru

  3. Systémové protokoly jsou prázdné (/var/log/messages; /var/log/secure; atd.)

  1. Začněte používat systemd jako nástroj pro odstraňování problémů

  2. Odstraňte problémy s použitím souborového systému proc na Linuxu

  3. Konfigurace vzdáleného protokolování pomocí rsyslog v CentOS/RHEL

  1. Rozdíl mezi /var/log/messages, /var/log/syslog a /var/log/kern.log?

  2. Odstraňte problémy se selháním zálohování SQL Server pomocí Prohlížeče událostí systému Windows

  3. Auditované zprávy se zaplňují /var/log/messages