Journalctl adalah alat yang hebat untuk menganalisis log, biasanya salah satu yang pertama menjadi terbiasa sebagai administrator linux pemula. Kemampuan rotasi bawaan, kemampuan pemfilteran yang kaya, dan kemampuan untuk melihat log dari semua layanan unit systemd dengan satu alat sangat nyaman dan sangat memudahkan pekerjaan administrator sistem.
Artikel ini membahas fitur-fitur utama journalctl dan bagaimana penggunaannya. Dengan menggunakan journalctl, Anda dapat melihat log sistem untuk menyelesaikan masalah yang muncul di workstation atau server menggunakan distribusi linux dengan daemon inisialisasi systemd, yang telah menjadi standar de facto di sistem Linux modern, misalnya: RHEL, CentOS, Fedora, Debian, dan banyak lainnya.
Ada persepsi bahwa systemd tidak terlalu bagus - systemd memuat sistem dan masih menjadi subyek kontroversi saat ini, tetapi tidak dapat disangkal bahwa systemd menyediakan seperangkat alat yang sangat baik untuk manajemen sistem dan pemecahan masalah. Bayangkan harus berurusan dengan server bermasalah yang bahkan tidak bisa boot, dalam hal ini Anda dapat boot dari distribusi langsung, memasang partisi sistem, dan melihat log systemd untuk melihat apa masalahnya.
Systemd
Systemd memiliki tiga komponen utama:
- systemd - manajer sistem dan layanan
- systemctl - utilitas untuk melihat dan mengelola status layanan
- systemd-analysis - menyediakan statistik tentang proses boot sistem, memeriksa kebenaran file unit dan juga memiliki kemampuan debugging systemd
Jurnald
Journald adalah daemon logging systemd. Systemd dirancang untuk mengelola log sistem secara terpusat dari proses, aplikasi, dll. Semua kejadian seperti itu ditangani oleh daemon journald, ia mengumpulkan log dari seluruh sistem dan menyimpannya dalam file biner.
Keunggulan dari centralized logging event dalam format binary cukup banyak, misalnya system log dapat diterjemahkan ke dalam berbagai format, seperti plain text, atau ke dalam JSON, jika diperlukan. Juga cukup mudah untuk melacak log ke satu peristiwa menggunakan filter tanggal dan waktu.
File log jurnal dapat mengumpulkan ribuan peristiwa dan diperbarui dengan setiap peristiwa baru, jadi jika sistem Linux Anda berjalan cukup lama, ukuran file log dapat mencapai beberapa gigabyte atau lebih. Oleh karena itu, analisis log tersebut dapat terjadi dengan penundaan, dalam hal ini, saat menganalisis log, Anda dapat memfilter keluaran untuk mempercepat pekerjaan.
File konfigurasi Journald
File konfigurasi dapat ditemukan di jalur berikut: /etc/systemd/journald.conf, berisi berbagai pengaturan untuk journald, saya tidak akan merekomendasikan untuk mengubah file ini jika Anda tidak yakin dengan apa yang Anda lakukan.
Direktori dengan jurnal jurnal terletak di / run / log / journal (jika penyimpanan log persisten tidak dikonfigurasi, tetapi akan dibahas nanti).
File-file tersebut disimpan dalam format biner, jadi normal untuk melihatnya menggunakan cat atau nano, seperti yang biasa dilakukan oleh banyak administrator, itu tidak akan berfungsi.
Menggunakan journalctl untuk melihat dan menganalisis log
Perintah dasar untuk melihat:
# journalctl
Ini akan mencetak semua entri dari semua log, termasuk kesalahan dan peringatan, sejak sistem mulai boot. Entri acara yang lebih lama akan berada di atas, yang lebih baru di bagian bawah, Anda dapat menggunakan PageUp dan PageDown untuk menelusuri daftar, Enter untuk menelusuri log baris demi baris dan Q untuk keluar.
Secara default, journalctl menampilkan waktu kejadian sesuai dengan zona waktu yang dikonfigurasi di sistem Anda, journalctl juga memungkinkan Anda untuk melihat log dengan waktu UTC (dalam standar waktu ini, kejadian disimpan di dalam file journald), untuk ini Anda dapat menggunakan perintah:
# journalctl --utc
Memfilter acara berdasarkan kepentingan
Sistem mencatat peristiwa dengan tingkat keparahan yang berbeda, beberapa peristiwa mungkin merupakan peringatan yang dapat diabaikan, sebagian mungkin merupakan kesalahan fatal. Jika kita ingin melihat kesalahan saja, mengabaikan pesan lain, masukkan perintah yang menunjukkan kode
tingkat keparahan : # journalctl -p 0
Untuk tingkat keparahan , penunjukan berikut diterima:
- 0: darurat (sistem tidak beroperasi)
- 1: peringatan (peringatan membutuhkan perhatian segera)
- 2: kritis
- 3: kesalahan
- 4: peringatan
- 5: pemberitahuan
- 6: info (pesan informasional)
- 7: debug (pesan debug)
Saat Anda memberikan kode tingkat keparahan, journalctl akan mencetak semua pesan dengan kode tingkat keparahan itu dan di atasnya. Misalnya, jika kita menetapkan opsi -p 2, journalctl akan menampilkan semua pesan dengan level 2, 1, dan 0.
Menyiapkan penyimpanan log
Secara default, journald menimpa lognya setiap kali reboot, dan memanggil journalctl akan mencetak log dari boot sistem saat ini.
Jika Anda perlu mengkonfigurasi penyimpanan permanen log, Anda perlu mengkonfigurasi ini secara terpisah, karena para pengembang meninggalkan penyimpanan permanen semua log agar tidak menduplikasi rsyslog.
Ketika parameter Storage = disetel ke auto) di file konfigurasi /etc/systemd/journald.conf dan direktori / var / log / journal / tidak ada, log akan ditulis ke / run / log / journal tanpa menyimpan antar reboot jika / var / log / journal / existing, log akan disimpan di dalamnya, secara permanen, tetapi jika direktori dihapus, systemd tidak akan membuatnya kembali secara otomatis dan sebaliknya akan masuk kembali ke / run / systemd / journal tanpa menyimpan. Dalam kasus ini, direktori dapat dibuat kembali dengan menambahkan Storage = persistent ke journald.conf dan memulai ulang systemd-journald.service (atau me-reboot).
Buat direktori untuk menyimpan log, setel atribut yang diperlukan, dan mulai ulang layanan:
# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
Lihat log unduhan
Jika journald dikonfigurasi untuk menyimpan log secara terus-menerus, kita dapat melihat log untuk setiap unduhan individu, perintah berikut akan mencantumkan log:
# journalctl --list-boots
Angka pertama menunjukkan nomor log yang dapat digunakan untuk melihat log sesi tertentu. ID boot kedua juga dapat digunakan untuk melihat log terpisah.
Dua tanggal berikutnya, periode waktu di mana log ditulis padanya, ini nyaman jika Anda ingin mencari log untuk jangka waktu tertentu.
Misalnya, untuk melihat log dari awal sistem saat ini, Anda dapat menggunakan perintah:
# journalctl -b 0
Dan untuk melihat log unduhan sebelumnya:
# journalctl -b -1
Lihat log untuk jangka waktu tertentu
Journalctl memungkinkan Anda untuk menggunakan kata-kata seperti "kemarin" (kemarin), "hari ini" (hari ini), "besok" (besok), atau "sekarang" (sekarang).
Oleh karena itu, kita dapat menggunakan opsi "--since" (dari awal periode untuk menampilkan log).
Dari tanggal dan waktu tertentu:
# journalctl --since "2020-12-18 06:00:00"
Dari tanggal tertentu ke tanggal dan waktu tertentu:
# journalctl --since "2020-12-17" --until "2020-12-18 10:00:00
Dari Kemarin:
# journalctl --since yesterday
Dari jam 9 pagi hingga saat ini, satu jam yang lalu:
# journalctl --since 09:00 --until "1 hour ago"
Melihat pesan kernel
Untuk melihat pesan dari kernel Linux untuk boot saat ini, gunakan perintah dengan sakelar -k:
# journalctl -k
Melihat log untuk layanan atau aplikasi systemd tertentu
Anda dapat memfilter log dengan layanan systemd tertentu. Misalnya, untuk melihat log dari NetworkManager, Anda dapat menggunakan perintah berikut:
# journalctl -u NetworkManager.service
Jika Anda perlu menemukan nama layanan, gunakan perintah:
# systemctl list-units --type=service
Anda juga dapat melihat log aplikasi dengan menentukan file yang dapat dieksekusi, misalnya untuk melihat semua pesan dari nginx untuk hari ini, kita dapat menggunakan perintah:
# journalctl /usr/sbin/nginx --since today
Atau dengan menentukan PID tertentu:
# journalctl _PID=1
Opsi tampilan tambahan
Perhatikan pesan baru (mirip dengan tail -f):
# journalctl -f
Buka log dengan "memutarnya" ke entri terakhir:
# journalctl -e
Jika ada banyak data di direktori dengan log, maka pemfilteran output journalctl dapat memakan waktu lama, prosesnya dapat dipercepat secara signifikan dengan menggunakan opsi --file, menetapkan journalctl hanya log yang perlu kita pantau:
journalctl --file /var/log/journal/e02689e50bc240f0bb545dd5940ac213/system.journal -f
Secara default, journalctl memotong bagian garis yang tidak sesuai dengan lebar layar, meskipun terkadang penggabungan garis lebih disukai. Fitur ini dikontrol oleh variabel lingkungan SYSTEMD_LESS, yang berisi opsi yang diteruskan ke less (program halaman default). Secara default, variabelnya adalah FRSXMK, jika Anda menghapus opsi S, garis tidak akan terpotong.
Sebagai contoh:
SYSTEMD_LESS=FRXMK journalctl
Batasi ukuran log
Jika journald dikonfigurasi untuk menyimpan log setelah reboot, maka secara default ukuran jurnal dibatasi hingga 10% dari partisi file dan dapat menggunakan maksimum 4 GB ruang disk.
Ukuran log maksimum dapat disesuaikan dengan menghapus komentar dan mengedit pengaturan berikut di file konfigurasi journald:
SystemMaxUse=50M
Menghapus Log
Anda dapat menghapus file log yang diarsipkan secara manual dengan rm atau menggunakan journalctl.
Hapus log, sisakan hanya 100 MB terakhir:
# journalctl --vacuum-size=100M
Hapus log, tinggalkan hanya log dari 7 hari terakhir:
# journalctl --vacuum-time=7d
Kesimpulan
Layanan pencatatan jurnal adalah alat yang sangat kuat dan fleksibel, dan jika Anda tahu cara menggunakannya, ini dapat membuat hidup Anda jauh lebih mudah sambil mencari penyebab masalah dengan sistem atau layanannya.