Pagdumala sa mga Mensahe sa Log Ubos sa Systemd Gamit ang Journalctl [Komprehensibo nga Giya]


Ang Systemd usa ka cutting-edge nga sistema ug service manager alang sa mga sistema sa Linux: usa ka init nga daemon nga kapuli nga gituyo aron magsugod sa mga proseso nga managsama sa system boot. Gisuportahan na kini karon sa usa ka gidaghanon sa kasamtangan nga mainstream distribution lakip na ang Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, ug uban pa.

Sa sayo pa, among gipasabot ang istorya luyo sa 'init' ug 'systemd'; diin among gihisgutan kung unsa ang duha ka mga daemon, ngano nga ang 'init' kinahanglan nga pulihan sa 'systemd' ingon man ang mga nag-unang bahin sa systemd.

Usa sa mga nag-unang bentaha sa systemd sa ubang mga kasagarang init nga sistema mao ang, suporta alang sa sentralisadong pagdumala sa sistema ug mga proseso sa pag-log gamit ang usa ka journal. Niini nga artikulo, makakat-on kita unsaon pagdumala ug pagtan-aw sa mga mensahe sa log ubos sa systemd gamit ang journalctl command sa Linux.

Importante: Sa dili pa mobalhin og dugang niini nga giya, mahimo nimong makat-on unsaon pagdumala sa paghimo ug pagpadagan sa bag-ong mga service unit sa systemd gamit ang shell scripts sa Linux. Bisan pa, kung okay ka sa tanan sa ibabaw, ipadayon ang pagbasa.

Pag-configure sa Journald alang sa Pagkolekta sa mga Mensahe sa Log Ubos sa Systemd

journald kay usa ka daemon nga nagtigom ug nagsulat sa mga entry sa journal gikan sa tibuok sistema; kini mao ang esensya nga mga mensahe sa boot, mga mensahe gikan sa kernel ug gikan sa syslog o lain-laing mga aplikasyon ug kini nagtipig sa tanan nga mga mensahe sa usa ka sentro nga lokasyon - journal file.

Mahimo nimong kontrolon ang kinaiya sa journald pinaagi sa default configuration file niini: /etc/systemd/journald.conf nga namugna sa oras sa pag-compile. Kini nga file adunay mga kapilian kansang mga kantidad mahimo nimong usbon aron ipahiangay sa imong lokal nga mga kinahanglanon sa palibot.

Sa ubos usa ka sample kung unsa ang hitsura sa file, gitan-aw gamit ang command sa 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

Timan-i nga ang lain-laing mga pag-install sa package ug paggamit sa mga extract sa configuration sa /usr/lib/systemd/*.conf.d/ ug run time configurations makita sa /run/systemd/journald.conf.d/*.conf nga dili nimo kinahanglan. paggamit.

Daghang mga distribusyon sa Linux lakip na ang Ubuntu ug kini nga mga derivatives sama sa Linux Mint wala makahimo sa padayon nga pagtipig sa mga mensahe sa boot sa disk pinaagi sa default.

Posible nga mahimo kini pinaagi sa pagbutang sa opsyon nga \Storage sa \persistent ingon sa gipakita sa ubos. Kini maghimo sa /var/log/journal nga direktoryo ug ang tanang journal files itago sa ilawom niini.

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

Alang sa dugang nga mga setting, pangitaa ang kahulugan sa tanan nga mga kapilian nga kinahanglan nga i-configure sa ilawom sa seksyon nga [Journal] pinaagi sa pag-type.

$ man journald.conf

Alang sa kasaligan nga pagdumala sa log ubos sa systemd gamit ang journald nga serbisyo, siguroha nga ang mga setting sa oras lakip ang timezone husto sa sistema.

Aron matan-aw ang karon nga mga setting sa petsa ug oras sa imong sistema, i-type.

$ 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

Aron mabutang ang husto nga timezone ug posible nga oras sa sistema, gamita ang mga mando sa ubos.

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

Ang journalctl usa ka gamit nga gigamit sa pagtan-aw sa mga sulod sa systemd journal (nga gisulat sa journald service).

Aron ipakita ang tanang nakolekta nga mga troso nga walay bisan unsang pagsala, i-type.

$ 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

Mahimo nimong ipakita ang usa ka lista sa mga numero sa boot (relasyon sa karon nga boot), ilang mga ID, ug ang mga timestamp sa una ug katapusan nga mensahe nga katumbas sa boot nga adunay kapilian nga --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 

Para tan-awon ang mga journal entries gikan sa kasamtangang boot (numero 0), gamita ang -b switch sama niini (parehas sa sample output sa ibabaw).

$ journalctl -b

ug para makakita ug journal gikan sa miaging boot, gamita ang -1 relative pointer nga adunay -b nga opsyon sama sa ubos.

$ journalctl -b -1

Sa laing paagi, gamita ang boot ID nga sama niini.

$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Aron magamit ang oras sa Coordinated Universal Time (UTC) nga pormat, idugang ang --utc nga mga kapilian sama sa mosunod.

$ journalctl --utc

Aron makita ang tanan nga mga entry sukad sa usa ka partikular nga petsa ug oras, e.g. Hunyo 15th, 2017 sa 8:15 AM, i-type kini nga sugo.

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

Para tan-awon ang bag-o nga mga mensahe sa log (10 sa default), gamita ang -n nga bandera sama sa gipakita sa ubos.

$ journalctl -n
$ journalctl -n 20 

Aron makita lang ang mga mensahe sa kernel, susama sa dmesg command output, mahimo nimong gamiton ang -k flag.

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

Para matan-aw ang tanang journal entries para sa usa ka partikular nga unit, gamita ang -u switch sama sa mosunod.

$ journalctl -u apache2.service

Aron ma-zero hangtod sa karon nga boot, i-type kini nga mando.

$ journalctl -b -u apache2.service

Aron ipakita ang mga log gikan sa miaging boot, gamita kini.

$ journalctl -b -1 -u apache2.service

Sa ubos mao ang uban nga mapuslanon nga mga sugo:

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

Aron matan-aw ang mga troso nga namugna sa usa ka piho nga proseso, ipiho kini nga PID sama niini.

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

Aron matan-aw ang mga log nga nahimo sa usa ka piho nga tiggamit o grupo, ipiho kini nga user o grupo ID nga sama niini.

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

Aron ipakita ang tanang log nga namugna sa usa ka file (posible nga executable), sama sa D-Bus executable o bash executables, i-type lang.

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

Mahimo usab nimong i-filter ang output base sa mga priority sa mensahe o priority range gamit ang -p flag. Ang posibleng mga kantidad mao ang: 0 – emerg, 1 – alert, 2 – crit, 3 – err, 4 – warning, 5 – notice, 6 – info, 7 – debug):

$ journalctl -p err

Aron matino ang usa ka han-ay, gamita ang pormat sa ubos (mogawas sa pasidaan).

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

Mahimo nimong tan-awon ang mga troso samtang kini gisulat gamit ang opsyon nga -f (parehas sa tail -f functionality).

$ journalctl -f

Kung gusto nimong kontrolon ang output formatting sa mga entry sa journal, idugang ang -o nga bandila ug gamita kini nga mga opsyon: cat, export, json, json-pretty, json-sse, short, short-iso, mubo-monotonic, mubo-tukma ug verbose(susiha ang kahulogan sa mga kapilian sa man page:

Ang opsyon sa iring nagpakita sa aktuwal nga mensahe sa matag entry sa journal nga walay bisan unsang metadata (timestamp ug uban pa).

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

Aron masusi ang journal file alang sa internal consistency, gamita ang --verify nga opsyon. Kung ang tanan maayo, ang output kinahanglan magpakita sa usa ka 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

Mahimo usab nimo ipakita ang kasamtangan nga paggamit sa disk sa tanang mga file sa journal nga adunay mga kapilian nga --disk-usage. Gipakita niini ang kadaghanon sa paggamit sa disk sa tanan nga na-archive ug aktibo nga mga file sa journal:

$ journalctl --disk-usage

Aron mapapas ang daan (naka-archive) nga mga file sa journal ipadagan ang mga sugo sa ubos:

$ 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

Katapusan apan dili labing gamay, mahimo nimong tudloan ang journald sa pag-rotate sa mga file sa journal gamit ang kapilian nga --rotate. Timan-i nga kini nga direktiba dili mobalik hangtod mahuman ang rotation operation:

$ sudo journalctl --rotate

Alang sa usa ka lawom nga giya sa paggamit ug mga kapilian, tan-awa ang journalctl man page sama sa mosunod.

$ man journalctl

Susiha ang pipila ka mapuslanon nga mga artikulo.

  1. Pagdumala sa Proseso ug Serbisyo sa Pagsugod sa Sistema (SysVinit, Systemd ug Upstart)
  2. Petiti – Usa ka Open Source Log Analysis Tool para sa Linux SysAdmins
  3. Unsaon Pag-setup ug Pagdumala sa Log Rotation Gamit ang Logrotate sa Linux
  4. lnav – Tan-awa ug Analisaha ang mga Apache Log gikan sa Linux Terminal

Mao na kini sa pagkakaron. Gamita ang feedback gikan sa ubos sa pagpangutana sa bisan unsang pangutana o pagdugang sa imong mga hunahuna bahin niini nga hilisgutan.