systemd-ում օրագրավորումը journalctl-ի հետ աշխատելիս¶
Այս հոդվածում
Ժամանակակից Linux դիստրիբուտիվներում (Ubuntu ≥ 16.04, Debian ≥ 8, RHEL/CentOS ≥ 7, Alma/Rocky ≥ 8) systemd-ն ոչ միայն կառավարում է ծառայությունները, այլև ապահովում է կենտրոնացված օրագրավորում journald-ի և journalctl գործիքի միջոցով։
systemd օրագիրը հավաքում է. - միջուկի հաղորդագրությունները (dmesg), - ծառայությունների օրագրերը, ինչպիսիք են (nginx, sshd, docker և այլն), - դեմոնների ստանդարտ stdout/stderr հոսքերը, - աուդիտի իրադարձությունները (եթե ինտեգրված է auditd-ի հետ)։
Note
journald-ն կարող է աշխատել զուգահեռ syslog-ի հետ (օրինակ՝ rsyslog կամ syslog-ng)՝ օրագրերը կարող են կրկնօրինակվել։ Սակայն journald-ն հաճախ ամբողջությամբ փոխարինում է դասական syslog-ին։
Արագ սկիզբ. հիմնական հրամաններ¶
| Խնդիր | Հրաման |
|---|---|
| Դիտել բոլոր օրագրերը (pager-ով) | journalctl |
| Վերջին 10 գրառումներ | journalctl -n |
| Օրագրերի հետևում իրական ժամանակում | journalctl -f (անալոգ tail -f) |
| Վերջին մեկնարկից ի վեր օրագրեր | journalctl -b |
| Օրագրեր կոնկրետ ծառայության համար | journalctl -u nginx |
| Միջուկի օրագրեր | journalctl -k |
| Օրագրի կողմից օգտագործվող սկավառակի տարածք | journalctl --disk-usage |
Ժամանակ և ժամային գոտիներ¶
Լռելյայն journalctl-ը ցուցադրում է տեղական ժամանակը։ Ստուգեք, որ այն ճիշտ է կարգավորված.
Ստուգեք ելքային տվյալներում նման տողեր.
Ժամային գոտու կառավարում¶
# Ցուցադրել բոլոր հասանելի ժամային գոտիները
timedatectl list-timezones
# Կարգավորել (օրինակ՝ Բեռլինի համար)
sudo timedatectl set-timezone Europe/Berlin
Օրագրերի դիտում UTC-ով¶
Մեկնարկների պատմություն¶
Լռելյայն նախկին մեկնարկների օրագրերը պահպանված չեն (այն պահվում է միայն /run/log/journal/-ում, որը մաքրվում է վերամեկնարկի ժամանակ)։ Դրանք պահպանելու համար ակտիվացրեք մշտական պահպանումը.
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
Կամ խմբագրեք կոնֆիգուրացիան ձեռքով.
Հեռացրեք անդրադարձը և փոփոխեք.
Մեկնարկների հետ աշխատելը¶
# Ցուցադրել բոլոր պահպանված մեկնարկները
journalctl --list-boots
# Ելքային տվյալներ.
# -2 abc13... Wed 2025-11-05 10:00:00 MSK—Wed 12:30:45 MSK
# -1 def456... Thu 2025-11-06 09:15:22 MSK—Thu 18:44:10 MSK
# 0 xyz789... Fri 2025-11-07 08:20:05 MSK—running
# Նախորդ մեկնարկի օրագրեր
journalctl -b -1
# Օրագրեր մեկնարկի ID-ի համաձայն
journalctl -b xyz789...
Օրագրերի ֆիլտրում¶
Ըստ ժամանակի¶
# Նշված պահից մինչև հիմա
journalctl --since "2025-11-07 14:00:00"
# Միջակայքի համար
journalctl --since "2025-11-06" --until "2025-11-07 09:00:00"
# Հարմար բանալի բառեր
journalctl --since today
journalctl --since yesterday
journalctl --since "2 hours ago"
journalctl --until now
Note
Ընդունված ձևաչափեր. YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, today, yesterday, 1 hour ago, 5min ago։
Ըստ ծառայության (միավոր)¶
# Nginx օրագրեր
journalctl -u nginx
# .service ընդլայնմամբ (ընտրովի, բայց ճիշտ)
journalctl -u nginx.service
# Մի քանի ծառայություն միաժամանակ
journalctl -u nginx -u php-fpm --since today
# Միայն nginx սխալները վերջին 2 ժամվա ընթացքում
journalctl -u nginx -p err --since "2 hours ago"
Ըստ գործընթացի, օգտատիրոջ, խմբի¶
# Ըստ PID-ի (օրինակ՝ nginx հիմնական գործընթաց)
journalctl _PID=12345
# Օգտատիրոջ UID-ի համաձայն
journalctl _UID=33 # օրինակ՝ www-data
journalctl _UID=$(id -u nginx)
# Ցուցադրել բոլոր UID-ները գրառումներով
journalctl -F _UID
# Նմանապես GID-ի համար
journalctl -F _GID
Ըստ առաջնահերթության մակարդակի (կարևորություն)¶
| Մակարդակ | Կոդ | Նկարագրություն |
|---|---|---|
emerg | 0 | Համակարգը անօգտագործելի է |
alert | 1 | Անհրաժեշտ է անմիջական գործողություն |
crit | 2 | Կրիտիկական սխալներ |
err | 3 | Սխալներ |
warning | 4 | Զգուշացումներ |
notice | 5 | Կարևոր իրադարձություններ |
info | 6 | Տեղեկատվական հաղորդագրություններ |
debug | 7 | Տրամաբանում |
Օրինակներ.
# Միայն սխալներ և ավելի բարձր (err, crit, alert, emerg)
journalctl -p err
# Նույնը թվային կոդով
journalctl -p 3
# Nginx սխալները ընթացիկ մեկնարկի համար
journalctl -u nginx -p err -b
Ելքային տվյալների ձևաչափում¶
Հիմնական տարբերակներ¶
--no-pager # ելքային տվյալներ stdout-ի միջոցով (grep, tee, վերաուղղման համար)
--no-full # երկար տողերը կրճատել չեն (լռելյայն կրճատված է)
-n 50 # վերջին 50 գրառումներ
-f # հետևել (նոր գրառումների ուղիղ հեռարձակում)
Ելքային տվյալների ձևաչափում¶
Ձևաչափեր (-o)**¶
| Ձևաչափ | Օգտագործում |
|---|---|
short (լռելյայն) | Դասական syslog ոճ |
short-iso | Ժամանակ ISO 8601-ով. 2025-01-07T15:30:45+03:00 |
short-precise | Ժամանակ միկրովայրկյաններով |
cat | Միայն հաղորդագրության տեքստ (մետատվյալների առանց) — հարմար սկրիպտերի համար |
json | JSON, մեկ գրառում մեկ տողում (մեքենայական ընթեռնելի) |
json-pretty | Մարդու ընթեռնելի JSON (սխալների վերացման/վերլուծության համար) |
verbose | Բոլոր դաշտեր, ներառյալ թաքնված _SOURCE_REALTIME_TIMESTAMP, _BOOT_ID և այլն) |
Օրինակներ.
# Մարդու ընթեռնելի JSON nginx-ի համար
journalctl -u nginx -o json-pretty --since today
# Միայն հաղորդագրության տեքստ
journalctl -u nginx -p err -o cat
# Ելքային տվյալներ ֆայլ վերլուծության համար
journalctl -b -u docker --no-pager > docker_boot.log
Օրագրի չափի կառավարում¶
Ընթացիկ չափ¶
Օրագրերի մաքրում¶
Ըստ չափի¶
Ըստ ժամանակի¶
Note
Ընդունված վերջավորություններ. s, m, h, days, weeks, months, years։
Մշտական սահմանափակումներ (կոնֆիգում)¶
Խմբագրեք /etc/systemd/journald.conf.
Փոփոխություններից հետո.
Note
journald.conf-ի փոփոխությունները չեն ազդում արդեն կուտակված օրագրերի վրա՝ օգտագործեք --vacuum-* մաքրելու համար։
Առաջադեմ տեխնիկա¶
Որոնում ըստ բովանդակության (grep-ով)¶
Իրադարձությունների հաճախականության վերլուծություն¶
Ելքային տվյալներ և պահպանում¶
ՀՏՀ¶
Հ. Ինչու՞ է journalctl-ը չցուցադրում նախկին վերամեկնարկների օրագրերը։ Պ. Ստուգեք, արդյոք Storage=persistent ակտիվացված է և արդյոք /var/log/journal/ գոյություն ունի։ Առանց դրա օրագրերը պահվում են միայն RAM-ում /run։
Հ. Ինչպե՞ս անջատել journald-ը և վերադառնալ rsyslog-ին։ Պ. Դուք չեք կարող ամբողջությամբ անջատել journald-ը (այն systemd-ի մաս է), բայց կարող եք. - Վերաուղղել օրագրերը rsyslog-ին /etc/systemd/journald.conf-ի միջոցով կամ օգտագործել systemd-journald-ը SystemMaxUse=0-ով՝ օրագրավորումը անջատելու համար։ - Կամ անջատել journald-ը որպես rsyslog-ի աղբյուր՝ թողնելով միայն այն։
Հ. Արդյո՞ք օրագրերը կարող են լինել շիֆրված։ Պ. journald-ն չի աջակցում շիֆրմանը սկզբնական վիճակում։ Դրա համար օգտագործեք. - logrotate + gpg, - Կամ երրորդ կողմի SIEM համակարգեր (Graylog, ELK, Loki + Promtail)։