info@grumpa.net 721 674 455

Můj Grumpův blog

Nastavujeme systemd journald

Napsáno: June 2, 2024, Viktor Matys

Systemd přináší nový způsob logování. Stávající syslog je nahrazován journald. Ten má několik slabin, ale i různé přednosti.

Systemd přináší i nový způsob logování. Stávající syslog je nahrazován journald. Ten má několik slabin, ale i různé přednosti.

Slabiny:

  • adresář s logy zabírá neuvěřiteně místa
  • logy nejde prohlížet běžnými textovými nástroji cat/grep/… ale jen přes příkaz journalctl
  • doba po kterou jsou záznamy v logu udržovány je poněkud chaotická
  • práce s logy je - zvlášť z počátku - dost těžkopádná
  • grep logu je o mnoho řádů pomalejší, stejně tak vyhledávání v logu přes "/".

Přednosti:

  • všechno co se loguje je na jednom místě
  • journactl umí filtrovat
    • podle systemd unit (např „postfix“)
    • má i parametr –grep
  • nabízí různé formy výstupu (aka syslog, json,…)
  • různá zobrazení časového razítka (komu v syslogu občas nechyběl rok?)
  • logy můžou být "system" i "user"
  • nastavení kurzoru a číst log od něj a pak ho posunout dál

Oba stejně:

  • vzdálené logování

Kde se to konfiguruje

Základní konfigurační soubor je /etc/systemd/journald.conf. Konfiguraci si ovšem můžeme vypsat i pomocí

systemd-analyze cat-config systemd/journald.conf

Výchozí nastavení

Na výchozím nastavení mě zaujala především doba, po kterou jsou záznamy v logu uchovávány. Na jednom serveru to byly pomalu tři měsíce, na jiném dva dny (nekecám).

Jestliže syslog + logrotate tuto dobu uchování poskytuje naprosto srozumitelně, journald má zdá se problém hlavně s tím, aby nepřekážel (ví že žere místo).

Journal log ve výchozím nastavení zabere maximálně 10% diskového oddílu.

To může být problém pokud máte ve zvyku vytvářet samostatný diskový oddíl pro logy - krásných 90% místa zůstane volných. A to byl taky důvod proč v tom jednom logu byly záznamy maximálně dva dny zpátky. A taky, že když měl místa velmi mnoho, ochotně uchovával a uchovával.

Konfigurovat

man 5 journald.conf

Vlastní konfigurací dát do /etc/systemd/journald.conf.d/local.conf Vyberu parametry pro mě klíčové:

[Journal]

# Nejdřív požadované parametry "vynulovat"
Storage=
SystemMaxFiles=
SystemMaxUse=
SystemKeepFree=
MaxRetentionSec=
MaxFileSec=

# Teprve pak nastavovat:
Storage=persistent              # úložiště na disku
SystemMaxFiles=1200             # kolik může mít maximálně souborů
SystemMaxUse=8G                 # kolik smí log nejvíc zabrat místa
SystemKeepFree=2G               # kolik naopak musí místa ponechat
MaxRetentionSec=6month          # nedelší doba ponechání záznamů
MaxFileSec=1month               # po jaké době rotovat soubory

To jsou parametry z toho původně dvoudenního logu. Po této změně je na svém maximu 8G a nejstarší záznamy jsou cca měsíc staré. Budu muset ještě přidat místo, což je fakt děs.

Po změně konfigurace nezapomenout na:

systemctl daemon-reload

Užitečné parametry journalctl

journalctl

    --disk-usage
    --since     -S      od jakého data/času
    --until     -U      do      - " -
    --cursor*
    --unit      -u      vypsat jen daný systemd unit (př. dovecot)
    --grep      -g      regulární výraz perl stylu
    --dmesg     -k      jen záznamy jádra
    --output    -o      formát výstupu - viz níže
    --lines     -n      jen tolik řádků, prosím
    --reverse   -r      v opačném pořadí
    --utc
    --pager-end -e      rovnou skočí na konec
    --catalog   -x      přidá vysvětlivky k chybám apod.

--output -o - několik hodnot, které používám:

- short             - aka syslog, default
- short-iso         - kompletní timestamp
- json, json-pretty
- cat               - holý výpis zpráv bez timestamp aj.

Závěrem

Tyhle články píšu hlavě pro sebe, abych si to nemusel pamatovat a nemusel si pamatovat, kam jsem si dal výpisky. Najde-li to tu někdo další a pomůže mu to, budu rád. :-)

Ahoj, strýček Grumpa