Prejsť na obsah

Nastavenia súborov cookie

Vyberte, aké druhy súborov cookie povolíte. Svoj výber môžete kedykoľvek zmeniť cez Nastavenia súborov cookie v dolnej časti každej stránky. Vyhlásenie o ochrane osobných údajov

Nevyhnutné

Vždy zapnuté

Potrebné na prihlásenie, uchovanie košíka a zapamätanie vašich volieb. Sú vždy zapnuté.

Ktoré súbory cookie?
  • weboke_sessie, weboke_klant, weboke_remember: vaša relácia a trvalé prihlásenie
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazovanie cien s DPH alebo bez DPH
  • wok_cookies: váš výber súborov cookie, 12 mesiacov

Merajú, ktorá reklama vedie k návšteve alebo objednávke, aby sme neplatili za reklamy, ktoré nič neprinášajú.

Ktoré súbory cookie?
  • Google Ads cez Google Tag Manager (_gcl_au, _gcl_aw), najviac 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: ktorý partner vás k nám odporučil (partnerský program), 60 dní

4,6

Krajina a jazyk

Každá krajina má vlastný web s cenami a DPH danej krajiny.

Zobraziť

Čí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 CET

Ak 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ť:

FilterPríkladČo robí
-u <unit>journalctl -u nginxiba daná služba
-p <prioriteit>journalctl -p erriba 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"
-bjournalctl -b, journalctl -b -1od tohto spustenia, alebo predchádzajúce
-fjournalctl -u nginx -fsledovanie naživo (ako tail -f), ukončenie pomocou Ctrl+C
-ejournalctl -u ssh -eskok na koniec
-njournalctl -u ssh -n 50posledných 50 riadkov
-kjournalctl -kiba hlásenia jadra
--no-pagerbez 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.logkaž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.logblokovania (lekcia 5.3)
/var/log/mysql/ alebo journalMariaDB/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 5

Logy 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 MB

Ak chcete pevný limit, nastavte ho v drop-in súbore /etc/systemd/journald.conf.d/grootte.conf:

[Journal]
SystemMaxUse=1G

a 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 5

Logy 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/journal existuje), inak po reštarte prídete o logy.
  • Debian 12 a novší predvolene nemajú rsyslog, a teda ani /var/log/auth.log a /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

1. Ktorý príkaz zobrazí iba dnešné chyby nginx?



2. Váš server sa v noci po páde reštartoval. journalctl -b -1 vypíše "Specifying boot ID or boot offset has no effect, no persistent journal was found". Čo to znamená?



3. Návod hovorí, že neúspešné prihlásenia cez SSH nájdete v /var/log/auth.log, ale na vašom novom serveri s Debian 13 tento súbor neexistuje. Kam sa pozriete?



4. V logu je dvadsať chybových hlásení za sebou. Kde začnete?



5. Váš disk je plný a journalctl --disk-usage hlási 400 MB. Aký je najlepší ďalší krok?



Ú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ý.

Úloha Z6.2: Rozbor padajúcej služby

Súbor k tejto úlohe: journal-crash-1.txt







Čo vyplníte a čo nájdeme, neukladáme. Váš prehliadač si pamätá vaše odpovede a to, či ste úlohu splnili. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že úloha bola (takmer) správne vyriešená; aj to tam môžete odstrániť.

Ďalšie čítanie

Chvíľu strpenia…

Nastavte svoje domény

Pri každej doméne nastavte nameservery, prepojenie s hostingom a to, kto bude jej vlastníkom.

Načítavajú sa vaše domény…