Modul 6 · 6.2
Čítanie logov pomocou journalctl
Modul 6: Služby a logy · Čas čítania: 11 minút
Cieľ lekcie: Po tejto lekcii budete vedieť pomocou journalctl cielene hľadať v logoch vášho servera (podľa služby, priority a času), budete vedieť, kde sú uložené ďalšie logovacie súbory, a zabránite tomu, aby logy zaplnili váš disk.
Kľúčové pojmy: journald, journal, journalctl -u, -p, --since/--until, -f, -b, -e, -n, priorita (err, warning, info), trvalé ukladanie, /var/log/journal, --disk-usage, --vacuum-size, /var/log, logrotate, rsyslog
Log ako prvý svedok
Keď na vašom serveri niečo nefunguje, dôvod je takmer vždy zapísaný v logu. Webová stránka, ktorá zobrazuje chybovú stránku, služba, ktorá sa nespustí, záloha, ktorá v noci neprebehla: server si to zapísal. Dobrý správca sa najprv pozrie do logu a až potom začne niečo meniť.
Na moderných serveroch s Linux zhromažďuje journald (súčasť systemd) hlásenia jadra, samotného systemd a všetkých služieb do jedného logu: journal. Čítate ho pomocou journalctl.
Aby ste mohli čítať všetko, musíte byť v skupine adm alebo systemd-journal, prípadne použiť sudo. Bez týchto práv uvidíte iba vlastné hlásenia.
Kde je uložený? Trvalý alebo dočasný
journald ukladá journal na jedno z dvoch miest:
- do
/var/log/journal/: trvalo, logy zostanú zachované aj po reštarte; - do
/run/log/journal/: dočasne, v pamäti, po reštarte zmiznú.
Predvolené nastavenie (Storage=auto v /etc/systemd/journald.conf) zvolí trvalé ukladanie, ak priečinok /var/log/journal/ existuje. V systéme Debian tento priečinok vytvára balík systemd už od verzie Debian 11 a v Ubuntu existuje tiež. Overte si to:
anna@web1:~$ ls -d /var/log/journal
/var/log/journal
anna@web1:~$ journalctl --list-boots | tail -n 3
-2 3c1f... Sun 2026-11-01 04:30:12 CET Sun 2026-11-08 04:30:01 CET
-1 9ab7... Sun 2026-11-08 04:30:40 CET Mon 2026-11-09 08:12:05 CET
0 e41d... Mon 2026-11-09 08:12:30 CET Mon 2026-11-09 11:40:17 CETAk vidíte iba jedno spustenie, hoci sa server už niekedy reštartoval, vaše logy sú dočasné. Vytvorte priečinok (sudo mkdir -p /var/log/journal a sudo systemd-tmpfiles --create --prefix /var/log/journal) a reštartujte journald. Je to dôležité: po páde chcete vedieť práve to, čo sa stalo pred reštartom.
Od verzie Debian 12 Debian už predvolene neinštaluje rsyslog. Tento program kedysi zapisoval textové súbory ako /var/log/syslog a /var/log/auth.log. Na novom serveri s Debianom teda neexistujú; všetko je v journale. Ubuntu rsyslog stále má. Návody, ktoré hovoria "pozrite sa do /var/log/auth.log", si v Debiane môžete preložiť na journalctl -u ssh.
Hľadanie: filtre, ktoré naozaj použijete
Bez filtra journalctl zobrazí všetko, od najstaršieho záznamu. To je zriedka to, čo chcete. Najdôležitejšie filtre, ktoré môžete kombinovať:
| Filter | Príklad | Čo robí |
|---|---|---|
-u <unit> | journalctl -u nginx | iba daná služba |
-p <prioriteit> | journalctl -p err | iba chyby a závažnejšie |
--since, --until | --since "2026-11-09 03:00" --until "04:00" | časové obdobie; aj today, yesterday, "1 hour ago" |
-b | journalctl -b, journalctl -b -1 | od tohto spustenia, alebo predchádzajúce |
-f | journalctl -u nginx -f | sledovanie naživo (ako tail -f), ukončenie pomocou Ctrl+C |
-e | journalctl -u ssh -e | skok na koniec |
-n | journalctl -u ssh -n 50 | posledných 50 riadkov |
-k | journalctl -k | iba hlásenia jadra |
--no-pager | bez listovania, praktické s grep |
Priority idú od 0 (emerg) po 7 (debug): emerg, alert, crit, err, warning, notice, info, debug. Pomocou -p err dostanete err a všetko závažnejšie. -p warning zobrazí aj varovania.
Typický postup hľadania. Vaša webová stránka od rána vracia chybu 502:
anna@web1:~$ systemctl status php8.4-fpm
× php8.4-fpm.service - The PHP 8.4 FastCGI Process Manager
Active: failed (Result: exit-code) since Mon 2026-11-09 07:02:11 CET; 4h ago
...
anna@web1:~$ sudo journalctl -u php8.4-fpm --since today -p warning --no-pager
nov 09 07:02:10 web1 php-fpm8.4[1830]: [09-Nov-2026 07:02:10] ERROR: [/etc/php/8.4/fpm/pool.d/www.conf:42] unknown entry 'pm.max_children '
nov 09 07:02:10 web1 php-fpm8.4[1830]: [09-Nov-2026 07:02:10] ERROR: FPM initialization failed
nov 09 07:02:11 web1 systemd[1]: php8.4-fpm.service: Main process exited, code=exited, status=78/CONFIG
nov 09 07:02:11 web1 systemd[1]: php8.4-fpm.service: Failed with result 'exit-code'.Príčina je tam doslova napísaná: preklep na riadku 42 konfiguračného súboru. Stav 78 (CONFIG) potvrdzuje, že ide o chybu konfigurácie. Nemusíte nič hádať.
Dva tipy na čítanie:
- Čítajte zhora nadol a hľadajte prvú chybu. Jedna chyba často spôsobí celý rad následných hlásení. Prvá je zvyčajne príčinou.
- Všímajte si čas. Čo sa okolo toho okamihu zmenilo? Automatická aktualizácia (lekcia 4.2:
/var/log/unattended-upgrades/), vaša zmena, reštart?
Ďalšie logovacie súbory
Nie všetko je v journale. Mnohé programy zapisujú aj (alebo iba) vlastné súbory do /var/log/:
| Súbor alebo priečinok | Čo obsahuje |
|---|---|
/var/log/nginx/access.log a error.log | každú požiadavku a každú chybu nginx |
/var/log/apt/history.log | čo a kedy apt nainštaloval |
/var/log/unattended-upgrades/ | automatické aktualizácie (lekcia 4.2) |
/var/log/fail2ban.log | blokovania (lekcia 5.3) |
/var/log/mysql/ alebo journal | MariaDB/MySQL, podľa nastavenia |
Veľké textové súbory čítate pomocou less (hľadanie pomocou /), koniec pomocou tail -n 50, naživo pomocou tail -f a filtrujete pomocou grep:
anna@web1:~$ sudo grep " 502 " /var/log/nginx/access.log | tail -n 5Logy kontajnerov Docker nie sú v /var/log, ale priamo v Dockeri: docker compose logs (lekcia 9.3).
Logy nesmú zaplniť váš disk
Plný disk je jednou z najčastejších príčin, prečo server "zrazu" prestane fungovať: databázy sa zastavia, aktualizácie zlyhajú, niekedy sa ani nedá prihlásiť. Vinníkom sú často logy.
Journal sa obmedzuje sám. Predvolene využíva najviac 10 % súborového systému, s maximom 4 GB (SystemMaxUse=). Koľko práve zaberá a ako ho vyčistiť:
anna@web1:~$ journalctl --disk-usage
Archived and active journals take up 512.0M in the file system.
anna@web1:~$ sudo journalctl --vacuum-time=30d # staršie ako 30 dní odstrániť
anna@web1:~$ sudo journalctl --vacuum-size=500M # do 500 MBAk chcete pevný limit, nastavte ho v drop-in súbore /etc/systemd/journald.conf.d/grootte.conf:
[Journal]
SystemMaxUse=1Ga reštartujte journald pomocou sudo systemctl restart systemd-journald.
Textové súbory v /var/log spravuje logrotate: každý deň alebo týždeň sa súbor premenuje (error.log.1), staršie verzie sa skomprimujú (.gz) a najstaršie sa zmažú. Pravidlá pre jednotlivé programy sú v /etc/logrotate.d/. Balíky z distribúcie si prinášajú vlastné pravidlo. Ak vlastný program alebo skript zapisuje do vlastného logovacieho súboru, vytvorte pravidlo sami, inak bude súbor rásť donekonečna.
Hľadanie toho, čo zaberá miesto:
anna@web1:~$ df -h /
anna@web1:~$ sudo du -xh /var/log | sort -h | tail -n 5Logy a ochrana súkromia
Logy obsahujú IP adresy, používateľské mená a niekedy e-mailové adresy: to sú osobné údaje. Neuchovávajte ich dlhšie, než je potrebné (pri malom serveri je bežných niekoľko týždňov až niekoľko mesiacov), nenechávajte ich verejne prístupné (priečinok /logs vo webroote je známa chyba) a nekopírujte ich len tak do služieb tretích strán.
V AlmaLinux a Rocky Linux
journalctl funguje rovnako. Tam je rsyslog stále predvolene zapnutý, so súbormi ako /var/log/messages a /var/log/secure (obdoba auth.log). Hlásenia SELinux sú v /var/log/audit/audit.log; ausearch -m avc -ts recent zobrazí nedávne zamietnutia.
Zhrnutie
- journald zhromažďuje všetky hlásenia v journale; čítajte ho pomocou
journalctl, filtrovaný podľa služby (-u), priority (-p), času (--since) a spustenia (-b). - Overte, že journal je trvalý (
/var/log/journalexistuje), inak po reštarte prídete o logy. - Debian 12 a novší predvolene nemajú rsyslog, a teda ani
/var/log/auth.loga/var/log/syslog; všetko je v journale. - Hľadajte prvú chybu a pozrite sa, čo sa okolo toho okamihu zmenilo.
- Sledujte veľkosť: journal sa obmedzuje sám (
--disk-usage,--vacuum-*), textové súbory rieši logrotate.
Kvíz
Úloha
Úloha Z6.2: Rozbor padajúcej služby. Vo vzorovom súbore journal-crash-1.txt je výstup príkazov systemctl status a journalctl zo služby, ktorá sa stále znova spúšťa a potom to vzdá. Odpovedzte: ako sa služba volá, koľkokrát sa ju systemd pokúsil spustiť, s akým návratovým kódom skončila, aká je príčina podľa prvého chybového hlásenia a o koľkej to systemd vzdal? Program porovná odpovede s pevným kľúčom. Potom sa na vlastnom serveri pozrite, či journalctl -p err -b zobrazuje chyby a či je váš journal trvalý.
Ďalšie čítanie
- Manuál
journalctl(1): https://manpages.debian.org/trixie/systemd/journalctl.1.en.html - Manuál
journald.conf(5)(Storage=, SystemMaxUse=): https://manpages.debian.org/trixie/systemd/journald.conf.5.en.html - Debian 12, poznámky k vydaniu 5.1.7 (rsyslog už nie je predvolený): https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html
- Správa služieb pomocou systemctl na vašom VPS
- VPS: od prvého prihlásenia po bezpečný server 8.4: Čítanie logov pomocou journalctl a docker logs
