Menaxho mesazhet e regjistrave nën Systemd duke përdorur Journalctl [Udhëzues gjithëpërfshirës]
Systemd është një sistem dhe menaxher shërbimi më i avancuar për sistemet Linux: një zëvendësim init demon i synuar për të nisur proceset paralelisht në nisjen e sistemit. Tani ai mbështetet në një numër të shpërndarjeve aktuale kryesore duke përfshirë Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, etj.
Më herët, ne shpjeguam historinë pas 'init' dhe 'systemd'; ku diskutuam se cilat janë dy demonët, pse teknikisht duhej zëvendësuar 'init' me 'systemd' si dhe tiparet kryesore të systemd.
Një nga avantazhet kryesore të systemd mbi sistemet e tjera fillestare të zakonshme është mbështetja për menaxhimin e centralizuar të regjistrimit të sistemit dhe proceseve duke përdorur një ditar. Në këtë artikull, ne do të mësojmë se si të menaxhojmë dhe shikojmë mesazhet e regjistrit nën systemd duke përdorur komandën journalctl në Linux.
E rëndësishme: Përpara se të vazhdoni më tej në këtë udhëzues, mund të dëshironi të mësoni se si të menaxhoni krijimin dhe ekzekutimin e njësive të reja të shërbimit në systemd duke përdorur skriptet shell në Linux. Sidoqoftë, nëse jeni në rregull me të gjitha sa më sipër, vazhdoni të lexoni.
Konfigurimi i ditarit për mbledhjen e mesazheve të regjistrit nën Systemd
journald është një daemon që mbledh dhe shkruan shënime në ditar nga i gjithë sistemi; këto janë në thelb mesazhe boot, mesazhe nga kerneli dhe nga syslog ose aplikacione të ndryshme dhe i ruan të gjitha mesazhet në një vendndodhje qendrore - skedar ditar.
Ju mund të kontrolloni sjelljen e ditarit nëpërmjet skedarit të tij të konfigurimit të paracaktuar: /etc/systemd/journald.conf i cili gjenerohet në kohën e përpilimit. Ky skedar përmban opsione, vlerat e të cilave mund t'i ndryshoni për t'iu përshtatur kërkesave tuaja lokale të mjedisit.
Më poshtë është një shembull se si duket skedari, i parë duke përdorur komandën cat.
$ cat /etc/systemd/journald.conf
# See journald.conf(5) for details.
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
Vini re se instalime të ndryshme të paketave dhe përdorin ekstrakte konfigurimi në /usr/lib/systemd/*.conf.d/ dhe konfigurimet e kohës së ekzekutimit mund të gjenden në /run/systemd/journald.conf.d/*.conf, gjë që mund të mos jetë e nevojshme. përdorni.
Një numër shpërndarjesh Linux, duke përfshirë Ubuntu dhe derivatet e tij si Linux Mint, nuk mundësojnë ruajtjen e vazhdueshme të mesazheve të nisjes në disk si parazgjedhje.
Është e mundur ta aktivizoni këtë duke vendosur opsionin \Storage\ në \persistent siç tregohet më poshtë. Kjo do të krijojë drejtorinë /var/log/journal dhe të gjithë skedarët e ditarit do të ruhen nën të.
$ sudo vi /etc/systemd/journald.conf
OR
$ sudo nano /etc/systemd/journald.conf
[Journal]
Storage=persistent
Për cilësime shtesë, gjeni kuptimin e të gjitha opsioneve që supozohet të konfigurohen nën seksionin [Journal] duke shtypur.
$ man journald.conf
Për menaxhim të besueshëm të regjistrave nën systemd duke përdorur shërbimin e ditarit, sigurohuni që cilësimet e kohës duke përfshirë zonën kohore të jenë të sakta në sistem.
Për të parë cilësimet aktuale të datës dhe orës në sistemin tuaj, shkruani.
$ timedatectl
OR
$ timedatectl status
Local time: Thu 2017-06-15 13:29:09 EAT
Universal time: Thu 2017-06-15 10:29:09 UTC
RTC time: Thu 2017-06-15 10:29:09
Time zone: Africa/Kampala (EAT, +0300)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
Për të vendosur zonën e saktë kohore dhe ndoshta kohën e sistemit, përdorni komandat më poshtë.
$ sudo timedatectl set-timezone Africa/Kampala
$ sudo timedatectl set-time “13:50:00”
journalctl është një mjet i përdorur për të parë përmbajtjen e ditarit systemd (i cili është shkruar nga shërbimi i ditarit).
Për të shfaqur të gjitha regjistrat e mbledhur pa asnjë filtrim, shkruani.
$ journalctl
-- Logs begin at Wed 2017-06-14 21:56:43 EAT, end at Thu 2017-06-15 12:28:19 EAT
Jun 14 21:56:43 tecmint systemd-journald[336]: Runtime journal (/run/log/journal
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuset
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpu
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuacct
Jun 14 21:56:43 tecmint kernel: Linux version 4.4.0-21-generic ([email )
Jun 14 21:56:43 tecmint kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-
Jun 14 21:56:43 tecmint kernel: KERNEL supported cpus:
Jun 14 21:56:43 tecmint kernel: Intel GenuineIntel
Jun 14 21:56:43 tecmint kernel: AMD AuthenticAMD
Jun 14 21:56:43 tecmint kernel: Centaur CentaurHauls
Jun 14 21:56:43 tecmint kernel: x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x01: 'x87 flo
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x02: 'SSE reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x04: 'AVX reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Enabled xstate features 0x7, context si
Jun 14 21:56:43 tecmint kernel: x86/fpu: Using 'eager' FPU context switches.
Jun 14 21:56:43 tecmint kernel: e820: BIOS-provided physical RAM map:
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000090000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000100000-0x000000001ff
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020000000-0x00000000201
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020200000-0x00000000400
Ju mund të shfaqni një listë të numrave të nisjes (në lidhje me nisjen aktuale), ID-të e tyre dhe vulat kohore të mesazhit të parë dhe të fundit që korrespondon me nisjen me opsionin --list-boots
.
$ journalctl --list-boots
-1 9fb590b48e1242f58c2579defdbbddc9 Thu 2017-06-15 16:43:36 EAT—Thu 2017-06-15 1
0 464ae35c6e264a4ca087949936be434a Thu 2017-06-15 16:47:36 EAT—Thu 2017-06-15 1
Për të parë shënimet e ditarit nga nisja aktuale (numri 0), përdorni çelësin -b
si ky (njëlloj si rezultati i mostrës më lart).
$ journalctl -b
dhe për të parë një ditar nga nisja e mëparshme, përdorni treguesin relativ -1
me opsionin -b
si më poshtë.
$ journalctl -b -1
Përndryshe, përdorni ID-në e nisjes si kjo.
$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9
Për të përdorur kohën në formatin Koordinuar Universal (UTC), shtoni opsionet --utc
si më poshtë.
$ journalctl --utc
Për të parë të gjitha hyrjet që nga një datë dhe orë e caktuar, p.sh. 15 qershor 2017 në orën 8:15, shkruani këtë komandë.
$ journalctl --since "2017-06-15 08:15:00"
$ journalctl --since today
$ journalctl --since yesterday
Për të parë mesazhet e fundit të regjistrit (10 si parazgjedhje), përdorni flamurin -n
siç tregohet më poshtë.
$ journalctl -n
$ journalctl -n 20
Për të parë vetëm mesazhet e kernelit, të ngjashme me daljen e komandës dmesg, mund të përdorni flamurin -k
.
$ journalctl -k
$ journalctl -k -b
$ journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9
Për të parë të gjitha shënimet e ditarit për një njësi të caktuar, përdorni çelësin -u
si më poshtë.
$ journalctl -u apache2.service
Për të zbritur në nisjen aktuale, shkruani këtë komandë.
$ journalctl -b -u apache2.service
Për të shfaqur regjistrat nga nisja e mëparshme, përdorni këtë.
$ journalctl -b -1 -u apache2.service
Më poshtë janë disa komanda të tjera të dobishme:
$ journalctl -u apache2.service
$ journalctl -u apache2.service --since today
$ journalctl -u apache2.service -u nagios.service --since yesterday
Për të parë regjistrat e krijuar nga një proces specifik, specifikoni PID si ky.
$ journalctl _PID=19487
$ journalctl _PID=19487 --since today
$ journalctl _PID=19487 --since yesterday
Për të parë regjistrat e krijuar nga një përdorues ose grup specifik, specifikoni ID-në e përdoruesit ose grupit si kjo.
$ journalctl _UID=1000
$ journalctl _UID=1000 --since today
$ journalctl _UID=1000 -b -1 --since today
Për të shfaqur të gjitha regjistrat e krijuar nga një skedar (ndoshta një ekzekutues), si për shembull ekzekutuesit D-Bus ose ekzekutuesit bash, thjesht shkruani.
$ journalctl /usr/bin/dbus-daemon
$ journalctl /usr/bin/bash
Ju gjithashtu mund të filtroni daljen bazuar në prioritetet e mesazheve ose vargjet e prioriteteve duke përdorur flamurin -p
. Vlerat e mundshme janë: 0 – emerg, 1 – alarm, 2 – crit, 3 – err, 4 – warning, 5 – njoftim, 6 – info, 7 – debug):
$ journalctl -p err
Për të specifikuar një gamë, përdorni formatin e mëposhtëm (shfaqni në paralajmërim).
$ journalctl -p 1..4
OR
$ journalctl -p emerg..warning
Praktikisht mund të shikoni regjistrat teksa po shkruhen me opsionin -f
(i ngjashëm me funksionalitetin tail -f).
$ journalctl -f
Nëse dëshironi të kontrolloni formatimin e daljes së shënimeve të ditarit, shtoni flamurin -o
dhe përdorni këto opsione: cat, export, json, json-pretty, json-sse, short, short-iso, shkurt-monotonik, shkurt-preciz dhe me fjalë (kontrolloni kuptimin e opsioneve në faqen e njeriut:
Opsioni cat tregon mesazhin aktual të çdo hyrjeje në ditar pa ndonjë metadatë (vulë kohore etj).
$ journalctl -b -u apache2.service -o cat
Për të kontrolluar skedarin e ditarit për qëndrueshmëri të brendshme, përdorni opsionin --verify
. Nëse gjithçka është mirë, dalja duhet të tregojë një PASS.
$ journalctl --verify
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal
491f68: Unused data (entry_offset==0)
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 01cfcedff.journal
Ju gjithashtu mund të shfaqni përdorimin aktual të diskut të të gjithë skedarëve të ditarit me opsionet --disk-usage
. Ai tregon shumën e përdorimit të diskut të të gjithë skedarëve të arkivuar dhe aktiv të ditarit:
$ journalctl --disk-usage
Për të fshirë skedarët e vjetër (të arkivuar) të ditarit, ekzekutoni komandat e mëposhtme:
$ sudo journalctl --vacuum-size=50M #delete files until the disk space they use falls below the specified size
$ sudo journalctl --vacuum-time=1years #delete files so that all journal files contain no data older than the specified timespan
$ sudo journalctl --vacuum-files=4 #delete files so that no more than the specified number of separate journal files remain in storage location
E fundit, por jo më pak e rëndësishme, ju mund ta udhëzoni ditarin të rrotullojë skedarët e ditarit me opsionin --rotate
. Vini re se kjo direktivë nuk kthehet derisa të përfundojë operacioni i rrotullimit:
$ sudo journalctl --rotate
Për një udhëzues të thelluar të përdorimit dhe opsionet, shikoni faqen e njeriut të journalctl si më poshtë.
$ man journalctl
Shikoni disa artikuj të dobishëm.
- Menaxhimi i procesit dhe shërbimeve të nisjes së sistemit (SysVinit, Systemd dhe Upstart)
- Petiti – Një mjet i analizës së regjistrave me burim të hapur për Linux SysAdmins
- Si të konfiguroni dhe menaxhoni rrotullimin e regjistrave duke përdorur Logrotate në Linux
- lnav – Shikoni dhe analizoni regjistrat e Apache nga një terminal Linux
Kjo është ajo për momentin. Përdorni komentet nga poshtë për të bërë pyetje ose për të shtuar mendimet tuaja mbi këtë temë.