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.
- Sistēmas startēšanas procesa un pakalpojumu pārvaldība (SysVinit, Systemd un Upstart)
- Petiti - atvērtā pirmkoda žurnālu analīzes rīks Linux SysAdmins
- Kā iestatīt un pārvaldīt žurnāla pagriešanu, izmantojot Linux programmu Logrotate
- 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.