Kaj je Journalctl in kaj zmore?
Journalctl je učinkovita rešitev za upravljanje in analizo sistemskih dnevnikov v okolju Linux. To orodje se lahko uporablja za spremljanje sistemskih dejavnosti, odpravljanje napak in spremljanje dnevnikov v realnem času, pri čemer zagotavlja ključne informacije za učinkovito diagnosticiranje sistemskih težav.
Kaj je Journalctl?
journalctl je zmogljivo orodje za poizvedovanje in prikazovanje dnevnikov dogodkov ali dnevniških datotek v sistemu Linux. Je osrednji del paketa za upravljanje sistema in storitev systemd, ki je vključen v številne sodobne distribucije Linuxa, kot so Ubuntu, Fedora in Arch Linux. Ime »journalctl« je sestavljeno iz besed »journal« (dnevnik) in »ctl« (nadzor), kar nakazuje, da se ukaz uporablja za nadzor in analizo dnevnikov.
journalctl olajša dostop do sistemskega dnevnika, ki ga upravlja systemd-journald. Sistemski dnevnik je centralizirana zbirka sporočil in dogodkov, ki se pojavijo med delovanjem sistema Linux. Za razliko od tradicionalnih besedilnih dnevnikov journalctl omogoča strukturiran in učinkovit način iskanja, filtriranja in prikazovanja podatkov dnevnika v realnem času. To lahko pomaga pri diagnosticiranju težav ali spremljanju stanja sistema.
V ta namen Journalctl shranjuje dnevniške datoteke v binarnem formatu, saj so binarne dnevniške datoteke bolj kompaktne in učinkovite kot njihove besedilne različice. Glede na veliko količino zabeleženih podatkov to omogoča hitrejše in učinkovitejše iskanje posameznih dogodkov ali informacij v dnevniških datotekah. Zaradi svoje strukturirane in šifrirane narave binarne dnevniške datoteke v primerjavi z besedilnimi dnevniki zagotavljajo tudi večjo varnost, saj njihov format otežuje manipulacijo z dnevniškimi podatki.
Kako prilagoditi prostor za shranjevanje dnevniških datotek
journalctl se lahko uporabi za omejitev in nastavitev prostora na trdem disku, ki ga zasedajo dnevniške datoteke. To se izvede prek nastavitev storitve systemd-journald. Nastavitve so shranjene v datoteki /etc/systemd/journald.conf. V njej boste našli naslednje vnose:
SystemMaxUse: Omeji prostor za shranjevanje dnevnikov v sistemskem imenikuRuntimeMaxUse: Omeji prostor za shranjevanje dnevnikov v začasnem imeniku
Če želite nastaviti omejitev pomnilnika, dodajte naslednje vrstice ali jih po potrebi spremenite:
[Journal]
SystemMaxUse=50M
RuntimeMaxUse=50MbashVrednosti iz tega primera (50M) lahko po potrebi spremenite. Uporabite lahko tudi druge enote, kot so K (kilobajtov), M (megabajtov), G (gigabajtov) ali T (terabajtov). Ko uredite konfiguracijsko datoteko, je treba za uveljavitev sprememb ponovno zagnati program systemd-journald:
sudo systemctl restart systemd-journaldbashČe sledite tem korakom, bo program systemd-journald nastavljen tako, da bo omejil prostor na disku za datoteke dnevnikov. Prepričajte se, da izbrana omejitev omogoča zadostno shranjevanje pomembnih podatkov iz dnevnikov. Hkrati je pomembno, da ne porabite preveč prostora na disku. Upoštevajte, da se starejši dnevniki samodejno izbrišejo, ko je dosežena omejitev dodeljenega prostora na disku.
Preveri porabo prostora na disku
Preden prilagodite prostor za shranjevanje dnevniških datotek, preverite, koliko prostora trenutno zaseda dnevnik. Za to uporabite --disk-usage:
journalctl --disk-usagebashTukaj je primer, kako izgleda izpis:
Journals take up 8.0M on disk.bashIzbriši stare vpise v dnevniku
Če dnevnik zavzema preveč pomnilnika, lahko izbrišete stare vpise v dnevniku. To lahko storite na dva načina:
Uporabite --vacuum-size, da zmanjšate velikost dnevnika tako, da določite želeno velikost. Pri tej metodi se stari vnosi odstranjujejo, dokler skupni prostor za shranjevanje dnevnika na trdem disku ne doseže želene velikosti.
sudo journalctl --vacuum-size=1GbashDruga možnost je, da dnevnik skrčite tako, da z možnostjo --vacuum-time nastavite obdobje hrambe. Vnosi, starejši od določenega časa, bodo izbrisani. Če želite ohraniti dnevniške vnose iz preteklega leta, lahko uporabite naslednji ukaz:
sudo journalctl --vacuum-time=1yearsbashKaj lahko naredi Journalctl?
journalctl ponuja zmogljive možnosti filtriranja, ki uporabnikom omogočajo pregledovanje vnosov v dnevniku na podlagi različnih meril. Ta funkcija omogoča ciljno iskanje relevantnih informacij, kar pospeši odkrivanje težav. Tukaj je nekaj pogosto uporabljanih možnosti journalctl:
Prikaži dnevnike
Z izvedbo ukaza journalctl se prikažejo vnosi dnevnika za trenutni sistem v obratnem kronološkem vrstnem redu. Z ukazoma journalctl -f ali journalctl --follow lahko vnose prikažete v realnem času. Novi vnosi se samodejno prikažejo v vrstnem redu, v katerem prispejo.
Glede na to, kako dolgo sistemd že deluje v vašem sistemu, se bo verjetno prikazala ogromna količina podatkov, ki lahko obsega več deset ali celo več sto tisoč vrstic. Da bi lažje našli tisto, kar iščete, lahko dnevnike dodatno filtrirate z različnimi ukazi v sistemu Linux.
Kako filtrirati po času
Z uporabo journalctl je mogoče dnevnike filtrirati glede na določen časovni trenutek, kar omogoča učinkovitejše iskanje relevantnih informacij.
Filtriraj po zagonskem procesu
Filtriranje dnevnikov po postopku zagona se izkaže za neprecenljivo pri preučevanju sistemskih dogodkov v natančno določenih časovnih trenutkih ali med različnimi scenariji zagona. Ta ciljno usmerjen pristop poenostavi diagnosticiranje težav, saj dnevniške vpise osredotoči na določene sistemske stanje ali konfiguracije.
- Trenutni zagon: Z
journalctl -bse prikažejo vsi vnosi v dnevniku, zbrani od zadnjega ponovnega zagona. - Pretekli zagoni: Uporabite možnost
-b, ki ji sledi številka, da prikažete vpise v dnevniku za določen pretekli zagon. Če na primer vnesetejournalctl -b 1, se prikaže pretekli zagon. - Seznam vseh razpoložljivih zagonskih procesov: Ukaz
journalctl --list-bootsprikaže seznam razpoložljivih zagonskih procesov z njihovimi ID-ji. Z želenim ID-jem zagonskega procesa lahko prikažete dnevnike za določen zagonski proces.
Čeprav je shranjevanje preteklih zagonskih postopkov v nekaterih distribucijah Linuxa privzeto omogočeno, ga bodo uporabniki v drugih distribucijah morda morali najprej vklopiti. Za to ustvarite mapo, v katero se bo dnevnik shranjeval, tako da vnesete sudo mkdir -p /var/log/journal. Druga možnost je, da uredite konfiguracijsko datoteko dnevnika s sudo nano /etc/systemd/journald.conf. Nato nastavite možnost Storage= pod [Journal] na persistent, da vklopite trajno beleženje:
. . .
[Journal]
Storage=persistentbashFiltriraj po časovnem oknu
Včasih je morda potrebno prikazati vpise v dnevniku za določeno časovno obdobje. journalctl ponuja možnosti --since in --until, s katerimi lahko omejite vpise na določeno obdobje. Za to uporabite časovni format YYYY-MM-DD HH:MM:SS. Ukaz za prikaz vseh vpisov v dnevniku med 1. januarjem 2023 ob 12:00 in 2. januarjem 2023 ob 12:00 je naslednji:
journalctl --since "2023-01-01 12:00:00" --until "2023-01-02 12:00:00"bashZ združitvijo teh dveh ukazov lahko filtrirate tudi za krajše časovno obdobje:
journalctl --since 09:00 --until "1 hour ago"bashLahko pa tudi izpustite dele formata. Če na primer želite prikazati vse vnose od določenega časovnega trenutka naprej:
journalctl --since "2023-11-16 15:25:00"bashjournalctl prepozna tudi relativne vrednosti, kot so yesterday, today ali tomorrow. Če želite prikazati vnose iz včerajšnjega dne, vnesite naslednje:
journalctl --since yesterdaybashKako filtrirati po značilnostih sporočil
Uporaba journalctl za filtriranje dnevniških vnosov glede na pomembnost ali vsebino je prav tako izredno koristna, saj omogoča iskanje relevantnih informacij in osredotočenje na določene vidike sistemskih dnevnikov. To med drugim omogoča učinkovito odkrivanje napak, zgodnje zaznavanje varnostnih težav in hitro spremljanje delovanja sistema.
Filtriraj po pomembnosti
Če želite dnevnike s journalctl filtrirati po pomembnosti sporočil, lahko uporabite kategorije prednosti za vpise v dnevniku. Za to lahko uporabite ime prednosti ali ustrezno številčno vrednost. Nižja kot je številka, pomembnejše je sporočilo:
- 0: emerg (nujni primer)
- 1: alert (alarm)
- 2: krit (kritično)
- 3: err (napaka)
- 4: warning (opozorilo)
- 5: obvestilo (opomba)
- 6: info (informacija)
- 7: debug (odpravljanje napak)
Sporočila z določeno prioriteto je mogoče filtrirati z uporabo opcije -p. Na primer, naslednji ukaz prikaže le vpise v dnevniku s prioriteto »err« (napaka) ali višjo:
journalctl -p errbashFiltriraj po enoti
Filtriranje dnevnikov po enoti je koristno, če se želite osredotočiti na določene storitve ali procese. Te lahko filtrirate z uporabo možnosti -u. Če želite na primer prikazati vpise v dnevniku za spletni strežnik Apache, vnesite naslednje:
journalctl -u apache2bashIskanje lahko dodatno omejite z uporabo časovnih vrednosti. Če želite ugotoviti, ali je bila storitev danes že opravljena, vnesite naslednje:
journalctl -u apache2 --since todaybashjournalctl lahko združi zapise podatkov iz različnih enot. Če je na primer vaš proces Nginx povezan z enoto PHP FPM, se lahko njuni zapisi združijo po časovnem zaporedju. Ukaz za to je:
journalctl -u nginx.service -u php-fpm.service --since today-u apache2 --since todaybashFiltriraj po ID-ju procesa, uporabnika ali skupine
Journalctl lahko filtrira vpise v dnevniku po ID-ju procesa, uporabnika ali skupine. Če poznate natančno PID š te vilko procesa, ki ga želite poiskati, lahko za filtriranje vpisov uporabite opcijo _PID. Če je na primer PID 8088, bi ukaz izgledal takole:
journalctl _PID=8088bashPoleg tega lahko uporabite filtre _UID ali _GID za prikaz vseh vnosov, ki jih je zabeležil določen uporabnik ali skupina. Če se na primer vaš spletni strežnik imenuje »www-data«, lahko ID uporabnika poiščete tako, da storite naslednje:
id -u www-data
33bashVknjižbe je mogoče filtrirati po identifikacijski številki:
journalctl _UID=33 --since todaybashČe želite ugotoviti, za katere ID-je skupin so bili vnosi ustvarjeni, lahko uporabite možnost -F. S tem se prikažejo vse vrednosti, ki so bile shranjene v polju »ID skupine«:
journalctl -F _GIDbashTukaj je primer izpisa:
32
99
102
133
81
84
100
0
124
87bashFiltriraj po komponenti
Filtriranje po komponenti je koristno za osredotočanje na določene aplikacije, storitve ali procese. Polje »komponenta« običajno uporabljajo različne storitve ali programske komponente za razlikovanje določenih informacij v dnevnikih. To filtriranje omogoča omejitev vnosov v dnevniku na določeno komponento, aplikacijo ali storitveno enoto. Če želite na primer filtrirati vnose, ki vsebujejo izvedljivo datoteko bash, vnesite naslednji ukaz:
journalctl /usr/bin/bashbashPrikaži sporočila jedra
Filtriranje dnevniških vnosov za sporočila jedra s journalctl je učinkovit način za analizo podatkov o delovanju jedra v sistemu Linux. Sporočila jedra lahko nakazujejo težave s strojno opremo, konflikte med gonilniki ali druge sistemske dogodke.
Sporočila jedra, ki jih najdemo v izpisu dmesg, je mogoče filtrirati tudi iz dnevnika. Prikazati jih je mogoče z ukazom `-k or ``:
journalctl -kbashPrivzeto se prikazujejo sporočila jedra iz trenutnega zagonskega procesa. Sporočila iz alternativnega zagona lahko filtrirate s pomočjo prej omenjenih zastavic za izbiro zagona. Če želite na primer pregledati sporočila jedra iz zadnjih petih zagonskih procesov, vnesite:
journalctl -k -b -5bashSpreminjanje prikaza dnevnika v Journalctl
Prilagajanje prikaza v journalctl omogoča uporabnikom natančnejše iskanje po dnevnikih in hitro pridobivanje informacij. Uporabniki lahko prilagodijo prikaz tako, da se podatki iz dnevnikov prikazujejo za določeno obdobje ali v realnem času, kar olajša hitro odkrivanje sistemskih napak in težav.
Skrajšanje ali podaljšanje izhoda
Način prikazovanja podatkov journalctl lahko prilagodite tako, da skrajšate ali razširite izpis. Privzeto journalctl v pagerju prikaže celoten vnos in ga izpiše na desni strani zaslona. Izpis lahko skrajšate z možnostjo --no-full:
journalctl --no-fullbashPrikaz lahko razširite z uporabo oznake -a:
journalctl -abashNastavi journalctl na standardni izhod
V journalctl se izpis dnevnika privzeto prikaže v obliki, podobni less. To uporabnikom omogoča, da si izpis ogledujejo po delih, kar jim olajša brskanje po obsežnih dnevniških datotekah. Vendar pa se včasih zgodi, da je potrebno prikazati standardni izpis dnevnika. Tako to storite:
journalctl --no-pagerbashNastavi izhodne oblike
journalctl ponuja tudi možnosti za prilagajanje izhodnega formata dnevnikov. Za to lahko uporabite možnost -o z ustreznim identifikatorjem formata. Če želite na primer izpisati vpise v dnevniku v formatu JSON, vnesite naslednjo kodo:
journalctl -b -u nginx -o jsonbashTukaj je izpis:
{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" :bashV Journalctl je mogoče uporabiti naslednje oblike:
- cat: Prikaže samo polje za sporočilo
- export: Binarni format, primeren za prenos ali shranjevanje
- json: Standardni JSON z enim vnosom na vrstico
- json-pretty: JSON, oblikovan za boljšo berljivost
- json-sse: Oblikovana izhodna JSON-datoteka, ki omogoča dodajanje dogodkov, poslanih s strežnika
- short: Standardni izpis v slogu syslog
- short-iso: Standardni format za prikaz časovnih žigov po standardu ISO-8601
- short-monotonic: Standardni format z monotonimi časovnimi oznakami
- short-precise: Standardni format z natančnostjo do mikrosekunde
- verbose: Prikaže vsa polja dnevnika, ki so na voljo za zadevni vnos
Kako journalctl izvaja aktivno spremljanje procesov?
Med aktivnim spremljanjem procesov s journalctl se program za ukazno vrstico tail uporablja za spremljanje dnevnikov v realnem času in prikaz najnovejših vnosov. To olajša spremljanje sistemskih dogodkov v realnem času in omogoča hiter odziv na težave.
Kako prikazati trenutne dnevnike
Z možnostjo -n lahko prikažete določeno število podatkovnih zapisov. Deluje popolnoma enako kot tail -n. Če želite prikazati zadnjih 10 vnosov, uporabite naslednji ukaz:
journalctl -nbashPrav tako lahko nastavite število vnosov, npr. na 20:
journalctl -n 20bash