Hallinnoi lokiviestejä Systemd-sovelluksessa Journalctl: n avulla [Kattava opas]
Systemd on huipputason järjestelmä- ja palvelunhallinta Linux-järjestelmille: init-daemon-korvaus, joka on tarkoitettu käynnistämään prosessit samanaikaisesti järjestelmän käynnistyksen yhteydessä. Sitä tuetaan nyt useissa nykyisissä valtavirran jakeluissa, mukaan lukien Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS jne.
Aikaisemmin selitimme tarinan ”init” ja ”systemd”; missä keskustelimme kahdesta demonista, miksi "init" oli teknisesti korvattava "systemd": llä sekä systemd: n pääpiirteistä.
Yksi systemd: n tärkeimmistä eduista muihin yleisiin init-järjestelmiin verrattuna on tuki keskitetylle järjestelmän ja prosessien kirjaamisen päiväkirjaa käyttäen. Tässä artikkelissa opitaan kuinka hallita ja tarkastella lokiviestejä systemd-tiedostossa käyttämällä journalctl-komentoa Linuxissa.
Tärkeää: Ennen kuin siirryt eteenpäin tässä oppaassa, saatat haluta oppia hallitsemaan uusien palveluyksiköiden luomista ja suorittamista systemd: ssä Linuxin komentosarjojen avulla. Jos olet kuitenkin kunnossa kaikilla yllä olevilla, jatka lukemista.
Journaldin määrittäminen lokiviestien keräämistä varten Systemd: ssä
journald on daemon, joka kerää ja kirjoittaa päiväkirjamerkintöjä koko järjestelmästä; nämä ovat lähinnä käynnistysviestejä, ytimen ja syslogin tai eri sovellusten viestejä, ja se tallentaa kaikki viestit keskeiseen sijaintiin - päiväkirjatiedostoon.
Voit hallita journalnaldin käyttäytymistä sen oletusasetustiedostolla: /etc/systemd/journald.conf, joka luodaan kääntämisen aikana. Tämä tiedosto sisältää vaihtoehtoja, joiden arvot voit muuttaa vastaamaan paikallisia ympäristövaatimuksiasi.
Alla on esimerkki tiedoston ulkoasusta, jota tarkastellaan kissa-komennolla.
$ 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ä erilaiset pakettiasennukset ja kokoonpanon otteet /usr/lib/systemd/*.conf.d/- ja ajoaikakokoonpanoista löytyvät tiedostosta /run/systemd/journald.conf.d/*.conf, joita et välttämättä välttämättä käyttää.
Useat Linux-jakelut, mukaan lukien Ubuntu, ja sen johdannaiset, kuten Linux Mint, eivät salli käynnistysviestien pysyvää tallennusta levylle oletuksena.
Tämä on mahdollista ottaa käyttöön asettamalla “Varastointi” -asetukseksi ”pysyvä” alla olevan kuvan mukaisesti. Tämä luo hakemiston/var/log/journal ja kaikki lokitiedostot tallennetaan sen alle.
$ sudo vi /etc/systemd/journald.conf OR $ sudo nano /etc/systemd/journald.conf
[Journal] Storage=persistent
Löydät lisäasetukset etsimällä kaikkien [Päiväkirja] -osiosta määritettävien asetusten merkityksen kirjoittamalla.
$ man journald.conf
Lokien luotettavan hallinnan varmistamiseksi systemd-sovelluksessa käyttämällä journalnald-palvelua varmista, että aika-asetukset, mukaan lukien aikavyöhyke, ovat järjestelmässä oikein.
Voit tarkastella järjestelmän nykyisiä päivämäärä- ja aika-asetuksia kirjoittamalla.
$ 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än aika käyttämällä alla olevia komentoja.
$ sudo timedatectl set-timezone Africa/Kampala $ sudo timedatectl set-time “13:50:00”
journalctl on apuohjelma, jota käytetään tarkastelemaan systemd-päiväkirjan sisältöä (jonka on kirjoittanut journald-palvelu).
Jos haluat näyttää kaikki kerätyt lokit ilman suodatusta, kirjoita.
$ 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
Voit näyttää luettelon käynnistysnumeroista (suhteessa nykyiseen käynnistykseen), niiden tunnukset ja 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
Jos haluat tarkastella päiväkirjamerkintöjä nykyisestä käynnistyksestä (numero 0), käytä -b
-kytkintä näin (sama kuin yllä oleva esimerkkilähtö).
$ journalctl -b
ja jos haluat nähdä edellisen käynnistyksen päiväkirjan, käytä suhteellista osoitinta -1
ja -b
-vaihtoehtoa kuten alla.
$ journalctl -b -1
Vaihtoehtoisesti voit käyttää käynnistystunnusta näin.
$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9
Jos haluat käyttää aikaa UTC (Coordinated Universal Time) -muodossa, lisää --utc
-asetukset seuraavasti.
$ journalctl --utc
Jos haluat nähdä kaikki merkinnät tietystä päivämäärästä ja kellonajasta, esim. Kirjoita tämä komento 15. kesäkuuta 2017 klo 8.15.
$ journalctl --since "2017-06-15 08:15:00" $ journalctl --since today $ journalctl --since yesterday
Jos haluat tarkastella viimeisimpiä lokiviestejä (oletusarvoisesti 10), käytä -n
-lippua alla olevan kuvan mukaisesti.
$ journalctl -n $ journalctl -n 20
Jos haluat nähdä vain ytimen viestit, kuten dmesg-komennon tulos, voit käyttää -k
-merkkiä.
$ journalctl -k $ journalctl -k -b $ journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9
Jos haluat tarkastella tietyn yksikön kaikkia päiväkirjamerkintöjä, käytä -u
-kytkintä seuraavasti.
$ journalctl -u apache2.service
Nollaa nykyinen käynnistys kirjoittamalla tämä komento.
$ journalctl -b -u apache2.service
Käytä tätä, jos haluat näyttää edellisen käynnistyksen lokit.
$ 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
Jos haluat tarkastella tietyn prosessin luomia lokeja, määritä sen PID-arvo tällä tavoin.
$ journalctl _PID=19487 $ journalctl _PID=19487 --since today $ journalctl _PID=19487 --since yesterday
Jos haluat tarkastella tietyn käyttäjän tai ryhmän luomia lokeja, määritä tämän käyttäjän tai ryhmän tunnus.
$ journalctl _UID=1000 $ journalctl _UID=1000 --since today $ journalctl _UID=1000 -b -1 --since today
Voit näyttää kaikki tiedoston (mahdollisesti suoritettavan) luomat lokit, kuten D-Bus-suoritettavan tai bash-suoritettavan, yksinkertaisesti kirjoittamalla.
$ journalctl /usr/bin/dbus-daemon $ journalctl /usr/bin/bash
Voit suodattaa lähdön myös viestien prioriteettien tai prioriteettialueiden perusteella käyttämällä -p
-lippua. Mahdolliset arvot ovat: 0 - syntyminen, 1 - hälytys, 2 - kriittinen, 3 - virhe, 4 - varoitus, 5 - huomautus, 6 - info, 7 - virheenkorjaus):
$ journalctl -p err
Määritä alue käyttämällä alla olevaa muotoa (nousta varoitukseen).
$ journalctl -p 1..4 OR $ journalctl -p emerg..warning
Voit käytännössä katsella lokeja niiden kirjoittaessa -f
-vaihtoehdolla (samanlainen kuin tail -f -toiminto).
$ journalctl -f
Jos haluat hallita päiväkirjamerkintöjen tulostusmuotoa, lisää lippu -o
ja käytä näitä vaihtoehtoja: kissa, vienti, json, json-pretty, json-sse, lyhyt, lyhyt iso, lyhyt-yksitoikkoinen, lyhyt-tarkka ja monipuolinen (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
Voit tarkistaa päiväkirjatiedoston sisäisen johdonmukaisuuden --verify
-vaihtoehdon avulla. Jos kaikki on hyvin, lähdön tulisi ilmoittaa 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 01-000551f01cfcedff.journal
Voit myös näyttää kaikkien lokitiedostojen nykyisen levykäytön --disk-use
-asetuksilla. Se näyttää kaikkien arkistoitujen ja aktiivisten päiväkirjatiedostojen levyn käytön summan:
$ journalctl --disk-usage
Poista vanhat (arkistoidut) päiväkirjatiedostot suorittamalla seuraavat 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
Viimeisenä mutta ei vähäisimpänä, voit kehottaa journalnaldia kiertämään päiväkirjatiedostoja --rotate
-vaihtoehdon avulla. Huomaa, että tämä direktiivi ei palaa ennen kuin kierto on valmis:
$ sudo journalctl --rotate
Katso perusteellinen käyttöopas ja vaihtoehdot katsomalla journalctl-man -sivua seuraavasti.
$ man journalctl
Tarkista hyödyllisiä artikkeleita.
- Järjestelmän käynnistysprosessin ja palvelujen hallinta (SysVinit, Systemd ja Upstart)
- Petiti - avoimen lähdekoodin lokianalyysityökalu Linux SysAdminsille
- Lokikierron määrittäminen ja hallinta Logrotaten avulla Linuxissa
- lnav - Tarkastele ja analysoi Apache-lokeja Linux-päätelaitteesta
Se on nyt. Käytä alla olevaa palautetta kysyäksesi kysymyksiä tai lisääksesi ajatuksiasi tästä aiheesta.