Kelola Pesan Log Di Bawah Systemd Menggunakan Journalctl [Panduan Komprehensif]


Systemd adalah manajer sistem dan layanan mutakhir untuk sistem Linux: pengganti daemon init yang dimaksudkan untuk memulai proses secara paralel saat boot sistem. Sekarang didukung di sejumlah distribusi mainstream termasuk Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, dll.

Sebelumnya, kami telah menjelaskan cerita di balik 'init' dan 'systemd'; dimana kita membahas apa itu dua daemon, mengapa ‘init’ secara teknis perlu diganti dengan ‘systemd’ serta fitur-fitur utama systemd.

Salah satu keunggulan utama systemd dibandingkan sistem init umum lainnya adalah, dukungan untuk manajemen sistem terpusat dan pencatatan proses menggunakan jurnal. Pada artikel ini, kita akan mempelajari cara mengelola dan melihat pesan log di systemd menggunakan perintah journalctl di Linux.

Penting: Sebelum melangkah lebih jauh dalam panduan ini, Anda mungkin ingin mempelajari cara mengelola layanan dan unit 'Systemd' menggunakan perintah 'Systemctl', dan juga membuat dan menjalankan yang baru unit layanan di systemd menggunakan skrip shell di Linux. Namun, jika Anda setuju dengan semua hal di atas, lanjutkan membaca.

Mengonfigurasi Journald untuk Mengumpulkan Pesan Log di Systemd

jurnal adalah daemon yang mengumpulkan dan menulis entri jurnal dari keseluruhan sistem; ini pada dasarnya adalah pesan boot, pesan dari kernel dan dari syslog atau berbagai aplikasi dan menyimpan semua pesan di lokasi pusat – file jurnal.

Anda dapat mengontrol perilaku journald melalui file konfigurasi defaultnya: /etc/systemd/journald.conf yang dihasilkan pada waktu kompilasi. File ini berisi opsi yang nilainya dapat Anda ubah untuk menyesuaikan persyaratan lingkungan lokal Anda.

Di bawah ini adalah contoh tampilan file, dilihat menggunakan perintah 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

Perhatikan bahwa berbagai instalasi paket dan ekstrak konfigurasi penggunaan di /usr/lib/systemd/*.conf.d/ dan konfigurasi run time dapat ditemukan di /run/systemd/journald.conf. d/*.conf yang mungkin belum tentu Anda gunakan.

Aktifkan Penyimpanan Data Jurnal Pada Disk

Sejumlah distribusi Linux termasuk Ubuntu dan turunannya seperti Linux Mint tidak mengaktifkan penyimpanan pesan booting secara persisten pada disk secara default.

Anda dapat mengaktifkannya dengan menyetel opsi “Penyimpanan ” ke “persisten ” seperti yang ditunjukkan di bawah ini. Ini akan membuat direktori /var/log/journal dan semua file jurnal akan disimpan di bawahnya.

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

Untuk pengaturan tambahan, temukan arti dari semua opsi yang seharusnya dikonfigurasi di bawah bagian “[Journal]” dengan mengetik.

man journald.conf

Mengatur Waktu Sistem yang Benar Menggunakan Perintah Timedatectl

Untuk manajemen log yang andal di bawah systemd menggunakan layanan journald, pastikan pengaturan waktu termasuk zona waktu sudah benar di sistem.

Untuk melihat pengaturan tanggal dan waktu saat ini di sistem Anda, ketik.

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

Untuk mengatur zona waktu yang benar dan mungkin waktu sistem, gunakan perintah di bawah ini.

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

Melihat Pesan Log Menggunakan Perintah Journalctl

journalctl adalah utilitas yang digunakan untuk melihat isi jurnal systemd (yang ditulis oleh layanan journald).

Untuk menampilkan semua log yang dikumpulkan tanpa pemfilteran apa pun, ketik.

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

Lihat pesan Log Berdasarkan Boots

Anda dapat menampilkan daftar nomor booting (relatif terhadap booting saat ini), ID-nya, dan stempel waktu pesan pertama dan terakhir yang terkait dengan booting tersebut dengan opsi --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 

Untuk melihat entri jurnal dari boot saat ini (nomor 0), gunakan saklar -b seperti ini (sama seperti contoh keluaran di atas).

journalctl -b

dan untuk melihat jurnal dari boot sebelumnya gunakan relative pointer -1 dengan pilihan -b seperti dibawah ini.

journalctl -b -1

Alternatifnya, gunakan ID boot seperti ini.

journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Memfilter Pesan Log Berdasarkan Waktu

Untuk menggunakan waktu dalam format Waktu Universal Terkoordinasi (UTC), tambahkan opsi --utc sebagai berikut.

journalctl --utc

Untuk melihat semua entri sejak tanggal dan waktu tertentu, mis. 15 Juni 2017 jam 08.15, ketikkan perintah ini.

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

Melihat Pesan Log Terbaru

Untuk melihat pesan log terbaru (10 secara default), gunakan tanda -n seperti yang ditunjukkan di bawah ini.

journalctl -n
journalctl -n 20 

Melihat Pesan Log yang Dihasilkan Oleh Kernel

Untuk melihat pesan kernel saja, mirip dengan output perintah dmesg, Anda dapat menggunakan flag -k.

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

Melihat Pesan Log yang Dihasilkan Berdasarkan Unit

Untuk melihat semua entri jurnal untuk unit tertentu, gunakan saklar -u sebagai berikut.

journalctl -u apache2.service

Untuk memusatkan perhatian pada boot saat ini, ketikkan perintah ini.

journalctl -b -u apache2.service

Untuk menampilkan log dari boot sebelumnya, gunakan ini.

journalctl -b -1 -u apache2.service

Berikut adalah beberapa perintah berguna lainnya:

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

Melihat Pesan Log yang Dihasilkan Oleh Proses

Untuk melihat log yang dihasilkan oleh proses tertentu, tentukan PID-nya seperti ini.

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

Melihat Pesan Log yang Dihasilkan Oleh Pengguna atau ID Grup

Untuk melihat log yang dihasilkan oleh pengguna atau grup tertentu, tentukan ID pengguna atau grupnya seperti ini.

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

Melihat Log yang Dihasilkan Oleh File

Untuk menampilkan semua log yang dihasilkan oleh suatu file (mungkin file yang dapat dieksekusi), seperti file D-Bus yang dapat dieksekusi atau file yang dapat dieksekusi bash, cukup ketik.

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

Melihat Pesan Log Berdasarkan Prioritas

Anda juga dapat memfilter keluaran berdasarkan prioritas pesan atau rentang prioritas menggunakan tanda -p. Nilai yang mungkin adalah: 0 – muncul, 1 – peringatan, 2 – kritik, 3 – err, 4 – peringatan, 5 – pemberitahuan, 6 – info, 7 – debug):

journalctl -p err

Untuk menentukan rentang, gunakan format di bawah ini (muncul peringatan).

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

Lihat Pesan Log secara Real-Time

Anda praktis dapat melihat log saat sedang ditulis dengan opsi -f (mirip dengan fungsi tail -f).

journalctl -f

Menangani Format Tampilan Jurnal

Jika Anda ingin mengontrol format keluaran entri jurnal, tambahkan tanda -o dan gunakan opsi berikut: cat, ekspor, json, json-pretty, json-sse, short, short-iso, pendek-monotonik, pendek-tepat dan bertele-tele (periksa arti opsi di halaman manual:

Opsi cat menampilkan pesan sebenarnya dari setiap entri jurnal tanpa metadata apa pun (stempel waktu dan sebagainya).

journalctl -b -u apache2.service -o cat

Mengelola Jurnal Pada Suatu Sistem

Untuk memeriksa konsistensi internal file jurnal, gunakan opsi --verify. Jika semuanya baik-baik saja, outputnya akan menunjukkan 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

Menghapus File Jurnal Lama

Anda juga dapat menampilkan penggunaan disk saat ini dari semua file jurnal dengan opsi --disk-usage. Ini menunjukkan jumlah penggunaan disk dari semua file jurnal yang diarsipkan dan aktif:

journalctl --disk-usage

Untuk menghapus file jurnal lama (yang diarsipkan), jalankan perintah di bawah ini:

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

Memutar File Jurnal

Terakhir, Anda dapat menginstruksikan journald untuk memutar file jurnal dengan opsi --rotate. Perhatikan bahwa direktif ini tidak akan kembali hingga operasi rotasi selesai:

sudo journalctl --rotate

Untuk panduan dan opsi penggunaan yang mendalam, lihat halaman manual journalctl sebagai berikut.

man journalctl

Lihatlah beberapa artikel bermanfaat.

  1. Mengelola Proses dan Layanan Startup Sistem (SysVinit, Systemd, dan Pemula)
  2. Petiti – Alat Analisis Log Sumber Terbuka untuk SysAdmin Linux
  3. Cara Mengatur dan Mengelola Rotasi Log Menggunakan Logrotate di Linux
  4. lnav – Menonton dan Menganalisis Log Apache dari Terminal Linux

Itu saja untuk saat ini. Gunakan umpan balik di bawah ini untuk mengajukan pertanyaan atau menambahkan pendapat Anda tentang topik ini.