Dhibiti Ujumbe wa Kumbukumbu Chini ya Systemd Ukitumia Journalctl [Mwongozo Kamili]


Systemd ni mfumo wa kisasa na kidhibiti cha huduma kwa mifumo ya Linux: uingizwaji wa daemon ya init unaokusudiwa kuanza michakato sambamba kwenye kuwasha mfumo. Sasa inaauniwa katika idadi ya usambazaji wa kawaida wa sasa ikiwa ni pamoja na Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, nk.

Hapo awali, tulielezea hadithi nyuma ya 'init' na 'systemd'; ambapo tulijadili daemons mbili ni nini, kwa nini 'init' kiufundi inahitajika kubadilishwa na 'systemd' na vile vile sifa kuu za systemd.

Moja ya faida kuu za systemd juu ya mifumo mingine ya kawaida ya init ni, usaidizi wa usimamizi wa kati wa mfumo na ukataji miti kwa kutumia jarida. Katika makala haya, tutajifunza jinsi ya kudhibiti na kutazama ujumbe wa kumbukumbu chini ya systemd kwa kutumia journalctl amri katika Linux.

Muhimu: Kabla ya kusonga zaidi katika mwongozo huu, unaweza kutaka kujifunza jinsi ya kudhibiti kuunda na kuendesha vitengo vipya vya huduma katika mfumo kwa kutumia hati za shell katika Linux. Walakini, ikiwa uko sawa na yote hapo juu, endelea kusoma.

Inasanidi Iliyoandikwa kwa Kukusanya Ujumbe wa Kumbukumbu Chini ya Systemd

Journald ni daemon ambayo inakusanya na kuandika maingizo ya jarida kutoka kwa mfumo mzima; hizi kimsingi ni jumbe za uanzishaji, jumbe kutoka kwa kernel na kutoka kwa syslog au programu-tumizi mbalimbali na huhifadhi jumbe zote katika eneo la kati - faili ya jarida.

Unaweza kudhibiti tabia ya jarida kupitia faili yake chaguo-msingi ya usanidi: /etc/systemd/journald.conf ambayo inatolewa kwa wakati wa kukusanya. Faili hii ina chaguo ambazo thamani zake unaweza kubadilisha ili kuendana na mahitaji ya mazingira yako ya ndani.

Ifuatayo ni sampuli ya jinsi faili inavyoonekana, inayotazamwa kwa kutumia amri ya paka.

$ 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

Kumbuka kuwa vifurushi mbalimbali husakinishwa na kutumia dondoo za usanidi katika /usr/lib/systemd/*.conf.d/ na usanidi wa wakati wa kukimbia unaweza kupatikana katika /run/systemd/journald.conf.d/*.conf ambayo si lazima kutumia.

Idadi ya usambazaji wa Linux ikiwa ni pamoja na Ubuntu na derivatives yake kama Linux Mint haiwashi uhifadhi unaoendelea wa ujumbe wa boot kwenye diski kwa chaguo-msingi.

Inawezekana kuwezesha hili kwa kuweka chaguo la \Hifadhi kuwa \kudumu kama inavyoonyeshwa hapa chini. Hii itaunda saraka ya /var/log/journal na faili zote za jarida zitahifadhiwa chini yake.

$ sudo vi /etc/systemd/journald.conf 
OR
$ sudo nano /etc/systemd/journald.conf 
[Journal]
Storage=persistent

Kwa mipangilio ya ziada, pata maana ya chaguo zote ambazo zinafaa kusanidiwa chini ya sehemu ya [Jarida] kwa kuandika.

$ man journald.conf

Kwa usimamizi unaotegemewa wa kumbukumbu chini ya mfumo kwa kutumia huduma ya majarida, hakikisha kuwa mipangilio ya saa ikijumuisha saa za eneo ni sahihi kwenye mfumo.

Ili kuona mipangilio ya sasa ya tarehe na saa kwenye mfumo wako, chapa.

$ 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

Ili kuweka saa za eneo sahihi na ikiwezekana wakati wa mfumo, tumia amri zilizo hapa chini.

$ sudo timedatectl set-timezone  Africa/Kampala
$ sudo timedatectl set-time “13:50:00”

journalctl ni shirika linalotumiwa kutazama yaliyomo kwenye jarida la systemd (ambalo limeandikwa na huduma ya jarida).

Ili kuonyesha kumbukumbu zote zilizokusanywa bila kuchuja, chapa.

$ 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

Unaweza kuonyesha orodha ya nambari za kuwasha (ikilinganishwa na kianzio cha sasa), vitambulisho vyake, na mihuri ya muda ya ujumbe wa kwanza na wa mwisho unaolingana na kuwasha kwa chaguo la --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 

Kutazama maingizo ya jarida kutoka kwa kianzishaji cha sasa (nambari 0), tumia ubadilishaji wa -b kama hii (sawa na sampuli ya matokeo hapo juu).

$ journalctl -b

na kuona shajara kutoka kwenye buti iliyotangulia, tumia -1 pointer jamaa yenye chaguo la -b kama ilivyo hapo chini.

$ journalctl -b -1

Vinginevyo, tumia kitambulisho cha boot kama hii.

$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Ili kutumia muda katika umbizo la Coordinated Universal Time (UTC), ongeza chaguo za --utc kama ifuatavyo.

$ journalctl --utc

Kuona maingizo yote tangu tarehe na wakati mahususi, k.m. Tarehe 15 Juni, 2017 saa 8:15 AM, andika amri hii.

$ journalctl --since "2017-06-15 08:15:00"
$ journalctl --since today
$ journalctl --since yesterday

Ili kutazama jumbe 10 za kumbukumbu (chaguo-msingi 10), tumia alama ya -n kama inavyoonyeshwa hapa chini.

$ journalctl -n
$ journalctl -n 20 

Ili kuona ujumbe wa kernel pekee, sawa na pato la amri ya dmesg, unaweza kutumia -k bendera.

$ journalctl -k 
$ journalctl -k -b 
$ journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9

Ili kuona maingizo yote ya jarida la kitengo fulani, tumia swichi ya -u kama ifuatavyo.

$ journalctl -u apache2.service

Ili sifuri chini kwa buti ya sasa, chapa amri hii.

$ journalctl -b -u apache2.service

Ili kuonyesha kumbukumbu kutoka kwa buti iliyopita, tumia hii.

$ journalctl -b -1 -u apache2.service

Chini ni amri zingine muhimu:

$ journalctl -u apache2.service  
$ journalctl -u apache2.service --since today
$ journalctl -u apache2.service -u nagios.service --since yesterday

Ili kutazama kumbukumbu zinazozalishwa na mchakato maalum, taja ni PID kama hii.

$ journalctl _PID=19487
$ journalctl _PID=19487 --since today
$ journalctl _PID=19487 --since yesterday

Ili kuona kumbukumbu zilizotolewa na mtumiaji au kikundi fulani, bainisha kitambulisho cha mtumiaji au kikundi kama hiki.

$ journalctl _UID=1000
$ journalctl _UID=1000 --since today
$ journalctl _UID=1000 -b -1 --since today

Kuonyesha kumbukumbu zote zinazotolewa na faili (labda inayoweza kutekelezwa), kama vile D-Bus inayoweza kutekelezwa au utekelezaji wa bash, chapa tu.

$ journalctl /usr/bin/dbus-daemon
$ journalctl /usr/bin/bash

Unaweza pia kuchuja matokeo kulingana na vipaumbele vya ujumbe au safu za kipaumbele kwa kutumia alama ya -p. Thamani zinazowezekana ni: 0 - kuibuka, 1 - tahadhari, 2 - crit, 3 - makosa, 4 - onyo, 5 - ilani, 6 - maelezo, 7 - utatuzi):

$ journalctl -p err

Ili kubainisha masafa, tumia umbizo lililo hapa chini (tokeza kwenye onyo).

$ journalctl -p 1..4
OR
$ journalctl -p emerg..warning

Unaweza kutazama kumbukumbu jinsi zinavyoandikwa kwa chaguo la -f (sawa na utendakazi wa tail -f).

$ journalctl -f

Ikiwa unataka kudhibiti uumbizaji wa matokeo ya maingizo ya jarida, ongeza -o bendera na utumie chaguo hizi: cat, export, json, json-pretty, json-sse, short, short-iso, short-monotonic, short-sahihi na verbose(angalia maana ya chaguzi katika ukurasa wa mtu:

Chaguo la paka linaonyesha ujumbe halisi wa kila ingizo la jarida bila metadata yoyote (muhuri wa muda na kadhalika).

$ journalctl -b -u apache2.service -o cat

Ili kuangalia faili ya jarida kwa uwiano wa ndani, tumia chaguo la --verify. Ikiwa yote ni sawa, matokeo yanapaswa kuonyesha 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

Unaweza pia kuonyesha matumizi ya sasa ya diski ya faili zote za jarida kwa chaguzi za --disk-usage. Inaonyesha jumla ya matumizi ya diski ya faili zote za kumbukumbu na kazi za jarida:

$ journalctl --disk-usage

Ili kufuta faili za jarida za zamani (zilizohifadhiwa) endesha amri hapa chini:

$ 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

Mwisho kabisa, unaweza kuelekeza jarida kuzungusha faili za jarida kwa chaguo la --rotate. Kumbuka kuwa agizo hili halirudi hadi operesheni ya kuzunguka ikamilike:

$ sudo journalctl --rotate

Kwa mwongozo wa kina wa matumizi na chaguo, tazama ukurasa wa mtu wa journalctl kama ifuatavyo.

$ man journalctl

Angalia baadhi ya makala muhimu.

  1. Kusimamia Mchakato na Huduma za Kuanzisha Mfumo (SysVinit, Systemd na Upstart)
  2. Petiti - Zana ya Uchambuzi wa Kumbukumbu ya Chanzo Huria kwa Linux SysAdmins
  3. Jinsi ya Kuweka na Kudhibiti Mzunguko wa Kumbukumbu kwa Kutumia Logrotate katika Linux
  4. lnav - Tazama na Uchanganue Kumbukumbu za Apache kutoka kwa Kituo cha Linux

Ni hayo kwa sasa. Tumia maoni kutoka hapa chini kuuliza maswali yoyote au kukuongezea mawazo kuhusu mada hii.