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.
- Mengelola Proses dan Layanan Startup Sistem (SysVinit, Systemd, dan Pemula)
- Petiti – Alat Analisis Log Sumber Terbuka untuk SysAdmin Linux
- Cara Mengatur dan Mengelola Rotasi Log Menggunakan Logrotate di Linux
- 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.