Ce este Journalctl și ce poate face?
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 sistemRuntimeMaxUse: 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=50MbashValorile 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-journaldbashUrmâ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-usagebashIată 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=1GbashAlternativ, 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=1yearsbashCe 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.
- Boot curent: Cu
journalctl -bsunt afișate toate intrările din jurnal care au fost colectate de la ultima repornire. - Porniri anterioare: Utilizați opțiunea
-burmată de un număr pentru a afișa intrările din jurnal pentru o pornire anterioară specifică. De exemplu, dacă introducețijournalctl -b 1, va fi afișată pornirea anterioară. - Lista tuturor proceselor de pornire disponibile: Comanda
journalctl --list-bootsafiș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=persistentbashFiltrare 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"bashCombinația celor două comenzi poate filtra și pentru o perioadă mai scurtă de timp:
journalctl --since 09:00 --until "1 hour ago"bashAlternativ, 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"bashjournalctl 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 yesterdaybashCum 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 errbashFiltrează 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 apache2bashCă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 todaybashjournalctl 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 todaybashFiltrează 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=8088bashAlternativ, 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
33bashÎnregistrările din jurnal pot fi filtrate folosind ID-ul:
journalctl _UID=33 --since todaybashPentru 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 _GIDbashIată un exemplu de rezultat:
32
99
102
133
81
84
100
0
124
87bashFiltrează 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/bashbashAfiș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 -kbashMesajele 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 -5bashModificarea 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-fullbashPuteți extinde afișajul folosind indicatorul -a:
journalctl -abashSetaț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-pagerbashSetaț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 jsonbashIată 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 -nbashPuteți seta și numărul de intrări, de exemplu la 20:
journalctl -n 20bash