Pārvaldiet žurnāla ziņojumus zem Systemd, izmantojot Journalctl [Visaptveroša rokasgrāmata]


Systemd ir vismodernākais sistēmu un pakalpojumu pārvaldnieks Linux sistēmām: init dēmona nomaiņa, kas paredzēta procesu sākšanai paralēli sistēmas sāknēšanas laikā. Tagad tas tiek atbalstīts vairākos pašreizējos galvenajos izplatījumos, tostarp Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS utt.

Iepriekš mēs izskaidrojām stāstu par ‘init’ un ‘systemd’; kur mēs apspriedām, kas ir abi dēmoni, kāpēc ‘init’ tehniski bija jāaizstāj ar ‘systemd’, kā arī galvenās systemd iezīmes.

Viena no galvenajām sistēmas priekšrocībām salīdzinājumā ar citām parastajām init sistēmām ir atbalsts centralizētai sistēmas un procesu reģistrēšanai, izmantojot žurnālu. Šajā rakstā mēs uzzināsim, kā pārvaldīt un skatīt žurnālziņojumus sistēmā systemd, izmantojot žurnālu journall Linux.

Svarīgi: Pirms doties tālāk šajā rokasgrāmatā, iespējams, vēlēsities uzzināt, kā pārvaldīt jaunu pakalpojumu vienību izveidi un palaišanu sistēmā system, izmantojot Linux čaulas skriptus. Tomēr, ja jums viss kārtībā ar visu iepriekš minēto, turpiniet to izlasīt.

Journald konfigurēšana žurnāla ziņojumu apkopošanai zem Systemd

journalnald ir dēmons, kas apkopo un raksta žurnāla ierakstus no visas sistēmas; tie būtībā ir sāknēšanas ziņojumi, ziņojumi no kodola un no syslog vai dažādām lietojumprogrammām, un tas visus ziņojumus glabā centrālā vietā - žurnāla failā.

Journaln darbību var kontrolēt, izmantojot tā noklusējuma konfigurācijas failu: /etc/systemd/journald.conf, kas tiek ģenerēts kompilēšanas laikā. Šajā failā ir opcijas, kuru vērtības varat mainīt, lai atbilstu jūsu vietējās vides prasībām.

Zemāk ir faila izskata paraugs, kas skatīts, izmantojot komandu 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

Ievērojiet, ka dažādas pakotņu instalēšanas un konfigurācijas izrakstu /usr/lib/systemd/*.conf.d/ un izpildes laika konfigurācijas var atrast mapē /run/systemd/journald.conf.d/*.conf, kuras, iespējams, nav obligāti izmantot.

Vairāki Linux izplatījumi, ieskaitot Ubuntu, un tā atvasinājumi, piemēram, Linux Mint, pēc noklusējuma neļauj pastāvīgi saglabāt sāknēšanas ziņojumus diskā.

To ir iespējams iespējot, iestatot opciju “Uzglabāšana” uz “pastāvīga”, kā parādīts zemāk. Tas izveidos direktoriju/var/log/journal un visi žurnāla faili tiks saglabāti zem tā.

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

Lai iegūtu papildu iestatījumus, atrodiet visu opciju nozīmi, kuras ir jākonfigurē sadaļā “[Žurnāls]”, ierakstot.

$ man journald.conf

Lai nodrošinātu uzticamu žurnālu pārvaldību sistēmā systemd, izmantojot žurnāla pakalpojumu, pārliecinieties, ka laika iestatījumi, ieskaitot laika joslu, sistēmā ir pareizi.

Lai sistēmā skatītu pašreizējos datuma un laika iestatījumus, ierakstiet.

$ 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

Lai iestatītu pareizu laika joslu un, iespējams, sistēmas laiku, izmantojiet tālāk norādītās komandas.

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

journalctl ir utilīta, ko izmanto, lai skatītu systemd žurnāla saturu (kuru raksta journaln service).

Lai parādītu visus savāktos žurnālus bez filtrēšanas, ierakstiet.

$ 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

Varat parādīt sāknēšanas numuru sarakstu (attiecībā pret pašreizējo sāknēšanu), to ID un pirmā un pēdējā ziņojuma laika zīmogus, kas atbilst sāknēšanai, izmantojot opciju --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 

Lai skatītu žurnāla ierakstus no pašreizējās sāknēšanas (numurs 0), izmantojiet slēdzi -b līdzīgi šim (tas pats, kas iepriekš izlaides paraugam).

$ journalctl -b

un, lai skatītu žurnālu no iepriekšējās sāknēšanas, izmantojiet relatīvo rādītāju -1 ar opciju -b , kā norādīts zemāk.

$ journalctl -b -1

Alternatīvi izmantojiet šādi sāknēšanas ID.

$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Lai izmantotu laiku koordinētā universālā laika (UTC) formātā, pievienojiet opcijas --utc šādi.

$ journalctl --utc

Lai skatītu visus ierakstus kopš noteikta datuma un laika, piem. 2017. gada 15. jūnijā plkst. 8:15 ierakstiet šo komandu.

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

Lai skatītu nesenos žurnāla ziņojumus (pēc noklusējuma 10), izmantojiet karodziņu -n , kā parādīts zemāk.

$ journalctl -n
$ journalctl -n 20 

Lai skatītu tikai kodola ziņojumus, līdzīgi kā dmesg komandas izvade, varat izmantot karodziņu -k .

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

Lai varētu skatīt visus konkrētas vienības žurnāla ierakstus, izmantojiet slēdzi -u šādi.

$ journalctl -u apache2.service

Lai iestatītu nulli līdz pašreizējai sāknēšanai, ierakstiet šo komandu.

$ journalctl -b -u apache2.service

Lai parādītu žurnālus no iepriekšējās sāknēšanas, izmantojiet šo.

$ journalctl -b -1 -u apache2.service

Zemāk ir dažas citas noderīgas komandas:

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

Lai skatītu žurnālus, kurus ģenerējis konkrēts process, norādiet tā PID šādi.

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

Lai skatītu konkrēta lietotāja vai grupas ģenerētus žurnālus, norādiet tā lietotāja vai grupas ID.

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

Lai parādītu visus faila (iespējams, izpildāmā faila) ģenerētos žurnālus, piemēram, izpildāmo D-Bus vai bash izpildāmos, vienkārši ierakstiet.

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

Varat arī filtrēt izvadi, pamatojoties uz ziņojumu prioritātēm vai prioritāšu diapazoniem, izmantojot karodziņu -p . Iespējamās vērtības ir: 0 - parādīšanās, 1 - trauksme, 2 - kritiska, 3 - kļūdīšanās, 4 - brīdināšana, 5 - paziņojums, 6 - informācija, 7 - atkļūdošana):

$ journalctl -p err

Lai norādītu diapazonu, izmantojiet zemāk redzamo formātu (parādās brīdinājumam).

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

Jūs varat praktiski skatīties žurnālus, kamēr tie tiek rakstīti, izmantojot opciju -f (līdzīgi funkcijām tail -f).

$ journalctl -f

Ja vēlaties kontrolēt žurnāla ierakstu izvades formatējumu, pievienojiet karodziņu -o un izmantojiet šīs opcijas: cat, export, json, json-pretty, json-sse, short, short-iso, īsi monotoni, īsi precīzi un daudzveidīgi (pārbaudiet opciju nozīmi manā lapā:

Cat opcija parāda katra žurnāla ieraksta faktisko ziņojumu bez metadatiem (laika zīmogs un tā tālāk).

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

Lai pārbaudītu žurnāla faila iekšējo konsekvenci, izmantojiet opciju --verify . Ja viss ir kārtībā, izvadē jānorāda 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

Izmantojot opcijas --disk-use , varat parādīt visu žurnāla failu pašreizējo diska lietojumu. Tas parāda visu arhivēto un aktīvo žurnālu failu diska izmantošanas summu:

$ journalctl --disk-usage

Lai izdzēstu vecos (arhivētos) žurnāla failus, izpildiet tālāk norādītās komandas.

$ 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

Visbeidzot, jūs varat uzdot žurnālam pagriezt žurnāla failus, izmantojot opciju --rotate . Ņemiet vērā, ka šī direktīva neatgriežas, kamēr rotācijas darbība nav pabeigta:

$ sudo journalctl --rotate

Lai iegūtu padziļinātu lietošanas rokasgrāmatu un iespējas, skatiet žurnāla journal lapu šādi.

$ man journalctl

Pārbaudiet dažus noderīgus rakstus.

  1. Sistēmas startēšanas procesa un pakalpojumu pārvaldība (SysVinit, Systemd un Upstart)
  2. Petiti - atvērtā pirmkoda žurnālu analīzes rīks Linux SysAdmins
  3. Kā iestatīt un pārvaldīt žurnāla pagriešanu, izmantojot Linux programmu Logrotate
  4. lnav - skatieties un analizējiet Apache žurnālus no Linux termināļa

Pagaidām viss. Izmantojiet tālāk sniegto informāciju, lai uzdotu jautājumus vai pievienotu savas domas par šo tēmu.