Անցնել պարունակությանը

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 status

Ստուգեք ելքային տվյալներում նման տողեր.

Local time: Thu 2025-11-07 15:32:11 
Time zone: Europe/Paris (PAR, +0100)

Ժամային գոտու կառավարում

# Ցուցադրել բոլոր հասանելի ժամային գոտիները
timedatectl list-timezones


# Կարգավորել (օրինակ՝ Բեռլինի համար)
sudo timedatectl set-timezone Europe/Berlin

Օրագրերի դիտում UTC-ով

journalctl --utc           # միշտ UTC
journalctl -b --utc        # ընթացիկ մեկնարկ, UTC-ով

Մեկնարկների պատմություն

Լռելյայն նախկին մեկնարկների օրագրերը պահպանված չեն (այն պահվում է միայն /run/log/journal/-ում, որը մաքրվում է վերամեկնարկի ժամանակ)։ Դրանք պահպանելու համար ակտիվացրեք մշտական պահպանումը.

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald

Կամ խմբագրեք կոնֆիգուրացիան ձեռքով.

sudo nano /etc/systemd/journald.conf

Հեռացրեք անդրադարձը և փոփոխեք.

[Journal]
Storage=persistent

Մեկնարկների հետ աշխատելը

# Ցուցադրել բոլոր պահպանված մեկնարկները
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

Օրագրի չափի կառավարում

Ընթացիկ չափ

# --vacuum-size=100M
journalctl --vacuum-size=100M

Օրագրերի մաքրում

Ըստ չափի

# --vacuum-files=5
journalctl --vacuum-files=5

Ըստ ժամանակի

# --vacuum-time=1d
journalctl --vacuum-time=1d

Note

Ընդունված վերջավորություններ. s, m, h, days, weeks, months, years։

Մշտական սահմանափակումներ (կոնֆիգում)

Խմբագրեք /etc/systemd/journald.conf.

- SystemMaxUse=1G
+ SystemMaxUse=500M

Փոփոխություններից հետո.

systemctl restart systemd-journald

Note

journald.conf-ի փոփոխությունները չեն ազդում արդեն կուտակված օրագրերի վրա՝ օգտագործեք --vacuum-* մաքրելու համար։

Առաջադեմ տեխնիկա

Որոնում ըստ բովանդակության (grep-ով)

journalctl -u nginx | grep "error"

Իրադարձությունների հաճախականության վերլուծություն

journalctl --since "2023-01-01" --until "2023-01-31" | grep "error" | wc -l

Ելքային տվյալներ և պահպանում

journalctl -b -u docker --no-pager > docker_boot.log

ՀՏՀ

Հ. Ինչու՞ է journalctl-ը չցուցադրում նախկին վերամեկնարկների օրագրերը։ Պ. Ստուգեք, արդյոք Storage=persistent ակտիվացված է և արդյոք /var/log/journal/ գոյություն ունի։ Առանց դրա օրագրերը պահվում են միայն RAM-ում /run։

Հ. Ինչպե՞ս անջատել journald-ը և վերադառնալ rsyslog-ին։ Պ. Դուք չեք կարող ամբողջությամբ անջատել journald-ը (այն systemd-ի մաս է), բայց կարող եք. - Վերաուղղել օրագրերը rsyslog-ին /etc/systemd/journald.conf-ի միջոցով կամ օգտագործել systemd-journaldSystemMaxUse=0-ով՝ օրագրավորումը անջատելու համար։ - Կամ անջատել journald-ը որպես rsyslog-ի աղբյուր՝ թողնելով միայն այն։

Հ. Արդյո՞ք օրագրերը կարող են լինել շիֆրված։ Պ. journald-ն չի աջակցում շիֆրմանը սկզբնական վիճակում։ Դրա համար օգտագործեք. - logrotate + gpg, - Կամ երրորդ կողմի SIEM համակարգեր (Graylog, ELK, Loki + Promtail)։

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×