Upravljanje dnevnikov v Linuxu: uporaba ukazov journalctl za dnevnike systemd
Raven: Začetnik
Ocenjeni čas: ~20 minut
Cilj: Naučiti se poizvedovati, filtrirati in upravljati sistemske dnevnike ter dnevnike storitev ter z dnevniki Linuxa za odpravljanje težav rešiti težave in ohranjati razpoložljivost strežnika.
Uvod
Zanesljivo upravljanje dnevnikov v Linuxu je bistveno za ohranjanje razpoložljivosti strežnika in izvajanje diagnostike strežnika Linux. Pri upravljanju spletnih strežnikov morate hitro analizirati sistemske dnevnike z journalctl, da najdete vzrok težave. Systemd (sistem init in upravitelj storitev večine sodobnih distribucij Linuxa) zbira sistemske dnevnike (splošne zapise sistemskih operacij in dogodkov na ravni celotnega sistema). Posamezen dnevnik (log) (zapis dogodkov, ki se zgodijo znotraj operacijskega sistema ali aplikacije) zbira Systemd-journald (sistemska storitev, ki zbira in shranjuje podatke dnevnikov) in ga shrani v Journal (binarne podatke dnevnikov, ki jih ustvarja in upravlja systemd-journald). Za ogled teh podatkov uporabljamo Journalctl (orodje ukazne vrstice za poizvedovanje in prikaz dnevnikov systemd). Ta vodnik se osredotoča na uporabo ukazov journalctl za poizvedovanje, filtriranje in upravljanje dnevnikov systemd v journalctl. Na koncu se boste samozavestno premikali po ukazni vrstici in učinkovito uporabljali dnevnike Linuxa za odpravljanje težav.
Predpogoji
Pred začetkom se prepričajte, da so izpolnjeni naslednji pogoji:
- Operacijski sistem: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12/13 ali AlmaLinux/Rocky 8/9/10
- Strojne in omrežne zahteve: brez (ta vodnik uporablja osnovna orodja ukazne vrstice)
- Dostop: dostop sudo ali root do strežnika
- Zahtevano znanje: osnovna uporaba ukazne vrstice Linuxa
Korak 1: Upravljanje dnevnikov v Linuxu: nestalni in trajni dnevniki
Nekateri sistemi privzeto nastavijo journal tako, da uporablja nestalne dnevnike (dnevnike, shranjene samo v RAM-u, ki se ob ponovnem zagonu izgubijo). Za učinkovito upravljanje dnevnikov v Linuxu potrebujemo trajne dnevnike (dnevnike, shranjene na disku, ki ostanejo po ponovnih zagonih), da lahko zrušitve preiščete tudi po ponovnem zagonu.
Zaženite naslednji ukaz in preverite konfiguracijo shranjevanja:
sudo grep -i 'storage' /etc/systemd/journald.conf
Pričakovani izpis:
#Storage=auto
Videti bi morali izpis, ki kaže, ali je shranjevanje nastavljeno na auto, persistent ali volatile. Zakomentirana vrstica #Storage=auto pomeni, da se uporablja privzeto vedenje auto.
V RHEL/AlmaLinux/Rocky datoteka /etc/systemd/journald.conf privzeto morda ne obstaja. V tem primeru lahko preverite /usr/lib/systemd/journald.conf ali storitev konfigurirate z ustvarjanjem datoteke /etc/systemd/journald.conf.d/persistent.conf.
V Ubuntu 24.04 in Debianu 13 imenik /var/log/journal že obstaja, trajno beleženje pa deluje brez dodatne konfiguracije. Če imenik manjka (na primer pri novi namestitvi AlmaLinux) in želite vsiliti trajno beleženje, ustvarite imenik in znova zaženite sistem beleženja systemd (ta imenik upravlja storitev systemd-journald):
sudo mkdir -p /var/log/journal sudo systemctl restart systemd-journald
V sistemih AlmaLinux/RHEL morate dnevnike dodatno prenesti (flush) iz nestalne lokacije /run/log/journal v novo trajno shrambo na disku:
sudo journalctl --flush
Izpisa ne bi smeli videti. To potrjuje, da se je storitev uspešno znova zagnala in bo zdaj trajne podatke zapisovala na disk.
Korak 2: Osnovni ukazi journalctl za dnevnike systemd
Za ogled vseh razpoložljivih vnosov uporabite privzeti ukaz.
Zaženite naslednji ukaz:
sudo journalctl
Pričakovani izpis:
May 20 10:00:00 server systemd[1]: Started Logging Service. May 20 10:00:01 server kernel: Linux version 5.15.0-101-generic...
Videti bi morali razdeljen seznam vseh dnevnikov systemd na vašem strežniku. Za izhod iz pregledovalnika (pager) pritisnite q.
Od različice systemd 255 naprej (na primer v Ubuntu 24.04, Debianu 13 in AlmaLinux 10) se glava -- Logs begin at... privzeto ne prikazuje več.
Za učinkovito analizo dnevnikov z journalctl redko želite brati vse od začetka. Izpis lahko obrnete in najprej vidite najnovejše vnose z zastavico -r.
Zaženite naslednji ukaz:
sudo journalctl -r
Pričakovani izpis:
May 23 20:00:00 server sshd[1234]: Accepted publickey for user from 192.168.1.50... May 23 19:59:58 server systemd[1]: Session 4 created for user.
Najnovejše vnose dnevnika bi morali videti na vrhu zaslona. To je ključna tehnika za hitro analizo dnevnikov z journalctl po incidentu.
Zastavica -r je še posebej uporabna, kadar vaš strežnik deluje že mesece, saj lahko v trenutku preskočite na tisoče starih dogodkov.
Korak 3: Kako preveriti dnevnike storitve
Pogosto morate odpraviti težave z določeno enoto (unit) (objektom, ki ga systemd zna upravljati), na primer s storitveno enoto (service unit) (vrsta enote, ki nadzoruje storitev, kot sta nginx ali sshd). Z zastavico -u preverite dnevnike storitve, na primer spletnega strežnika nginx.
Zaženite naslednji ukaz (ob predpostavki, da je storitev nameščena, npr. z sudo apt install nginx -y ali sudo dnf install nginx -y):
sudo journalctl -u nginx
Pričakovani izpis:
May 23 18:00:00 server systemd[1]: Starting A high performance web server and a reverse proxy server... May 23 18:00:01 server systemd[1]: Started A high performance web server and a reverse proxy server.
Videti bi morali samo vnose dnevnika, ki jih je ustvarila storitev nginx. To pomaga ločiti napake spletnega prometa od drugih sistemskih dogodkov v ozadju. Če storitev ni nameščena, boste videli samo -- No entries --.
Za preverjanje dnevnikov demona SSH je ime enote odvisno od distribucije.
Za Ubuntu/Debian zaženite:
sudo journalctl -u ssh
Za AlmaLinux/RHEL/Rocky zaženite:
sudo journalctl -u sshd
Pričakovani izpis:
May 23 19:50:00 server sshd[1234]: Invalid user admin from 10.0.0.5 port 55432 May 23 19:55:00 server sshd[1235]: Accepted publickey for root from 10.0.0.2 port 44322
Videti bi morali poskuse overjanja in dogodke demona SSH.
Korak 4: Filtriranje dnevnikov z journalctl po času in vrsti
Pri veliki količini podatkov potrebujete filtriranje dnevnikov (postopek zožanja izpisa dnevnikov glede na določena merila). Filtriranje dnevnikov z journalctl po času je izjemno uporabno, kadar je izpad nastopil ob znanem času.
Za ogled sporočil, ustvarjenih od zadnjega zagona, preverimo zagonske dnevnike (zapise dogodkov, ki se zgodijo med zagonom sistema).
Zaženite naslednji ukaz:
sudo journalctl -b
Pričakovani izpis:
May 23 08:00:00 server kernel: Linux version 5.15.0-101-generic... May 23 08:00:00 server kernel: Command line: BOOT_IMAGE=/boot/vmlinuz...
Izpis bi se moral začeti s prvim dogodkom trenutnega zagonskega zaporedja.
Za časovno filtriranje dnevnikov z journalctl uporabite --since in --until.
Zaženite naslednji ukaz:
sudo journalctl --since "1 hour ago"
Pričakovani izpis:
May 23 19:00:00 server cron[567]: (root) CMD (/usr/local/bin/backup.sh) May 23 19:05:00 server sudo[580]: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/bin/ls
Videti bi morali vse dogodke zadnjih 60 minut.
Za ogled dnevnikov jedra (sporočil, ki jih ustvari jedro Linuxa, običajno dogodkov strojne opreme in gonilnikov) uporabite zastavico -k.
Zaženite naslednji ukaz:
sudo journalctl -k
Pričakovani izpis:
May 23 08:00:00 server kernel: e1000e: eth0 NIC Link is Up 1000 Mbps Full Duplex May 23 08:00:01 server kernel: IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Videti bi morali nizkonivojska sporočila jedra, uporabna pri diagnosticiranju težav s strojno opremo ali gonilniki.
Korak 5: Filtriranje po prioriteti
Vsak vnos ima prioriteto (raven resnosti, dodeljeno sporočilu dnevnika). Ravni segajo od Debug (najnižja raven prioritete, uporabljena za podrobne informacije za odpravljanje težav) do Error (raven prioritete, ki označuje odpoved storitve ali procesa). Pogosto preverjana raven je Warning (raven prioritete, ki označuje morebitne težave, ki trenutno še niso napake).
Za filtriranje dnevnikov z journalctl po prioriteti uporabite zastavico -p.
Zaženite naslednji ukaz za ogled samo napak:
sudo journalctl -p err
Pričakovani izpis:
May 23 10:15:20 server systemd[1]: Failed to start Custom Application Service. May 23 14:30:00 server sshd[1122]: error: kex_exchange_identification: Connection closed by remote host
Videti bi morali strnjen seznam, ki vsebuje samo sporočila ravni error, običajno delovanje pa je izločeno.
Zaženite naslednji ukaz za ogled opozoril in napak:
sudo journalctl -p warning
Pričakovani izpis:
May 23 10:15:15 server systemd-udevd[330]: vda: Process '/usr/bin/unshare -m /usr/bin/snap auto-import --mount=/dev/vda' failed with exit code 1. May 23 10:15:20 server dhcpcd[400]: eth0: no IPv6 Routers available
Videti bi morali tako opozorila kot napake, kar ponuja širši pregled morebitnih težav. V čistem operacijskem sistemu so običajna rutinska opozorila storitev, kot so multipathd, irqbalance, dhcpcd ali udev, in ne kritične odpovedi storitev. Natančen izpis je močno odvisen od konfiguracije in okolja vašega sistema.
Korak 6: Kako spremljati dnevnike Linuxa v realnem času
Pri uveljavljanju sprememb konfiguracije ali ponovnem ustvarjanju težave je najbolje spremljati dnevnike Linuxa v realnem času. Uporabite zastavico -f (follow).
Zaženite naslednji ukaz:
sudo journalctl -f
Pričakovani izpis:
May 23 20:05:00 server sudo[2001]: user : TTY=pts/1 ; PWD=/ ; USER=root ; COMMAND=/bin/bash May 23 20:05:00 server su[2002]: (to root) user on pts/1 May 23 20:05:00 server su[2002]: pam_unix(su:session): session opened for user root by user(uid=1000)
Videti bi morali zadnje vnose dnevnika, terminal pa bo ostal aktiven in sproti izpisoval nove dogodke. Za izhod pritisnite Ctrl+C.
Za spremljanje dnevnikov demona SSH v realnem času je ime enote odvisno od distribucije.
Za Ubuntu/Debian zaženite:
sudo journalctl -u ssh -f
Za AlmaLinux/RHEL/Rocky zaženite:
sudo journalctl -u sshd -f
Pričakovani izpis:
May 23 20:10:15 server sshd[2100]: Connection from 192.168.1.100 port 45678 May 23 20:10:17 server sshd[2100]: Accepted publickey for admin from 192.168.1.100 port 45678 May 23 20:10:17 server sshd[2100]: pam_unix(sshd:session): session opened for user admin by (uid=0)
Videti bi morali poskuse overjanja SSH v živo, ko se zgodijo.
Korak 7: Prostor na disku in rotacija dnevnikov
Journal systemd lahko sčasoma zelo naraste. Arhiviranje in brisanje starih dnevnikov za prihranek prostora imenujemo rotacija dnevnikov. Preverite lahko, koliko prostora trenutno zaseda journal systemd.
Zaženite naslednji ukaz:
sudo journalctl --disk-usage
Pričakovani izpis:
Archived and active journals take up 200.0M in the file system.
Videti bi morali izpis, ki kaže skupni prostor, ki ga zasedajo vaše datoteke dnevnikov.
Za ročno rotacijo dnevnikov in sprostitev prostora na disku lahko podatke počistite (vacuum) glede na čas ali velikost.
Zaženite naslednji ukaz, da obdržite samo zadnjih 500 MB podatkov:
sudo journalctl --vacuum-size=500M
Pričakovani izpis:
Vacuuming done, freed 0B of archived journals from /var/log/journal.
Videti bi morali izpis, ki kaže, da so bile stare datoteke izbrisane, dokler skupna velikost ni padla pod 500 MB.
Čiščenje (vacuum) journala trajno izbriše starejše vnose. Preden zaženete ta ukaz, se prepričajte, da jih ne potrebujete zaradi skladnosti ali preiskave.
Storitev systemd-journald samodejno rotira dnevnike glede na omejitve v /etc/systemd/journald.conf. Ročno čiščenje običajno ni potrebno, razen če se disk nenadoma napolni.
Preverjanje
Da se prepričate, da konfiguracija beleženja deluje pravilno in je trajno shranjevanje aktivno:
- Preverite, ali je bila ustvarjena lokacija za shranjevanje dnevnikov:
Videti bi morali imenik v lasti uporabnika root. Glede na distribucijo je skupina lahkols -ld /var/log/journal
systemd-journalaliroot(obe sta običajni). - Potrdite, da journald deluje:
Videti bi morali, da je storitev v stanjusudo systemctl status systemd-journald
active (running).
Odpravljanje težav
Če pri upravljanju dnevnikov naletite na težave, preverite te pogoste scenarije:
- Prazni dnevniki storitve (
-- No entries --): Prepričajte se, da je storitev dejansko nameščena in zagnana. Preverite tudi, ali uporabljate pravilno ime enote za svojo distribucijo (npr.sshv Debianu/Ubuntu v primerjavi ssshdv RHEL/AlmaLinux). - Manjkajoči
/var/log/journal: V nekaterih sistemih (kot je AlmaLinux) morate ta imenik ustvariti ročno in znova zagnati storitev beleženja, da omogočite trajne dnevnike. Če ta korak izpustite, bodo dnevniki ostali v nestalnem pomnilniku (/run/log/journal). - Dostop zavrnjen (Permission denied): Če dnevnikov ne morete brati brez sudo, preverite, ali je vaš uporabnik član skupine
systemd-journalaliadm(sudo usermod -aG systemd-journal $USER).
Razveljavitev sprememb
Če želite onemogočiti trajno beleženje in se vrniti k nestalnim dnevnikom (na primer za prihranek prostora na disku):
- Odstranite imenik trajnega shranjevanja:
sudo rm -rf /var/log/journal
- Znova zaženite storitev beleženja, da znova ustvarite nestalno shrambo v
/run/log/journal:sudo systemctl restart systemd-journald
Zaključek
To je vse. Zdaj poznate osnove upravljanja dnevnikov v Linuxu. Z ustreznimi ukazi journalctl lahko učinkovito brskate po dnevnikih systemd, uporabljate filtre in upravljate prostor na disku. Ne glede na to, ali morate po zrušitvi analizirati dnevnike z journalctl ali le preveriti stanje storitve, je obvladovanje journalctl ključen korak pri vzdrževanju zdrave infrastrukture.
Različica dokumenta: 1.0
Zadnja posodobitev: maj 2026
Lastnik: Ekipa za tehnično dokumentacijo