Journalctl este o soluție eficientă pentru gestionarea și analizarea jurnalelor de sistem în mediile Linux. Acest instrument poate fi utilizat pentru monitorizarea activităților sistemului, depanarea și urmărirea în timp real a jurnalelor, oferind informații cruciale pentru diagnosticarea eficientă a problemelor sistemului.

Ce este Journalctl?

journalctl este un utilitar puternic pentru interogarea și afișarea jurnalelor de evenimente sau a fișierelor jurnal sub Linux. Este o componentă centrală a suitei de gestionare a sistemului și a serviciilor systemd, care vine cu multe distribuții Linux moderne, cum ar fi Ubuntu, Fedora și Arch Linux. Numele „journalctl” este o combinație între „journal” (jurnal) și „ctl” (control), care se referă la faptul că comanda este utilizată pentru a controla și analiza jurnalele.

journalctl simplifică accesarea jurnalului de sistem, care este gestionat de systemd-journald. Jurnalul de sistem este o colecție centralizată de mesaje și evenimente care au loc în timpul funcționării unui sistem Linux. Spre deosebire de jurnalele tradiționale bazate pe text, journalctl oferă o modalitate structurată și eficientă de a căuta, filtra și afișa datele din jurnal în timp real. Acest lucru poate ajuta la diagnosticarea problemelor sau la monitorizarea stării sistemului.

În acest scop, Journalctl salvează fișierele jurnal în format binar, deoarece fișierele jurnal binare sunt mai compacte și mai eficiente decât echivalentele lor bazate pe text. Având în vedere cantitatea mare de date înregistrate, acest lucru permite o căutare mai rapidă și mai eficientă a evenimentelor sau informațiilor specifice în fișierele jurnal. Datorită naturii lor structurate și criptate, fișierele jurnal binare oferă, de asemenea, o securitate sporită în comparație cu jurnalele bazate pe text, deoarece formatul lor face manipularea datelor jurnalului mai dificilă.

Cum se ajustează spațiul de stocare pentru fișierele jurnal

journalctl poate fi utilizat pentru a limita și configura spațiul de stocare ocupat de fișierele jurnal pe hard disk. Acest lucru se realizează prin setările serviciului systemd-journald. Setările de configurare sunt stocate în fișierul /etc/systemd/journald.conf. Aici veți găsi următoarele intrări:

  • SystemMaxUse: Limitează spațiul de stocare pentru jurnalele din directorul de sistem
  • RuntimeMaxUse: Limitează spațiul de stocare pentru jurnalele din directorul temporar

Pentru a seta limita de memorie, adăugați următoarele linii sau modificați-le după cum este necesar:

[Journal] 
SystemMaxUse=50M 
RuntimeMaxUse=50M
bash

Valorile din acest exemplu (50M) pot fi modificate după cum este necesar. De asemenea, puteți utiliza diferite unități, cum ar fi K (kilobyți), M (megabyți), G (gigabyți) sau T (terabyți). După ce ați editat fișierul de configurare, systemd-journald trebuie repornit pentru ca modificările să aibă efect:

sudo systemctl restart systemd-journald
bash

Urmând acești pași, systemd-journald va fi configurat pentru a restricționa spațiul pe disc pentru fișierele jurnal. Asigurați-vă că limita aleasă permite stocarea adecvată a datelor esențiale din jurnal. În același timp, este important să evitați utilizarea unui spațiu excesiv pe disc. Rețineți că jurnalele mai vechi sunt eliminate automat odată ce limita de spațiu alocat pe disc a fost atinsă.

Evaluează utilizarea spațiului pe disc

Înainte de a ajusta spațiul de stocare pentru fișierele jurnal, verificați cât spațiu de stocare este ocupat în prezent de jurnal. Pentru a face acest lucru, utilizați --disk-usage:

journalctl --disk-usage
bash

Iată un exemplu al aspectului rezultatului:

Journals take up 8.0M on disk.
bash

Ștergeți intrările vechi din jurnal

Dacă jurnalul ocupă prea multă memorie, puteți șterge intrările vechi din jurnal. Există două moduri de a face acest lucru:

Utilizați --vacuum-size pentru a reduce dimensiunea jurnalului dvs. specificând dimensiunea. Cu această metodă, intrările vechi sunt eliminate până când spațiul total de stocare al jurnalului ocupat pe hard disk atinge dimensiunea dorită.

sudo journalctl --vacuum-size=1G
bash

Alternativ, puteți micșora jurnalul setând o perioadă de păstrare folosind opțiunea --vacuum-time. Intrările mai vechi decât perioada specificată vor fi șterse. Pentru a păstra intrările din jurnalul din anul trecut, puteți folosi următoarea comandă:

sudo journalctl --vacuum-time=1years
bash

Ce poate face Journalctl?

journalctl oferă funcții puternice de filtrare, permițând utilizatorilor să filtreze intrările din jurnal pe baza diverselor criterii. Această funcție permite căutarea țintită a informațiilor relevante, facilitând identificarea mai rapidă a problemelor. Iată câteva opțiuni journalctl utilizate frecvent:

Afișează jurnalele

Executarea comenzii journalctl va afișa intrările din jurnalul de sistem pentru sistemul curent în ordine cronologică inversă. Utilizați journalctl -f sau journalctl --follow pentru a afișa intrările în timp real. Intrările noi sunt afișate automat în ordinea în care sosesc.

În funcție de cât timp rulează systemd pe sistemul dvs., probabil că vi se va afișa o cantitate imposibil de gestionat de date, care poate avea zeci sau sute de mii de linii. Pentru a găsi mai repede ceea ce căutați, puteți filtra jurnalele folosind diverse comenzi Linux.

Cum să filtrezi după timp

Folosind journalctl, jurnalele pot fi filtrate în funcție de un moment specific în timp, astfel încât să poată fi căutate mai eficient pentru informații relevante.

Filtrare după procesul de pornire

Filtrarea jurnalelor în funcție de procesul de pornire se dovedește extrem de utilă pentru examinarea evenimentelor de sistem la momente precise sau în timpul scenariilor de pornire. Această abordare țintită simplifică diagnosticarea problemelor, concentrând intrările din jurnal pe stări sau configurații specifice ale sistemului.

  1. Boot curent: Cu journalctl -b sunt afișate toate intrările din jurnal care au fost colectate de la ultima repornire.
  2. Porniri anterioare: Utilizați opțiunea -b urmată de un număr pentru a afișa intrările din jurnal pentru o pornire anterioară specifică. De exemplu, dacă introduceți journalctl -b 1, va fi afișată pornirea anterioară.
  3. Lista tuturor proceselor de pornire disponibile: Comanda journalctl --list-boots afișează o listă a pornirilor disponibile cu ID-urile respective. Puteți utiliza ID-ul de pornire dorit pentru a afișa jurnalele pentru o anumită pornire.

Deși salvarea proceselor de pornire anterioare este activată în mod implicit pe unele distribuții Linux, utilizatorii ar putea fi nevoiți să o activeze mai întâi pe altele. Pentru a face acest lucru, creați un director în care va fi salvat jurnalul introducând sudo mkdir -p /var/log/journal. Alternativ, puteți edita fișierul de configurare al jurnalului cu sudo nano /etc/systemd/journald.conf. Apoi setați opțiunea Storage= sub [Journal] la persistent pentru a activa înregistrarea persistentă:

. . . 
[Journal] 
Storage=persistent
bash

Filtrare după intervalul de timp

Uneori poate fi necesar să se afișeze intrările din jurnal pentru o anumită perioadă de timp. journalctl oferă opțiunile --since și --until, care pot fi utilizate pentru a restricționa intrările la o anumită perioadă. Pentru a face acest lucru, utilizați formatul de timp YYYY-MM-DD HH:MM:SS. Comanda pentru a afișa toate intrările din jurnal între 1 ianuarie 2023 la ora 12:00 și 2 ianuarie 2023 la ora 12:00 arată astfel:

journalctl --since "2023-01-01 12:00:00" --until "2023-01-02 12:00:00"
bash

Combinația celor două comenzi poate filtra și pentru o perioadă mai scurtă de timp:

journalctl --since 09:00 --until "1 hour ago"
bash

Alternativ, puteți omite anumite părți ale formatului. De exemplu, dacă doriți să afișați toate intrările începând cu un anumit moment:

journalctl --since "2023-11-16 15:25:00"
bash

journalctl recunoaște și valori relative, cum ar fi yesterday, today sau tomorrow. Pentru a afișa intrările de ieri, introduceți următoarele:

journalctl --since yesterday
bash

Cum să filtrezi după caracteristicile mesajului

Utilizarea journalctl pentru filtrarea intrărilor din jurnal în funcție de importanță sau conținut este, de asemenea, extrem de utilă, deoarece vă permite să căutați informații relevante și să vă concentrați asupra aspectelor specifice ale jurnalelor de sistem. Acest lucru permite, printre altele, diagnosticarea eficientă a erorilor, detectarea timpurie a problemelor de securitate și monitorizarea rapidă a performanței.

Filtrează după prioritate

Pentru a filtra jurnalele cu journalctl în funcție de importanța mesajului, puteți utiliza categoriile de prioritate pentru intrările din jurnal. Pentru a face acest lucru, puteți utiliza fie numele priorității, fie valoarea numerică corespunzătoare. Cu cât numărul este mai mic, cu atât mesajul este mai important:

  • 0: urgență (emergență)
  • 1: alertă (alarmă)
  • 2: crit (critic)
  • 3: err (eroare)
  • 4: avertisment (avertisment)
  • 5: notificare (notă)
  • 6: info (informație)
  • 7: debug (depanare)

Mesajele cu o anumită prioritate pot fi filtrate folosind opțiunea -p. De exemplu, următoarea comandă afișează numai intrările din jurnal cu prioritatea „err” (eroare) și mai mare:

journalctl -p err
bash

Filtrează după unitate

Filtrarea jurnalelor după unitate este utilă pentru a vă concentra asupra anumitor servicii sau procese. Acestea pot fi filtrate folosind opțiunea -u. De exemplu, pentru a afișa intrările din jurnal pentru serverul web Apache, introduceți următoarele:

journalctl -u apache2
bash

Căutarea poate fi rafinată în continuare folosind valori temporale relative. Pentru a determina dacă serviciul a fost deja prestat astăzi, puteți introduce următoarele:

journalctl -u apache2 --since today
bash

journalctl poate combina înregistrările de date din diferite unități. De exemplu, dacă procesul Nginx este legat de o unitate PHP FPM, înregistrările acestora pot fi combinate cronologic. Comanda pentru aceasta este:

journalctl -u nginx.service -u php-fpm.service --since today-u apache2 --since today
bash

Filtrează după proces, utilizator sau ID de grup

Journalctl poate filtra intrările din jurnal după proces, utilizator sau ID de grup. Dacă aveți PID-ul exact al procesului pe care doriți să îl căutați, puteți utiliza opțiunea _PID pentru a filtra intrările. De exemplu, dacă PID-ul este 8088, comanda ar arăta astfel:

journalctl _PID=8088
bash

Alternativ, puteți utiliza filtrele _UID sau _GID pentru a afișa toate intrările înregistrate de un anumit utilizator sau grup. De exemplu, dacă serverul dvs. web se numește „www-data”, puteți găsi ID-ul utilizatorului procedând în felul următor:

id -u www-data
33
bash

Înregistrările din jurnal pot fi filtrate folosind ID-ul:

journalctl _UID=33 --since today
bash

Pentru a determina pentru ce intrări de ID-uri de grup au fost create, puteți utiliza opțiunea -F. Aceasta afișează toate valorile care au fost salvate pentru câmpul ID grup:

journalctl -F _GID
bash

Iată un exemplu de rezultat:

32
99
102
133
81
84
100
0
124
87
bash

Filtrează după componentă

Filtrarea după componentă este utilă pentru a vă concentra asupra anumitor aplicații, servicii sau procese. Câmpul componentă este utilizat de obicei de diverse servicii sau componente software pentru a distinge informații specifice din jurnale. Această filtrare permite restrângerea intrărilor din jurnal la o anumită componentă, aplicație sau unitate de serviciu. De exemplu, pentru a filtra intrările care conțin fișierul executabil bash, introduceți următoarea comandă:

journalctl /usr/bin/bash
bash

Afișează mesajele kernelului

Filtrarea intrărilor din jurnal pentru mesajele kernelului cu journalctl este o metodă eficientă de analizare a informațiilor despre funcționarea kernelului într-un sistem Linux. Mesajele kernelului pot oferi indicii despre probleme hardware, conflicte între drivere sau alte evenimente de sistem.

Mesajele kernel-ului care pot fi găsite în ieșirea dmesg pot fi, de asemenea, filtrate din jurnal. Acestea pot fi afișate cu ajutorul flag-urilor `-k or ``:

journalctl -k
bash

Mesajele kernel-ului din procesul de boot curent sunt afișate în mod implicit. Puteți filtra mesajele dintr-un boot alternativ folosind flag-urile de selecție boot menționate anterior. Dacă, de exemplu, doriți să vizualizați mesajele kernel-ului din ultimele cinci procese de boot, introduceți:

journalctl -k -b -5
bash

Modificarea afișării jurnalului în Journalctl

Personalizarea afișajului în journalctl permite utilizatorilor să caute mai precis în jurnalele de înregistrări și să extragă rapid informații. Utilizatorii pot personaliza afișajul pentru a afișa datele din jurnalele de înregistrări pentru o anumită perioadă sau în timp real, pentru a facilita identificarea rapidă a erorilor și problemelor sistemului.

Reducerea sau extinderea producției

Puteți personaliza modul în care journalctl afișează datele prin scurtarea sau extinderea ieșirii. În mod implicit, journalctl afișează întreaga intrare în pager și le rulează în partea dreaptă a ecranului. Ieșirea poate fi scurtată cu opțiunea --no-full:

journalctl --no-full
bash

Puteți extinde afișajul folosind indicatorul -a:

journalctl -a
bash

Setați journalctl la ieșire standard

În journalctl, ieșirea jurnalului este afișată în mod implicit folosind un pager precum less. Acest lucru permite utilizatorilor să vizualizeze ieșirea în mod incremental, permițându-le să navigheze mai ușor prin fișierele jurnal lungi. Cu toate acestea, există situații în care este necesară afișarea ieșirii standard a jurnalelor. Iată cum se procedează:

journalctl --no-pager
bash

Setați formatele de ieșire

journalctl oferă, de asemenea, opțiuni pentru personalizarea formatului de ieșire al jurnalelor. Pentru a face acest lucru, puteți utiliza opțiunea -o cu identificatorul de format corespunzător. De exemplu, pentru a afișa intrările din jurnal în format JSON, introduceți următorul cod:

journalctl -b -u nginx -o json
bash

Iată rezultatul:

{ "__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" :
bash

În Journalctl pot fi utilizate următoarele formate:

  • cat: Afișează numai câmpul mesajului
  • export: Format binar adecvat pentru transfer sau salvare
  • json: JSON standard cu o singură intrare pe linie
  • json-pretty: JSON formatat pentru o mai bună lizibilitate
  • json-sse: Ieșire formatată JSON încadrată, care permite adăugarea evenimentelor trimise de server
  • short: Ieșire standard în stil syslog
  • short-iso: format standard pentru afișarea timestamp-urilor ISO-8601
  • short-monotonic: format standard cu timestamp-uri monotone
  • short-precise: format standard cu precizie de microsecunde
  • verbose: Afișează toate câmpurile jurnalului disponibile pentru intrarea respectivă

Cum realizează journalctl monitorizarea activă a proceselor?

În timpul monitorizării active a proceselor cu journalctl, programul de linie de comandă tail este utilizat pentru a urmări jurnalele în timp real și pentru a afișa cele mai recente intrări. Acest lucru facilitează monitorizarea evenimentelor de sistem în timp real și reacția rapidă la probleme.

Cum se afișează jurnalele curente

Opțiunea -n poate fi utilizată pentru a afișa un număr specific de înregistrări de date. Funcționează exact în același mod ca și tail -n. Pentru a afișa ultimele 10 intrări, utilizați următoarea comandă:

journalctl -n
bash

Puteți seta și numărul de intrări, de exemplu la 20:

journalctl -n 20
bash
Mergi la meniul principal