Hallitse lokiviestejä Systemdissä Journalctl:n avulla [kattava opas]


Systemd on huippuluokan järjestelmä- ja palveluhallinta Linux-järjestelmille: init-daemonin korvaava versio, joka on tarkoitettu käynnistämään prosessit rinnakkain järjestelmän käynnistyksen yhteydessä. Sitä tuetaan nyt useissa nykyisissä yleisissä jakeluissa, mukaan lukien Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS jne.

Aiemmin selitimme tarinan "init" ja "systemd" takana. jossa keskustelimme siitä, mitä nämä kaksi demonia ovat, miksi init piti teknisesti korvata sanalla systemd, sekä systemd:n pääominaisuuksista.

Yksi systemdin tärkeimmistä eduista muihin yleisiin init-järjestelmiin verrattuna on tuki järjestelmän ja prosessien kirjaamisen keskitetylle hallitukselle päiväkirjan avulla. Tässä artikkelissa opimme hallitsemaan ja tarkastelemaan lokiviestejä systemd-komennolla journalctl-komennolla Linuxissa.

Tärkeää: Ennen kuin jatkat tässä oppaassa, saatat haluta oppia hallitsemaan "Systemd"-palveluita ja -yksiköitä "Systemctl"-komennolla sekä luomaan ja suorittamaan uusia palveluyksiköt systemdissä käyttäen komentotulkkikomentosarjaa Linuxissa. Jos kuitenkin olet tyytyväinen kaikkiin yllä oleviin, jatka lukemista.

Lokikirjan määrittäminen lokiviestien keräämistä varten kohdassa Systemd

journald on demoni, joka kerää ja kirjoittaa päiväkirjamerkintöjä koko järjestelmästä; nämä ovat pohjimmiltaan käynnistysviestejä, viestejä ytimestä ja syslogista tai erilaisista sovelluksista ja se tallentaa kaikki viestit keskeiseen paikkaan - päiväkirjatiedostoon.

Voit hallita journaldin toimintaa sen oletusmääritystiedostolla: /etc/systemd/journald.conf, joka luodaan käännösvaiheessa. Tämä tiedosto sisältää valintoja, joiden arvoja voit muuttaa vastaamaan paikallisia ympäristövaatimuksia.

Alla on esimerkki siitä, miltä tiedosto näyttää cat-komennolla tarkasteltuna.

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

Huomaa, että useat pakettien asennukset ja käyttöasetukset tiedostossa /usr/lib/systemd/*.conf.d/ ja ajonaikaiset määritykset löytyvät osoitteesta /run/systemd/journald.conf. d/*.conf, jota et välttämättä käytä.

Ota päiväkirjatietojen tallennus levylle käyttöön

Useat Linux-jakelut, mukaan lukien Ubuntu ja sen johdannaiset, kuten Linux Mint, eivät oletuksena salli käynnistysviestien jatkuvaa tallennusta levylle.

Voit ottaa tämän käyttöön asettamalla Tallennus-vaihtoehdon arvoon pysyvä alla olevan kuvan mukaisesti. Tämä luo hakemiston /var/log/journal ja kaikki päiväkirjatiedostot tallennetaan sen alle.

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

Jos haluat lisäasetuksia, etsi kaikkien määritettävien asetusten merkitys [Journal]-osiosta kirjoittamalla.

man journald.conf

Oikean järjestelmäajan asettaminen Timedatectl-komennolla

Varmista, että aika-asetukset, mukaan lukien aikavyöhyke, ovat oikeat järjestelmässä, jotta lokinhallinta on luotettavaa systemd-palvelussa.

Nähdäksesi nykyiset päivämäärä- ja aika-asetukset järjestelmässäsi, kirjoita.

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

Aseta oikea aikavyöhyke ja mahdollisesti järjestelmäaika käyttämällä alla olevia komentoja.

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

Lokiviestien katseleminen Journalctl-komennolla

journalctl on apuohjelma, jolla tarkastellaan systemd-päiväkirjan sisältöä (jonka on kirjoittanut päiväkirjapalvelu).

Näytä kaikki kerätyt lokit ilman suodatusta kirjoittamalla.

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 (buildd@lgw01-21)
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

Näytä lokiviestit, jotka perustuvat saappaisiin

Voit näyttää luettelon käynnistysnumeroista (suhteessa nykyiseen käynnistykseen), niiden tunnuksista sekä käynnistystä vastaavan ensimmäisen ja viimeisen viestin aikaleimat --list-boots-vaihtoehdolla.

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 

Voit tarkastella päiväkirjamerkintöjä nykyisestä käynnistyksestä (numero 0) käyttämällä -b-kytkintä tällä tavalla (sama kuin yllä oleva esimerkkituloste).

journalctl -b

ja nähdäksesi päiväkirjan edellisestä käynnistyksestä, käytä suhteellista osoitinta -1 ja -b-vaihtoehtoa alla kuvatulla tavalla.

journalctl -b -1

Vaihtoehtoisesti voit käyttää käynnistystunnusta näin.

journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Lokiviestien suodatus ajankohdan perusteella

Jos haluat käyttää aikaa UTC (Coordinated Universal Time) -muodossa, lisää --utc-valinnat seuraavasti.

journalctl --utc

Jos haluat nähdä kaikki merkinnät tietyn päivämäärän ja kellonajan jälkeen, esim. 15. kesäkuuta 2017 klo 8.15, kirjoita tämä komento.

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

Viimeisimpien lokiviestien katselu

Voit tarkastella viimeisimpiä lokiviestejä (oletusarvoisesti 10) käyttämällä -n-lippua alla olevan kuvan mukaisesti.

journalctl -n
journalctl -n 20 

Ytimen luomien lokiviestien katselu

Jos haluat nähdä vain ytimen viestit, kuten dmesg-komennon tulos, voit käyttää lippua -k.

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

Yksikön luomien lokiviestien katselu

Jos haluat tarkastella kaikkia tietyn yksikön päiväkirjakirjauksia, käytä -u-kytkintä seuraavasti.

journalctl -u apache2.service

Voit nollata nykyiseen käynnistykseen kirjoittamalla tämän komennon.

journalctl -b -u apache2.service

Käytä tätä näyttääksesi lokit edellisestä käynnistyksestä.

journalctl -b -1 -u apache2.service

Alla on joitain muita hyödyllisiä komentoja:

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

Prosessien luomien lokiviestien katselu

Jos haluat tarkastella tietyn prosessin luomia lokeja, määritä sen PID seuraavasti.

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

Käyttäjä- tai ryhmätunnuksen luomien lokiviestien katselu

Jos haluat tarkastella tietyn käyttäjän tai ryhmän luomia lokeja, määritä sen käyttäjä- tai ryhmätunnus näin.

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

Tiedoston luomien lokien katselu

Voit näyttää kaikki tiedoston (mahdollisesti suoritettavan tiedoston) luomat lokit, kuten D-Bus-suoritettavat tiedostot tai bash-suoritettavat tiedostot, kirjoittamalla.

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

Lokiviestien katselu tärkeysjärjestyksen mukaan

Voit myös suodattaa tulosteen viestien prioriteettien tai prioriteettialueiden perusteella käyttämällä -p-lippua. Mahdolliset arvot ovat: 0 – emerg, 1 – alert, 2 – crit, 3 – err, 4 – varoitus, 5 – huomautus, 6 – info, 7 – debug):

journalctl -p err

Voit määrittää alueen käyttämällä alla olevaa muotoa (erg to varoitus).

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

Tarkastele lokiviestejä reaaliajassa

Voit käytännössä katsoa lokeja, kun niitä kirjoitetaan -f-vaihtoehdolla (samanlainen kuin tail -f-toiminto).

journalctl -f

Päiväkirjan näytön muotoilun käsittely

Jos haluat hallita päiväkirjakirjausten tulosteen muotoilua, lisää lippu -o ja käytä näitä vaihtoehtoja: cat, export, json, json-pretty, json-sse, short, short-iso, lyhyt-monotoninen, lyhyttarkka ja monisanainen (tarkista vaihtoehtojen merkitys man-sivulta:

kissa-vaihtoehto näyttää jokaisen päiväkirjamerkinnän todellisen viestin ilman metatietoja (aikaleima ja niin edelleen).

journalctl -b -u apache2.service -o cat

Päiväkirjojen hallinta järjestelmässä

Voit tarkistaa lokitiedoston sisäisen johdonmukaisuuden käyttämällä --verify-vaihtoehtoa. Jos kaikki on hyvin, lähdön tulee osoittaa PASS.

journalctl --verify

PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal                               
491f68: Unused data (entry_offset==0)                                                                
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000003184-000551f9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000001fc8-000551f5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000d4f-000551f1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000001-000551f01cfcedff.journal

Vanhojen päiväkirjatiedostojen poistaminen

Voit myös näyttää kaikkien lokitiedostojen nykyisen levynkäytön --disk-usage-vaihtoehdoilla. Se näyttää kaikkien arkistoitujen ja aktiivisten päiväkirjatiedostojen levynkäytön summan:

journalctl --disk-usage

Voit poistaa vanhoja (arkistoituja) päiväkirjatiedostoja suorittamalla alla olevat komennot:

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

Pyörittävät päiväkirjatiedostot

Viimeisenä mutta ei vähäisimpänä, voit käskeä kirjauskansion kiertämään päiväkirjatiedostoja --rotate-vaihtoehdolla. Huomaa, että tämä ohje ei palaa ennen kuin kiertotoiminto on valmis:

sudo journalctl --rotate

Tarkemman käyttöoppaan ja vaihtoehdot löydät Journalctl-manuaalisivulta seuraavasti.

man journalctl

Tutustu hyödyllisiin artikkeleihin.

  1. Järjestelmän käynnistysprosessin ja -palvelujen hallinta (SysVinit, Systemd ja Upstart)
  2. Petiti – avoimen lähdekoodin lokianalyysityökalu Linux SysAdminsille
  3. Kuinka määrittää ja hallita lokin kiertoa Logrotatella Linuxissa
  4. lnav – Katsele ja analysoi Apache-lokeja Linux-päätteestä

Siinä se toistaiseksi. Käytä alla olevaa palautetta kysyäksesi kysymyksiä tai lisätäksesi ajatuksiasi tästä aiheesta.