Hanya karena Anda tidak mendapatkan kesalahan pada sistem Anda tidak berarti semuanya bekerja dengan baik. Mengapa tidak membaca dan menganalisis log sistem Linux Anda untuk melihat apa yang terjadi dengan sistem Anda? Tidak yakin bagaimana? Beruntung bagi Anda, Journalctl siap untuk tugas itu!
Dalam tutorial ini, Anda akan mempelajari cara mengawasi dengan cermat bagaimana sistem Anda berperilaku dengan alat journalctl dengan membaca dan menganalisis file log jurnal systemd.
Baca terus dan jaga agar sistem Anda tetap prima!
Prasyarat
Tutorial ini akan menjadi demonstrasi langsung. Jika Anda ingin mengikuti, pastikan Anda memiliki yang berikut ini.
- Mesin Linux – Demo ini menggunakan Ubuntu 20.04 LTS, tetapi Anda dapat menggunakan distro apa pun.
- Akun non-root dengan hak istimewa sudo.
Menyetel Waktu Sistem yang Benar
Sebelum Anda dapat menggunakan Journalctl, Anda harus mengatur waktu sistem Anda. Stempel waktu yang dicatat dalam jurnal systemd ada di UTC, jadi Anda harus memilih zona waktu yang benar. Jika waktu Anda habis hanya beberapa detik, beberapa entri log mungkin tidak muncul dengan benar saat Anda menggunakannya nanti.
1. Buka terminal Anda, dan jalankan timedatectl
perintah di bawah ini untuk mendapatkan daftar zona waktu yang tersedia.
timedatectl list-timezones
Pilih dan catat satu dari daftar yang ditunjukkan di bawah ini yang cocok dengan wilayah Anda. Misalnya, jika Anda tinggal di Amerika, pilih zona waktu yang sesuai dengan kota terdekat Anda.
2. Selanjutnya, jalankan perintah di bawah ini untuk mengatur zona waktu Anda (set-timezone
). Ganti your-zone
dengan nama zona waktu yang Anda pilih sebelumnya (langkah pertama). Perintah ini mengatur waktu sistem Anda ke zona waktu yang Anda pilih.
Mulai sekarang, setiap entri log akan dicatat sebagai waktu lokal Anda.
sudo timedatectl set-timezone your-zone
3. Terakhir, jalankan perintah berikut untuk memverifikasi bahwa Anda telah mengatur zona waktu dengan benar.
timedatectl status
Seperti yang ditunjukkan di bawah ini, tanggal dan waktu sistem saat ini harus sesuai dengan wilayah dan zona waktu yang Anda pilih.
Menampilkan Semua Log
Sekarang pengaturan zona waktu tidak dapat dilakukan, Anda dapat mulai melihat log di sistem Anda. Systemd System and Service Manager menyediakan manajemen terpusat dari log daemon, yang mengumpulkan log dari berbagai bagian/alat pada sistem.
Tapi bagaimana Anda melihat log? Utilitas journalctl memungkinkan Anda melihat log mesin Anda. Dan hal pertama yang biasanya ingin Anda lakukan adalah menunjukkan semua yang telah terjadi sejak boot terakhir.
Jalankan journalctl
perintah di bawah ini untuk menampilkan semua log daemon journald.
Utilitas journalctl mengimplementasikan antarmuka baris perintah daemon journald untuk mengumpulkan dan melihat jurnal systemd. Utilitas journalctl memungkinkan pengguna untuk mengintrospeksi aktivitas dan status unit yang dikelola systemd (layanan, proses, dan sebagainya).
sudo journalctl
Perintah menampilkan seluruh jurnal yang ditunjukkan di bawah ini, dan agak sulit dibaca. Log tertua berada di bagian atas daftar, sedangkan log terbaru berada di bagian bawah.
Anda mungkin akan memiliki ratusan atau ribuan entri jika jurnal systemd telah merekam log cukup lama.
Anda dapat menggunakan parameter lain untuk memfilter log, tetapi Anda tidak akan masuk ke filter tersebut di sini karena topik tersebut berada di luar tutorial ini.
Karena Anda mungkin ingin menelusuri daftar dengan lebih selektif, panah atas/bawah halaman akan lebih baik. Tekan K untuk melompat ke atas halaman dan J untuk melompat ke bawah halaman. Tekan AKHIR untuk melompat ke halaman terakhir.
Perhatikan bahwa stempel waktu di awal setiap entri adalah waktu lokal Anda karena sebelumnya Anda telah menyetel zona waktu di bagian “Menyetel Waktu Sistem yang Benar” (langkah kedua).
Membuat Jurnal Persisten
Anda telah melihat cara melihat semua log, tetapi Anda biasanya ingin menyimpan log untuk waktu yang lebih lama, sehingga Anda memiliki lebih banyak peluang untuk menemukan data tentang masalah yang jarang terjadi. Bagaimana? Dengan membuat jurnal persisten.
/run/log/journal/ direktori adalah lokasi default data log dan tidak persisten secara default. Segera setelah Anda me-reboot sistem, semua log hilang. Ide dari persisten logging adalah untuk menyimpan semua file log, tetapi log yang lebih lama akan diarsipkan jika terlalu besar.
Untuk membuat jurnal tetap ada di antara boot, Anda akan mengedit /etc/systemd/journald.conf file dan konfigurasikan untuk menggunakan lokasi penyimpanan persisten.
1. Buka /etc/systemd/journald.conf file dengan editor teks pilihan Anda dan cari Storage=auto
direktif, seperti yang ditunjukkan di bawah ini.
2. Selanjutnya, ubah Penyimpanan nilai arahan dari otomatis untuk tetap , lalu simpan perubahan dan tutup editor. Simpan Penyimpanan direktif dalam satu baris dan tidak ada spasi antara direktif dan nilainya, atau konfigurasi tidak akan berfungsi.
3. Jalankan perintah berikut untuk me-restart systemd-journald
layanan untuk mengaktifkan semua perubahan. Perintah ini tidak mencetak output, tetapi reboot mesin Anda dan buka terminal lain setelah perintah ini selesai.
Pada titik ini, systemd akan mengabaikan /run/log/journal dan sebagai gantinya simpan data jurnal di /var/log/journal direktori, sehingga jurnal log Anda menjadi persisten di antara boot.
Saat Anda memulai
systemd-journald
service, secara otomatis membuat direktori /var/log/journal jika tidak ada.
sudo systemctl restart systemd-journald
4. Sekarang, jalankan perintah di bawah ini untuk memeriksa status systemd-journald.service
.
sudo systemctl status systemd-journald.service
Anda akan melihat status aktif (berjalan) jika konfigurasi Anda berfungsi, seperti yang ditunjukkan di bawah ini. Output di bawah ini mengkonfirmasi bahwa jurnal berjalan sebagaimana dimaksud.
5. Jalankan ls
perintah di bawah ini untuk melihat apakah /var/log/journal
direktori ada.
ls /var/log/journal
Anda akan melihat output berikut, yang merupakan UUID dari jurnal persisten. UUID ini tidak memiliki arti khusus dan hanya berupa string unik acak yang dihasilkan selama proses boot. String ini adalah pengidentifikasi yang dapat Anda gunakan untuk mereferensikan data di /var/log/journal .
Catat UUID karena Anda akan menggunakannya untuk membuat daftar jurnal log (langkah enam).
6. Terakhir, jalankan perintah di bawah ini untuk membuat daftar jurnal log. Pastikan untuk mengganti myUUID
dengan UUID yang Anda catat sebelumnya (langkah lima).
ls /var/log/journal/myUUID
Demikian pula di bawah ini, Anda akan melihat jurnal dari boot terakhir Anda. Dan pada titik ini, Anda sekarang memiliki sistem pencatatan yang persisten!
Mendaftar Entri Jurnal dari Boot Saat Ini
Anda telah mempelajari cara menampilkan semua entri log. Tetapi mungkin Anda lebih suka memfilter jenis log tertentu. Jika demikian, Anda mungkin hanya ingin melihat entri log kernel.
Alat journalctl memiliki sintaks penyaringan yang kuat yang memungkinkan Anda menampilkan jenis entri log tertentu. Atau bahkan tampilkan informasi terkait seperti ID proses (PID) atau nama unit dari layanan asal.
Ada berbagai cara untuk memfilter log, tetapi mungkin Anda hanya tertarik untuk melihat jurnal dari boot Anda saat ini. Jika demikian, journalctl
dasar perintah akan berhasil.
Jalankan journalctl
perintah di bawah ini untuk mendaftar semua entri jurnal dari boot Anda saat ini (-b
) yang berkaitan dengan sistem/lingkungan Anda saat ini. -b
bendera memberitahu journalctl
perintah untuk menampilkan log yang disimpan oleh journald sejak sistem terakhir boot.
journalctl -b
Mendaftarkan Log Boot Sebelumnya
Saat menggunakan journalctl
untuk pemecahan masalah, Anda mungkin juga perlu menampilkan entri log dari boot tertentu sebelumnya. Mungkin Anda memiliki layanan yang dimulai dalam satu boot tetapi gagal di boot lain. Dalam hal ini, Anda harus mengisolasi entri log dari boot kedua untuk melihat apa yang salah.
1. Jalankan perintah di bawah ini untuk menampilkan daftar boot sebelumnya (–list-boots).
journalctl --list-boots
Seperti yang ditunjukkan di bawah ini, karena Anda telah mengonfigurasi persisten logging di bagian sebelumnya, journalctl menampilkan semua boot sebelumnya.
- Setiap baris dalam daftar menunjukkan entri log boot sebelumnya. Kolom pertama adalah offset boot, yang dapat Anda gunakan untuk mereferensikan setiap entri. Offset ditampilkan sebagai angka (-1, 0 ).
- Anda juga dapat menggunakan kolom kedua, ID boot, sebagai referensi mutlak untuk entri boot.
2. Selanjutnya, jalankan journalctl -b -1
perintah untuk menampilkan entri jurnal dari boot 1 (boot sebelumnya). Tetapi Anda juga dapat menampilkan entri jurnal dari boot lain dengan mengubah nomor boot (yaitu, boot 2, boot 3…)
journalctl -b -1
3. Terakhir, jalankan perintah di bawah ini untuk menampilkan entri jurnal dari boot yang sama tetapi direferensikan oleh ID bootnya (boot_id
). Pastikan untuk mengganti boot_id
dengan ID boot yang Anda catat di langkah pertama.
journalctl -b boot_id
Mendaftarkan Log Berdasarkan Waktu Windows
Anda telah melihat cara melihat semua log dari boot sebelumnya, tetapi bagaimana jika Anda perlu melihat log tertentu berdasarkan waktu? Menambahkan --since
dan --until
options menyaring entri log jurnal berdasarkan jendela waktu.
Jalankan journalctl
perintah di bawah ini untuk menemukan semua entri jurnal yang dibuat 24 jam yang lalu dari tanggal dan waktu tertentu (--since "2022-02-04 12:40:49”
).
journalctl --since "2022-02-04 12:40:49”
Mungkin Anda tidak ingin menentukan tanggal dan waktu. Jika demikian, gunakan nilai relatif dan durasi waktu sebagai gantinya. Misalnya, “2 menit”, “30m”, “1j”, dan bahkan hari-hari seperti “kemarin”, atau “sekarang, dan seterusnya”.
Jalankan perintah di bawah ini untuk menampilkan semua entri jurnal sejak 24 jam yang lalu dari tanggal dan waktu saat ini (”yesterday”
).
journalctl --since "yesterday"
Sekarang, bagaimana jika layanan SSH Anda berjalan sejak 10:10 hari ini dan berlanjut hingga terputus satu jam yang lalu? Tambahkan keduanya --since
dan --until
opsi ke journalctl
perintah untuk mencari tahu apa yang salah.
Jalankan perintah di bawah ini untuk menemukan log yang dihasilkan dari 10:10
hari ini sampai 1 hour ago
.
journalctl --since 10:10 --until "1 hour ago"
Memfilter Log Berdasarkan Unit Proses Asal
Menemukan log yang dihasilkan dari dan hingga tanggal dan waktu tertentu berguna untuk pemecahan masalah, tetapi Anda mungkin masih mendapatkan banyak catatan dalam output. Bagaimana Anda memfilter log lebih lanjut?
Misalnya, Anda ingin memfilter entri jurnal dari unit server web NGINX yang gagal dimulai saat boot. Gunakan journalctl
perintah dengan -unit
opsi dan nama unit layanan untuk melihat log.
Jalankan perintah di bawah ini untuk membuat daftar semua entri jurnal berdasarkan unit proses asal (-u
) (nginx.service
). Jenis pemfilteran ini bermanfaat untuk mengetahui PID dari proses atau layanan yang terkait dengan kesalahan atau peringatan tertentu.
journalctl -u nginx.service
Mungkin Anda lebih suka untuk secara aktif menampilkan perubahan apa pun saat itu terjadi, seperti saat layanan pemecahan masalah, dan perlu melihat log saat dimuat oleh journald. Jika demikian, jalankan perintah di bawah ini untuk mendaftar atau mengikuti (-f
) semua perubahan saat terjadi.
journalctl -f
Sejauh ini, Anda telah melihat bahwa journalctl fleksibel dan memiliki banyak opsi untuk memfilter dan menampilkan log. Tidak mungkin menampilkan semua jenis filter dan interval waktu dalam tutorial ini, tetapi Anda dapat menjalankan
man journalctl
perintah untuk melihat opsi lain yang ditawarkan alat journalctl.
Menyesuaikan Format Output
Secara default, journalctl menampilkan entri log dalam format seperti pager dan mewarnai teks terminal pada output. Tetapi Anda mungkin ingin menampilkan log Anda dalam format standar yang lebih dapat diuraikan. Dalam hal ini, Anda dapat menggunakan alat manipulasi teks apa pun.
Jalankan perintah di bawah ini untuk menekan paging dan pewarnaan. Alat journalctl memungkinkan Anda menentukan apa yang akan ditampilkan di stdout dengan arahan output dalam file konfigurasi.
journalctl --no-pager
Tetapi jika Anda lebih suka menentukan format output, tambahkan -o
pilihan untuk perintah journalctl. Contoh berikut menggunakan format output JSON, tetapi Anda dapat menggunakan opsi lain yang tersedia di journalctl.
Perintah di bawah ini mencantumkan entri jurnal dari boot saat ini (-b
) dihasilkan untuk layanan NGINX (nginx
) dan menampilkan daftar dalam format JSON (-o json
).
journalctl -b -u nginx -o json
Meskipun Anda juga dapat menggunakan format keluaran khusus,
journalctl
menyediakan beberapa yang telah ditentukan sebelumnya, seperti JSON, CSV, dan Syslog. Masing-masing format ini memiliki kelebihannya sendiri, tetapi Anda harus berkonsultasi dengan halaman alat manipulasi teks untuk informasi lebih lanjut tentang cara mereka menangani teks.
Kesimpulan
Dalam tutorial ini, Anda telah mempelajari cara menggunakan journalctl
perintah untuk melihat log jurnal systemd. Namun sebelum menggunakan salah satu dari perintah ini, Anda harus terlebih dahulu memilih opsi sub-perintah yang sesuai untuk menentukan apa yang ingin Anda lihat.
Pada titik ini, Anda sekarang dapat dengan cepat menemukan dan menunjukkan informasi spesifik dalam log sistem Anda melalui journalctl
. Anda sekarang dilengkapi dengan pengetahuan yang diperlukan, jadi mengapa tidak langsung mengelola layanan Linux dengan systemctl dan journalctl?