Cum să utilizați journalctl pentru a citi jurnalele de sistem Linux

În contextul sistemelor Linux, modul de înregistrare a datelor a suferit o transformare odată cu introducerea systemd. Descoperă cum poți utiliza comanda `journalctl` pentru a analiza și filtra mesajele din jurnalul sistemului.

Centralizarea Jurnalelor

Controversat, dar eficient, sistemul de gestionare a serviciilor și sistemului, systemd, a adus o schimbare majoră în modul de colectare a jurnalelor. Anterior, jurnalele erau dispersate în diverse locuri din sistemul de fișiere, în funcție de serviciul sau procesul care le genera. Însă, toate aveau un element comun: erau fișiere text simple.

Prin systemd, toate înregistrările de jurnal, fie că sunt ale sistemului, ale procesului de boot sau ale nucleului, sunt adunate și gestionate de un singur instrument centralizat, dedicat monitorizării. Formatul de stocare este binar, ceea ce oferă avantajul de a putea extrage informațiile în multiple formate, precum JSON, un aspect pe care îl vom detalia mai târziu.

Această centralizare facilitează corelarea informațiilor care înainte erau înregistrate în fișiere separate. Acum, datele provenite din diverse surse pot fi selectate și afișate într-o singură listă, cu intrări împletite.

Instrumentul principal pentru gestionarea acestui jurnal este `journalctl`.

Explorarea `journalctl`

Comanda `journalctl` poate fi executată fără parametri:

journalctl

Această comandă afișează întregul jurnal, începând cu cele mai vechi intrări. Rezultatul este prezentat în `less`, permițându-ți să navighezi prin jurnal cu funcțiile de bază ale `less`, inclusiv căutarea. Poți folosi săgețile stânga și dreapta pentru a derula orizontal intrările mari din jurnal.

Tasta End te va duce direct la cele mai recente înregistrări din jurnal.

Pentru a ieși, apasă Ctrl+C.

Deși `journalctl` poate fi folosit fără drepturi de administrator, folosirea `sudo` te va asigura că vezi toate detaliile jurnalului.

sudo journalctl

Dacă dorești ca rezultatul să fie afișat direct în terminal, fără a fi folosit `less`, adaugă opțiunea `–no-pager`.

sudo journalctl --no-pager

Rezultatele vor derula rapid în terminal, după care te vei întoarce la promptul comenzii.

Pentru a limita numărul de linii afișate, folosește opțiunea `-n` (linii). De exemplu, pentru a afișa doar zece linii:

sudo journalctl -n 10

Urmărirea Actualizărilor Jurnalului

Pentru a vizualiza cele mai noi intrări în jurnal pe măsură ce acestea sunt înregistrate, utilizează opțiunea `-f` (urmărire).

sudo journalctl -f


Intrarea cea mai recentă are marca de timp 07:09:07. Pe măsură ce apar noi activități, intrările noi sunt adăugate în partea de jos a ecranului. Actualizări aproape în timp real!

La 07:09:59, o aplicație numită `geek-app` a adăugat o înregistrare în jurnal cu mesajul „Mesaj nou de la HTG”.

Modificarea Formatului de Afișare

Deoarece jurnalul este un fișier binar, datele din el trebuie convertite în text înainte de a putea fi afișate. Datorită diferitelor metode de interpretare a datelor, se pot crea diferite formate de ieșire. `journalctl` oferă mai multe opțiuni de formatare.

Formatul implicit este cel „scurt”, care este similar cu formatele tradiționale de jurnal de sistem. Pentru a specifica explicit acest format, folosește opțiunea `-o` (ieșire) cu modificatorul `short`.

sudo journalctl -n 10 -o short

Câmpurile afișate de la stânga la dreapta sunt:

Ora creării mesajului (ora locală).
Numele gazdei.
Numele procesului care a generat mesajul.
Mesajul propriu-zis.

Pentru a obține o ștampilă temporală completă cu dată și oră, folosește modificatorul `short-full`:

sudo journalctl -n 10 -o short-full

Formatele de dată și oră din această ieșire sunt aceleași cu cele necesare pentru a selecta mesajele de jurnal în funcție de interval temporal.

Pentru a vizualiza toate metadatele atașate fiecărui mesaj de jurnal, utilizează modificatorul `verbose`:

sudo journalctl -n 10 -o verbose

Există numeroase câmpuri posibile, dar nu toate sunt prezente în fiecare mesaj.

Un câmp important este cel al Priorității. În exemplul dat, valoarea este 6. Valoarea reprezintă importanța mesajului, unde:

0: Urgență. Sistemul este inutilizabil.
1: Alertă. A fost semnalată o condiție care necesită corectare imediată.
2: Critic. Include blocări, erori grave și defecțiuni semnificative în aplicațiile primare.
3: Eroare. A fost raportată o eroare, dar nu este considerată gravă.
4: Avertisment. Indică o situație care, dacă este ignorată, se poate transforma într-o eroare.
5: Observație. Folosit pentru a raporta evenimente neobișnuite, dar nu erori.
6: Informații. Mesaje operaționale regulate. Nu necesită acțiune.
7: Depanare. Mesaje adăugate în aplicații pentru a facilita depanarea.

Pentru a afișa rezultatul în format JSON, folosește modificatorul `json`:

sudo journalctl -n 10 -o json

Fiecare mesaj este structurat ca un obiect JSON valid, afișat câte unul pe linie.

Pentru a afișa JSON cu un format mai prietenos (pretty print), folosește modificatorul `json-pretty`:

sudo journalctl -n 10 -o json-pretty

Fiecare obiect JSON este extins pe mai multe linii, cu fiecare pereche nume-valoare pe o linie nouă.

Pentru a afișa doar mesajele de jurnal, fără marca temporală sau alte metadate, utilizează modificatorul `cat`:

sudo journalctl -n 10 -o cat

Acest format poate îngreuna identificarea procesului care a generat evenimentul, deși unele mesaje pot conține indicii.

Selectarea Mesajelor de Jurnal în Funcție de Intervalul Temporal

Pentru a limita rezultatul returnat de `journalctl` la un anumit interval temporal, folosește opțiunile `-S` (de la) și `-U` (până la).

Pentru a vizualiza intrările din jurnal începând cu o anumită dată și oră, folosește comanda:

sudo journalctl -S "2020-91-12 07:00:00"

Afișajul va include doar mesajele care au fost generate după data și ora specificate în comandă.

Pentru a defini un interval temporal exact, folosește ambele opțiuni `-S` (de la) și `-U` (până la). Această comandă afișează mesajele de jurnal dintr-un interval de 15 minute:

sudo journalctl -S "2020-91-12 07:00:00" -U "2020-91-12 07:15:00"

Este ideală dacă știi că a avut loc un eveniment suspect în sistem la un moment dat.

Folosirea Intervalelor Temporale Relative

Poți specifica intervale temporale relative, de exemplu „afișează toate evenimentele de acum o zi până acum”. Aceasta este exact ce face comanda de mai jos. „d” înseamnă „zi”, iar „-1” semnifică o zi în trecut.

sudo journalctl -S -1d

Mesajele sunt afișate începând cu ora 00:00:00 de ieri până în momentul actual.

Dacă vrei să analizezi ceva recent, poți folosi ore. Aici analizăm mesajele de jurnal din ultima oră:

sudo journalctl -S -1h

Sunt afișate mesajele din ultima oră. Poți folosi și „m” pentru minute și „w” pentru săptămâni.

`journalctl` înțelege cuvintele „astăzi”, „ieri” și „mâine”, ceea ce simplifică specificarea intervalelor temporale uzuale. Pentru a vizualiza evenimentele de ieri, folosește:

sudo journalctl -S yesterday

Vor fi afișate toate evenimentele de ieri până la ora 00:00:00.

Pentru a vizualiza mesajele de jurnal de astăzi până acum, folosește:

sudo journalctl -S today

Totul de la ora 00:00:00 până în momentul executării comenzii va fi afișat.

Poți combina diferiți modificatori de timp. Pentru a vedea totul de acum două zile până la începutul zilei de azi, folosește:

sudo journalctl -S -2d -U today

Totul de acum două zile până azi va fi afișat.

Selectarea Jurnalului de Mesaje după Câmpuri de Date

Poți căuta mesaje de jurnal care se potrivesc cu anumite câmpuri ale jurnalului. Aceste căutări încearcă să găsească potriviri în metadatele atașate fiecărui mesaj. Este recomandat să consulți lista de câmpuri și să le alegi pe cele care îți sunt de folos.

Reține că completarea câmpurilor depinde de aplicația care a generat mesajul. Nu ai nicio garanție că fiecare câmp va fi populat.

Modificatorii de câmp ai jurnalului sunt folosiți în mod similar. Pentru a căuta mesaje dintr-o anumită aplicație, folosește modificatorul `_COMM` (comandă). Dacă folosești și opțiunea `-f` (urmărire), `journalctl` va urmări noile mesaje ale acestei aplicații.

sudo journalctl -f _COMM=geek-app

Poți căuta intrări de jurnal folosind ID-ul procesului (PID) care a generat mesajul. Folosește comanda `ps` pentru a afla ID-ul procesului demonului sau al aplicației căutate.

sudo journalctl _PID=751

Pe mașina folosită pentru acest articol, demonul SSH are PID 751.

Poți căuta după ID-ul utilizatorului (UID). Acesta este ID-ul utilizatorului care a lansat aplicația, comanda sau deține procesul.

sudo journalctl _UID=1000

Mesajele asociate altor UID-uri vor fi filtrate. Sunt afișate doar mesajele legate de utilizatorul 1000.

O altă modalitate de a căuta mesajele legate de o aplicație este să oferi calea către fișierul executabil.

sudo journalctl /usr/bin/anacron

Toate mesajele din jurnal ale planificatorului `anacron` vor fi preluate și afișate.

Pentru a simplifica căutarea, putem cere `journalctl` să listeze toate valorile pentru un câmp de jurnal.

Pentru a vedea UID-urile pentru care `journalctl` a înregistrat mesaje, folosește opțiunea `-F` (câmpuri) și specifică identificatorul câmpului `_UID`.

journalctl -F _UID

Să facem același lucru pentru a vedea ID-urile de grup (GID-uri):

journalctl -F _GID

Poți face asta cu oricare dintre identificatorii câmpurilor de jurnal.

Listarea Mesajelor Kernel

Există o modalitate simplă de a izola rapid mesajele kernel. Nu este nevoie să le cauți și să le izolezi manual. Opțiunea `-k` (kernel) elimină toate celelalte mesaje și afișează doar intrările din jurnalul nucleului.

sudo journalctl -k

Evidențierea reflectă importanța mesajului, conform câmpului Prioritate.

Analizarea Mesajelor de Boot

Dacă ai o problemă legată de procesul de boot pe care vrei să o investighezi, `journalctl` este util. Poate ai adăugat hardware nou care nu răspunde, sau un hardware care funcționa anterior a încetat să mai funcționeze după o actualizare a sistemului.

Pentru a vizualiza intrările de jurnal legate de ultima pornire, folosește opțiunea `-b` (boot):

journalctl -b

Îți vor fi afișate intrările de jurnal pentru ultima pornire.

Când spunem „ultima pornire”, ne referim la procesul de pornire care a adus computerul în starea actuală. Pentru a vizualiza sesiunile anterioare de boot, poți folosi un număr pentru a spune `journalctl` ce boot te interesează. Pentru a vedea al treilea boot anterior,