Gestioneu els missatges de registre amb Systemd mitjançant Journalctl [Guia completa]
Systemd és un gestor de sistemes i serveis d'avantguarda per a sistemes Linux: un reemplaçament del dimoni d'inici destinat a iniciar processos en paral·lel a l'arrencada del sistema. Ara és compatible amb una sèrie de distribucions principals actuals, com ara Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, etc.
Abans, vam explicar la història darrere d'init i systemd; on vam discutir quins són els dos dimonis, per què s'havia de substituir tècnicament init per systemd, així com les principals característiques de systemd.
Un dels principals avantatges de systemd respecte d'altres sistemes d'inici comuns és el suport per a la gestió centralitzada del registre de sistemes i processos mitjançant un diari. En aquest article, aprendrem a gestionar i veure els missatges de registre amb systemd mitjançant l'ordre journalctl a Linux.
Important: abans d'avançar en aquesta guia, potser voldreu aprendre a gestionar la creació i execució de noves unitats de servei a systemd mitjançant scripts d'intèrpret d'ordres a Linux. Tanmateix, si estàs d'acord amb tot l'anterior, segueix llegint.
Configuració de Journald per a la recollida de missatges de registre sota Systemd
journald és un dimoni que recull i escriu entrades de diari de tot el sistema; es tracta bàsicament de missatges d'arrencada, missatges del nucli i del syslog o diverses aplicacions i emmagatzema tots els missatges en una ubicació central: fitxer de diari.
Podeu controlar el comportament de journald mitjançant el seu fitxer de configuració predeterminat: /etc/systemd/journald.conf que es genera en temps de compilació. Aquest fitxer conté opcions els valors de les quals podeu canviar segons els requisits del vostre entorn local.
A continuació es mostra una mostra de l'aspecte del fitxer, vist amb l'ordre 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
Tingueu en compte que diverses instal·lacions de paquets i extractes de configuració d'ús a /usr/lib/systemd/*.conf.d/ i configuracions de temps d'execució es poden trobar a /run/systemd/journald.conf.d/*.conf que potser no necessàriament utilitzar.
Diverses distribucions de Linux, inclosa Ubuntu i els seus derivats com Linux Mint, no permeten l'emmagatzematge persistent dels missatges d'arrencada al disc de manera predeterminada.
És possible activar-ho configurant l'opció \Emmagatzematge a \persistent, tal com es mostra a continuació. Això crearà el directori /var/log/journal i tots els fitxers de la revista s'emmagatzemaran a sota.
$ sudo vi /etc/systemd/journald.conf OR $ sudo nano /etc/systemd/journald.conf
[Journal] Storage=persistent
Per a opcions addicionals, cerqueu el significat de totes les opcions que se suposa que s'han de configurar a la secció [Diari] escrivint.
$ man journald.conf
Per a una gestió de registre fiable amb systemd mitjançant el servei journald, assegureu-vos que la configuració de l'hora, inclosa la zona horària, sigui correcta al sistema.
Per veure la configuració actual de data i hora al vostre sistema, escriviu.
$ 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
Per configurar la zona horària correcta i possiblement l'hora del sistema, utilitzeu les ordres següents.
$ sudo timedatectl set-timezone Africa/Kampala $ sudo timedatectl set-time “13:50:00”
journalctl és una utilitat que s'utilitza per visualitzar el contingut de la revista systemd (que està escrita pel servei journald).
Per mostrar tots els registres recollits sense cap filtre, escriviu.
$ 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
Podeu mostrar una llista de números d'arrencada (relatius a l'arrencada actual), els seus ID i les marques de temps del primer i l'últim missatge corresponent a l'arrencada amb l'opció --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
Per veure les entrades del diari des de l'arrencada actual (número 0), utilitzeu el commutador -b
d'aquesta manera (igual que la sortida de mostra anterior).
$ journalctl -b
i per veure un diari de l'arrencada anterior, utilitzeu el punter relatiu -1
amb l'opció -b
com a continuació.
$ journalctl -b -1
Alternativament, utilitzeu l'ID d'arrencada com aquesta.
$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9
Per utilitzar l'hora en format de temps universal coordinat (UTC), afegiu les opcions --utc
de la manera següent.
$ journalctl --utc
Per veure totes les entrades des d'una data i hora concretes, p. ex. 15 de juny de 2017 a les 8:15, escriviu aquesta ordre.
$ journalctl --since "2017-06-15 08:15:00" $ journalctl --since today $ journalctl --since yesterday
Per veure els missatges de registre recents (10 per defecte), utilitzeu la marca -n
com es mostra a continuació.
$ journalctl -n $ journalctl -n 20
Per veure només els missatges del nucli, de manera similar a la sortida de l'ordre dmesg, podeu utilitzar el senyalador -k
.
$ journalctl -k $ journalctl -k -b $ journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9
Per veure totes les entrades de diari d'una unitat concreta, utilitzeu l'interruptor -u
de la manera següent.
$ journalctl -u apache2.service
Per reduir a zero a l'arrencada actual, escriviu aquesta ordre.
$ journalctl -b -u apache2.service
Per mostrar els registres de l'arrencada anterior, feu servir això.
$ journalctl -b -1 -u apache2.service
A continuació es mostren algunes altres ordres útils:
$ journalctl -u apache2.service $ journalctl -u apache2.service --since today $ journalctl -u apache2.service -u nagios.service --since yesterday
Per veure els registres generats per un procés específic, especifiqueu el PID com aquest.
$ journalctl _PID=19487 $ journalctl _PID=19487 --since today $ journalctl _PID=19487 --since yesterday
Per veure els registres generats per un usuari o grup específics, especifiqueu el seu ID d'usuari o grup com aquest.
$ journalctl _UID=1000 $ journalctl _UID=1000 --since today $ journalctl _UID=1000 -b -1 --since today
Per mostrar tots els registres generats per un fitxer (possiblement un executable), com ara l'executable D-Bus o els executables bash, simplement escriviu.
$ journalctl /usr/bin/dbus-daemon $ journalctl /usr/bin/bash
També podeu filtrar la sortida en funció de les prioritats dels missatges o dels intervals de prioritats utilitzant el senyalador -p
. Els valors possibles són: 0 – emerg, 1 – alert, 2 – crit, 3 – err, 4 – warning, 5 – notice, 6 – info, 7 – debug):
$ journalctl -p err
Per especificar un interval, utilitzeu el format següent (emergeix a advertència).
$ journalctl -p 1..4 OR $ journalctl -p emerg..warning
Pràcticament podeu veure els registres mentre s'escriuen amb l'opció -f
(similar a la funcionalitat tail -f).
$ journalctl -f
Si voleu controlar el format de sortida de les entrades de diari, afegiu el senyalador -o
i utilitzeu aquestes opcions: cat, export, json, json-pretty, json-sse, short, short-iso, curt monòton, breu precís i detallat (comproveu el significat de les opcions a la pàgina de manual:
L'opció cat mostra el missatge real de cada entrada del diari sense cap metadades (marca de temps i així successivament).
$ journalctl -b -u apache2.service -o cat
Per comprovar la coherència interna del fitxer diari, utilitzeu l'opció --verify
. Si tot està bé, la sortida hauria d'indicar un 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
També podeu mostrar l'ús actual del disc de tots els fitxers de diari amb les opcions --disk-usage
. Mostra la suma de l'ús del disc de tots els fitxers de diari actius i arxivats:
$ journalctl --disk-usage
Per suprimir fitxers de diari antics (arxivats), executeu les ordres següents:
$ 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
Per últim, però no menys important, podeu indicar a journald que giri els fitxers de diari amb l'opció --rotate
. Tingueu en compte que aquesta directiva no torna fins que s'ha acabat l'operació de rotació:
$ sudo journalctl --rotate
Per obtenir una guia d'ús detallada i opcions, consulteu la pàgina de manual de journalctl de la següent manera.
$ man journalctl
Fes una ullada a alguns articles útils.
- Gestionar el procés d'inici del sistema i els serveis (SysVinit, Systemd i Upstart)
- Petiti: una eina d'anàlisi de registres de codi obert per a administradors de sistemes Linux
- Com configurar i gestionar la rotació del registre mitjançant Logrotate a Linux
- lnav: mira i analitza els registres d'Apache des d'un terminal Linux
Això és tot per ara. Utilitzeu els comentaris que apareixen a continuació per fer qualsevol pregunta o afegir-hi opinions sobre aquest tema.