Moodul 6 · 6.2
Logide lugemine journalctl-iga
Moodul 6: Teenused ja logid · Lugemisaeg: 11 minutit
Õpieesmärk: Pärast seda õppetundi oskad journalctl-iga oma serveri logidest sihipäraselt otsida (teenuse, prioriteedi ja aja järgi), tead, kus asuvad teised logifailid, ja hoiad ära, et logid su ketta täis kirjutaksid.
Põhimõisted: journald, journal, journalctl -u, -p, --since/--until, -f, -b, -e, -n, prioriteet (err, warning, info), püsiv salvestus, /var/log/journal, --disk-usage, --vacuum-size, /var/log, logrotate, rsyslog
Logi kui esimene tunnistaja
Kui midagi su serveris ei tööta, on põhjus peaaegu alati kirjas mõnes logis. Veebisait, mis näitab vealehte, teenus, mis ei käivitu, varukoopia, mis öösel ei jooksnud: server on selle üles kirjutanud. Hea haldur vaatab kõigepealt logi ja alles seejärel hakkab midagi muutma.
Tänapäevastes Linux-serverites kogub journald (systemd osa) kerneli, systemd enda ja kõigi teenuste teated ühte logisse: journal'isse. Seda loed käsuga journalctl.
Et kõike lugeda, pead olema rühmas adm või systemd-journal või kasutama käsku sudo. Ilma nende õigusteta näed ainult oma teateid.
Kus see asub? Püsiv või ajutine
journald hoiab journal'it ühes kahest kohast:
- kaustas
/var/log/journal/: püsiv, logid jäävad pärast taaskäivitust alles; - kaustas
/run/log/journal/: ajutine, mälus, pärast taaskäivitust kadunud.
Vaikeseade (Storage=auto failis /etc/systemd/journald.conf) valib püsiva salvestuse, kui kaust /var/log/journal/ on olemas. Debianis loob systemd-pakett selle kausta alates Debian 11-st ise ja ka Ubuntus on see olemas. Kontrolli:
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 CETKui näed ainult üht käivitust, kuigi server on juba vähemalt korra taaskäivitunud, on su logid ajutised. Loo kaust (sudo mkdir -p /var/log/journal ja sudo systemd-tmpfiles --create --prefix /var/log/journal) ja taaskäivita journald. See on oluline: pärast krahhi tahad just teada, mis juhtus enne taaskäivitust.
Alates Debian 12-st ei paigalda Debian enam vaikimisi rsyslog'i. See programm kirjutas varem tekstifaile nagu /var/log/syslog ja /var/log/auth.log. Uues Debiani serveris neid seega pole, kõik on journal'is. Ubuntus on rsyslog veel olemas. Juhendid, mis ütlevad „vaata faili /var/log/auth.log”, saad Debianis tõlkida käsuks journalctl -u ssh.
Otsimine: filtrid, mida päriselt kasutad
Ilma filtrita näitab journalctl kõike, alates vanimast. Harva on see see, mida tahad. Tähtsamad filtrid, mida saad omavahel kombineerida:
| Filter | Näide | Mida teeb |
|---|---|---|
-u <unit> | journalctl -u nginx | ainult see teenus |
-p <prioriteit> | journalctl -p err | ainult vead ja raskemad |
--since, --until | --since "2026-11-09 03:00" --until "04:00" | ajavahemik; ka today, yesterday, "1 hour ago" |
-b | journalctl -b, journalctl -b -1 | alates sellest käivitusest või eelmisest |
-f | journalctl -u nginx -f | jälgi otse (nagu tail -f), peata klahvidega Ctrl+C |
-e | journalctl -u ssh -e | hüppa lõppu |
-n | journalctl -u ssh -n 50 | viimased 50 rida |
-k | journalctl -k | ainult kerneli teated |
--no-pager | ilma lehitsemiseta, mugav koos grep-ga |
Prioriteedid ulatuvad 0-st (emerg) 7-ni (debug): emerg, alert, crit, err, warning, notice, info, debug. Valikuga -p err saad err-taseme ja kõik, mis on sellest tõsisem. -p warning näitab ka hoiatusi.
Tüüpiline otsinguteekond. Su veebisait annab alates tänasest hommikust vea 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'.Põhjus on sõna-sõnalt kirjas: trükiviga konfiguratsioonifaili real 42. Olek 78 (CONFIG) kinnitab, et tegu on konfiguratsiooniveaga. Midagi pole vaja arvata.
Kaks nõuannet lugemiseks:
- Loe ülevalt alla ja otsi esimest viga. Üks viga põhjustab sageli terve rea järgnevaid teateid. Esimene on tavaliselt põhjus.
- Pane tähele aega. Mis muutus selle hetke paiku? Automaatne uuendus (õppetund 4.2:
/var/log/unattended-upgrades/), sinu enda muudatus, taaskäivitus?
Teised logifailid
Kõik ei ole journal'is. Paljud programmid kirjutavad ka (või ainult) oma faile kausta /var/log/:
| Fail või kaust | Mida sisaldab |
|---|---|
/var/log/nginx/access.log ja error.log | nginxi iga päring ja iga viga |
/var/log/apt/history.log | mida apt millal paigaldas |
/var/log/unattended-upgrades/ | automaatsed uuendused (õppetund 4.2) |
/var/log/fail2ban.log | blokeeringud (õppetund 5.3) |
/var/log/mysql/ või journal | MariaDB/MySQL, olenevalt seadistusest |
Suuri tekstifaile loed käsuga less (otsing klahviga /), lõppu käsuga tail -n 50, otse jälgides käsuga tail -f ja filtreerid käsuga grep:
anna@web1:~$ sudo grep " 502 " /var/log/nginx/access.log | tail -n 5Docker-konteinerite logid ei ole kaustas /var/log, vaid Dockeri enda juures: docker compose logs (õppetund 9.3).
Logid ei tohi su ketast täita
Täis ketas on üks levinumaid põhjusi, miks server „äkki” enam ei tööta: andmebaasid peatuvad, uuendused ebaõnnestuvad, mõnikord ei saa isegi sisse logida. Süüdlaseks on sageli logid.
Journal piirab end ise. Vaikimisi kasutab see kuni 10% failisüsteemist, maksimaalselt 4 GB (SystemMaxUse=). Nii näed, palju see praegu kasutab, ja nii koristad:
anna@web1:~$ journalctl --disk-usage
Archived and active journals take up 512.0M in the file system.
anna@web1:~$ sudo journalctl --vacuum-time=30d # vanemad kui 30 päeva kustutatakse
anna@web1:~$ sudo journalctl --vacuum-size=500M # kuni 500 MBKui tahad kindlat piiri, pane drop-in-faili /etc/systemd/journald.conf.d/grootte.conf:
[Journal]
SystemMaxUse=1Gja taaskäivita journald käsuga sudo systemctl restart systemd-journald.
Kausta /var/log tekstifaile haldab logrotate: iga päev või nädal nimetatakse fail ümber (error.log.1), vanemad versioonid pakitakse (.gz) ja vanimad kustutatakse. Iga programmi reeglid on kaustas /etc/logrotate.d/. Distributsiooni paketid toovad oma reegli kaasa. Kui su enda programm või skript kirjutab omaette logifaili, loo reegel ise, muidu kasvab fail lõputult.
Otsi, mis ruumi võtab:
anna@web1:~$ df -h /
anna@web1:~$ sudo du -xh /var/log | sort -h | tail -n 5Logid ja privaatsus
Logides on IP-aadressid, kasutajanimed ja mõnikord e-posti aadressid: need on isikuandmed. Ära hoia neid kauem kui vaja (väikese serveri puhul on tavaline paar nädalat kuni paar kuud), ära jäta neid avalikult kättesaadavaks (kaust /logs sinu webrootis on tuntud viga) ega kopeeri neid niisama teiste teenustesse.
AlmaLinuxis ja Rocky Linuxis
journalctl töötab samamoodi. Seal on rsyslog veel vaikimisi sees, failidega nagu /var/log/messages ja /var/log/secure (vaste failile auth.log). SELinuxi teated on failis /var/log/audit/audit.log; ausearch -m avc -ts recent näitab hiljutisi keeldumisi.
Kokkuvõte
- journald kogub kõik teated journal'isse; loe seda käsuga
journalctl, filtreerides teenuse (-u), prioriteedi (-p), aja (--since) ja käivituse (-b) järgi. - Kontrolli, et journal oleks püsiv (
/var/log/journalon olemas), muidu kaotad pärast taaskäivitust oma logid. - Debian 12-s ja uuemates pole vaikimisi rsyslog'i ega seega faile
/var/log/auth.logja/var/log/syslog; kõik on journal'is. - Otsi esimest viga ja vaata, mis selle hetke paiku muutus.
- Jälgi mahtu: journal piirab end ise (
--disk-usage,--vacuum-*), tekstifaile haldab logrotate.
Test (quiz)
Ülesanne
Ülesanne Z6.2: Krahhiva teenuse analüüs. Näidisfailis journal-crash-1.txt on käskude systemctl status ja journalctl väljund teenuse kohta, mis käivitub ikka ja jälle uuesti ning annab siis alla. Vasta: mis on teenuse nimi, mitu korda üritas systemd seda käivitada, millise väljumiskoodiga see peatus, mis on põhjus esimese veateate järgi ja mis kell systemd alla andis? Programm võrdleb vastuseid kindla võtmega. Seejärel vaata oma serveris, kas journalctl -p err -b näitab vigu ja kas su journal on püsiv.
Loe edasi
- Käsiraamat
journalctl(1): https://manpages.debian.org/trixie/systemd/journalctl.1.en.html - Käsiraamat
journald.conf(5)(Storage=, SystemMaxUse=): https://manpages.debian.org/trixie/systemd/journald.conf.5.en.html - Debian 12 väljalaskemärkmed, 5.1.7 (rsyslog pole enam vaikimisi): https://www.debian.org/releases/bookworm/amd64/release-notes/ch-information.en.html
