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

Înregistrarea sistemului Linux s-a schimbat odată cu introducerea systemd. Aflați cum să utilizați comanda journalctl pentru a citi și filtra mesajele de jurnal de sistem.

Înregistrare centralizată

Nu este străin de controverse, managerul de sistem și service systemd a introdus o schimbare semnificativă în modul în care sunt adunate jurnalele de sistem. Jurnalele erau localizate în locuri diferite în sistemul de fișiere, în funcție de serviciul sau demonul care le crea. Dar toți aveau un lucru în comun. Erau fișiere text simplu.

Cu systemd, toate fișierele jurnal de sistem, boot și kernel sunt colectate și gestionate de o soluție centrală, dedicată de logare. Formatul în care sunt stocate este unul binar. Un lucru care facilitează acest lucru este posibilitatea de a extrage datele în diferite formate, cum ar fi JSON, după cum vom vedea.

de asemenea, poate facilita încrucișarea informațiilor conexe care ar fi fost înregistrate anterior în fișiere jurnal separate. Deoarece datele sunt acum păstrate într-un singur jurnal, datele din mai multe surse de interes pot fi selectate și afișate într-o singură listă de intrări întrețesute.

journalctl este instrumentul obișnuia să lucreze cu jurnalul.

journalctl Fără bibelouri

Puteți invoca journalctl fără parametrii de linie de comandă:

journalctl

journalctl afișează întregul jurnal, cu cele mai vechi intrări în partea de sus a listei. Lista este afișată în less, permițându-vă să paginați și să căutați folosind funcțiile obișnuite de navigare ale less. De asemenea, puteți utiliza tastele săgeată stânga și săgeată dreapta pentru a derula în lateral pentru a citi intrările de jurnal largi.

Apăsarea tastei End va sări direct în partea de jos a listei și la cele mai noi intrări din jurnal.

Apăsați Ctrl+C pentru a ieși.

Deși journalctl poate fi apelat fără a utiliza sudo, te vei asigura că vezi toate detaliile în jurnal dacă utilizați sudo.

sudo journalctl

Dacă aveți nevoie, puteți face ca journalctl să-și trimită rezultatul către fereastra terminalului în loc de către less, folosind opțiunea –no-pager.

sudo journalctl --no-pager

Ieșirea derulează rapid prin fereastra terminalului și veți reveni la promptul de comandă.

Pentru a limita numărul de linii pe care journalctl le returnează, utilizați opțiunea -n (linii). Să cerem zece linii de ieșire:

sudo journalctl -n 10

În urma actualizărilor jurnalului

Pentru ca journalctl să afișeze cele mai noi intrări pe măsură ce ajung în jurnal, utilizați opțiunea -f (urmărire).

sudo journalctl -f

Cea mai nouă intrare are un marcaj de timp de 07:09:07. Pe măsură ce are loc o nouă activitate, noile intrări sunt atașate în partea de jos a afișajului. Actualizări aproape în timp real – cool!

La 07:09:59, o aplicație numită geek-app a injectat o intrare de jurnal în jurnal care spunea „Mesaj nou de la HTG”.

Modificarea formatului de afișare

Deoarece jurnalul este un fișier binar, datele din acesta trebuie traduse sau analizate în text înainte de a vă putea afișa. Cu analizoare diferite, pot fi create diferite formate de ieșire din aceeași sursă binară de date. Există mai multe formate diferite pe care journalctl le poate folosi.

  Cum se face backup pentru setările Discord pe Linux

Ieșirea implicită este formatul scurt, care este foarte asemănător cu formatul clasic de jurnal de sistem. Pentru a solicita în mod explicit formatul scurt, utilizați opțiunea -o (ieșire) cu modificatorul scurt.

sudo journalctl -n 10 -o short-full

De la stânga la dreapta, câmpurile sunt:

Ora în care a fost creat mesajul, în ora locală.
Numele de gazdă.
Numele procesului. Acesta este procesul care a generat mesajul.
Mesajul jurnalului.

Pentru a obține o ștampilă completă a datei și a orei, utilizați modificatorul scurt-complet:

sudo journalctl -n 10 -o short-full

Formatele de dată și oră din această ieșire sunt formatul în care trebuie să furnizați datele și orele când selectați mesajele de jurnal în funcție de perioadă, așa cum vom vedea în curând.

Pentru a vedea toate metadatele care însoțesc fiecare mesaj de jurnal, utilizați modificatorul verbose.

sudo journalctl -n 10 -o verbose

Acolo sunt multe domenii posibile, dar este rar ca toate câmpurile să fie prezente într-un mesaj.

Un domeniu care merită discutat este câmpul Prioritate. În acest exemplu, are valoarea 6. Valoarea reprezintă importanța mesajului:

0: Urgență. Sistemul este inutilizabil.
1: Alertă. A fost semnalată o condiție care ar trebui corectată imediat.
2: critic. Aceasta acoperă blocările, coredump-urile și defecțiunile semnificative în aplicațiile primare.
3: Eroare. A fost raportată o eroare, dar nu este considerată gravă.
4: Avertisment. Vă aduce în atenție o condiție care, dacă este ignorată, poate deveni o eroare.
5: Observați. Folosit pentru a raporta evenimente neobișnuite, dar nu erori.
6: Informații. Mesaje operaționale regulate. Acestea nu necesită acțiune.
7: Depanare. Mesajele introduse în aplicații pentru a le facilita depanarea.

Dacă doriți ca rezultatul să fie prezentat ca fiind format corespunzător Notarea obiectelor JavaScript (JSON), utilizați modificatorul json:

sudo journalctl -n 10 -o json

Fiecare mesaj este împachetat corespunzător ca un obiect JSON bine format și este afișat câte un mesaj pe linie de ieșire.

Pentru a avea ieșirea JSON destul de imprimat, utilizați modificatorul json-pretty.

sudo journalctl -n 10 -o json-pretty

Fiecare obiect JSON este împărțit pe mai multe linii, fiecare pereche nume-valoare pe o linie nouă.

Pentru a vedea numai mesajele de intrare în jurnal, fără marcaje temporale sau alte metadate, utilizați modificatorul cat:

sudo journalctl -n 10 -o cat

Acest format de afișare poate face dificilă identificarea procesului care a generat evenimentul de jurnal, deși unele mesaje conțin un indiciu.

Selectarea mesajelor de jurnal după perioada de timp

Pentru a limita rezultatul de la journalctl la o perioadă de timp care vă interesează, utilizați opțiunile -S (de când) și -U (până).

Pentru a vedea intrările din jurnal de la o anumită oră și dată, utilizați această comandă:

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

sudo journalctl -S

Afișajul conține doar mesaje care au sosit după data și ora din comandă.

Ieșire din sudo journalctl -S

Pentru a defini o perioadă de timp pentru care doriți să raportați, utilizați împreună ambele opțiuni -S (de când) și -U (până). Această comandă analizează mesajele de jurnal dintr-o perioadă de timp de 15 minute.:

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

sudo journalctl -S

Aceasta este o combinație excelentă dacă știți că s-a întâmplat ceva ciudat pe sistemul dvs. și, aproximativ, când s-a întâmplat.

ieșire din sudo journalctl -S

Utilizarea perioadelor de timp relative

Puteți utiliza adresarea relativă atunci când selectați perioadele de timp. Asta înseamnă că poți spune lucruri precum „arată-mi toate evenimentele de la o zi în urmă și până acum”. Aceasta este exact ceea ce înseamnă această comandă. „d” înseamnă „zi”, iar „-1” înseamnă o zi din trecut.

sudo journalctl -S -1d

Mesajele de jurnal sunt listate de la 00:00:00 de ieri, până la „acum”.

  Cum se instalează Scribus Publisher pe Linux

Dacă doriți să investigați ceva ce sa întâmplat în trecutul recent, puteți specifica o perioadă de timp relativă măsurată în ore. Aici examinăm mesajele de jurnal din ultima oră:

sudo journalctl -S -1h

Mesajele din ultima oră sunt afișate pentru dvs. De asemenea, puteți utiliza „m” pentru a seta perioade de timp relative măsurate în minute și „w” pentru săptămâni.

journalctl înțelege astăzi, ieri și mâine. Acești modificatori oferă o modalitate utilă de a specifica perioadele de timp obișnuite. Pentru a vedea toate evenimentele care au avut loc ieri, utilizați această comandă:

sudo journalctl -S yesterday

Toate evenimentele din jurnalul de jurnal care au avut loc ieri, până la miezul nopții 00:00:00, sunt preluate și afișate pentru dvs.

Pentru a vedea toate mesajele de jurnal primite astăzi până acum, utilizați această comandă:

sudo journalctl -S today

Se afișează totul de la 00:00:00 până la momentul lansării comenzii.

Puteți combina diferiți modificatori ai perioadei de timp. Pentru a vedea totul de acum două zile până la începutul zilei de astăzi, utilizați această comandă:

sudo journalctl -S -2d -U today

Totul de alaltăieri până azi este preluat și afișat.

Selectarea jurnalului mesajelor după câmpuri de date

Puteți căuta mesaje de jurnal care se potrivesc cu o gamă largă de domenii de jurnal. Aceste căutări încearcă să găsească potriviri în metadatele atașate fiecărui mesaj. Este recomandat ca dvs consultați lista de câmpuri și alege-le pe cele care îți vor fi cele mai utile.

Rețineți că dacă o aplicație completează fiecare câmp sau nu, depinde în totalitate de autorii cererii. Nu puteți garanta că fiecare câmp va fi populat.

Toți modificatorii câmpului jurnalului sunt utilizați în același mod. Vom folosi câteva în exemplele noastre de mai jos. Pentru a căuta mesaje de jurnal dintr-o anumită aplicație, utilizați modificatorul _COMM (comandă). Dacă utilizați și opțiunea -f (urmăriți), journalctl va urmări mesajele noi din această aplicație pe măsură ce sosesc.

sudo journalctl -f _COMM=geek-app

Puteți căuta intrări de jurnal utilizând ID proces a procesului care a generat mesajul de jurnal. Utilizați comanda ps pentru a găsi ID-ul de proces al demonului sau al aplicației pe care urmează să o căutați.

sudo journalctl _PID=751

Pe mașina folosită pentru cercetarea acestui articol, SSH demonul este procesul 751.

Puteți căuta și după ID-ul de utilizator. Acesta este ID-ul de utilizator al persoanei care a lansat aplicația sau comanda sau care deține procesul.

sudo journalctl _UID=1000

Toate mesajele asociate cu orice alt ID de utilizator sunt filtrate. Sunt afișate doar mesajele legate de utilizatorul 1000:

O altă modalitate de a căuta mesaje de jurnal legate de o anumită aplicație este de a furniza calea către executabil.

sudo journalctl /usr/bin/anacron

Toate anacronul Mesajele din jurnalul planificatorului sunt preluate și afișate.

Pentru a ușura căutarea, putem cere journalctl să enumere toate valorile pe care le deține, pentru oricare dintre câmpurile jurnalului.

Pentru a vedea ID-urile utilizatorului pentru care journalctl a înregistrat mesajele de jurnal, utilizați opțiunea -F (câmpuri) și transmiteți identificatorul câmpului _UID.

journalctl -F _UID

Să facem asta din nou și să ne uităm la ID-uri de grup (GID-uri):

journalctl -F _GID

Puteți face acest lucru cu oricare dintre identificatorii câmpului jurnalului.

  Cum să adăugați elemente la fișierul Fstab în Linux

Listarea mesajelor Kernel

Există o modalitate încorporată de a izola rapid mesajele kernelului. Nu trebuie să le căutați și să le izoleți singur. Opțiunea -k (kernel) elimină toate celelalte mesaje și vă oferă o vizualizare instantanee a intrărilor din jurnalul nucleului.

sudo journalctl -k

Evidențierea reflectă importanța mesajului, conform valorilor din câmpul Prioritate.

Examinarea mesajelor de pornire

Dacă aveți o problemă legată de pornire pe care doriți să o investigați, journalctl v-a acoperit. Poate ați adăugat hardware nou și acesta nu răspunde sau o componentă hardware care funcționează anterior nu mai funcționează după ultima actualizare a sistemului.

Pentru a vedea intrările de jurnal legate de ultima pornire, utilizați opțiunea -b (boot):

journalctl -b

Intrările de jurnal pentru ultima pornire sunt afișate pentru dvs.

Când spunem „ultima pornire”, ne referim la procesul de pornire care a adus computerul la viață pentru sesiunea curentă conectată. Pentru a vedea boot-urile anterioare, puteți folosi un număr pentru a spune journalctl care boot vă interesează. Pentru a vedea a treia încărcare anterioară, utilizați această comandă:

journalctl -b 3

În general, dacă ați avut o problemă și a trebuit să reporniți mașina, este o secvență anterioară de pornire care vă interesează. Deci aceasta este o formă de comandă comună.

Este ușor să te amesteci cu succesiunea de cizme. Pentru a ajuta, putem cere journalctl să listeze boot-urile pe care le-a înregistrat în jurnalul său, folosind opțiunea –list-boots.

journalctl --list-boots

Puteți identifica pornirea pentru care doriți să vedeți mesajele de la data și ora și apoi să utilizați numărul din coloana din stânga pentru a obține mesajele de jurnal pentru acea secvență de pornire. De asemenea, puteți alege identificatorul de pornire pe 32 de biți și îl puteți transmite journalctl.

sudo journalctl -b 1f00248226ed4ab9a1abac86e0d540d7

Mesajele de jurnal din secvența de pornire pe care am solicitat-o ​​sunt preluate și afișate.

Gestionarea spațiului pe hard disk din jurnal

Desigur, jurnalul și toate mesajele sale de jurnal sunt stocate pe hard disk. Asta înseamnă că vor ocupa spațiu pe hard disk. Pentru a vedea cât spațiu a ocupat jurnalul, utilizați opțiunea –disk-usage.

journalctl --disk-usage

Cu hard disk-urile de astăzi, 152 MB nu reprezintă deloc mult spațiu, dar în scopuri demonstrative, îl vom tăia în continuare. Există două moduri în care putem face asta. Primul este să setați o limită de dimensiune la care doriți să reduceți jurnalul înapoi. Va crește din nou, desigur, dar îl putem tăia acum gata pentru acea nouă creștere.

Vom folosi opțiunea minunat intitulată –vacuum-size, și vom introduce dimensiunea la care am dori jurnalul redus. Vom cere 100 MB. Modul de a gândi acest lucru este că îi cerem lui journalctl să „aruncă tot ce poți, dar nu coborî sub 100 MB”.

journalctl --vacuum-size=100M

Cealaltă modalitate de a reduce dimensiunea jurnalului este să utilizați opțiunea –vacuum-time. Această opțiune îi spune journalctl să renunțe la mesajele care sunt mai vechi decât perioada pe care o furnizați pe linia de comandă. Puteți utiliza zile, săptămâni, luni și ani în perioada de timp.

Să eliminăm toate mesajele mai vechi de o săptămână:

journalctl --vacuum-time=1weeks

Date versus informații

Datele nu sunt utile decât dacă le puteți accesa și le folosiți. Apoi devine o informație utilă. Comanda journalctl este un instrument flexibil și sofisticat care vă permite să ajungeți la informațiile de interes într-o varietate de moduri.

Puteți folosi aproape orice fragment de informații de care aveți nevoie pentru a accesa mesajele de jurnal de care aveți nevoie.