Pengantar Jurnal Systemd

Pengantar Jurnal Systemd

Systemd saat ini adalah sistem init yang diadopsi oleh hampir semua distribusi Linux, dari Red Hat Enterprise Linux ke Debian dan Ubuntu. Salah satu hal yang menjadikan Systemd target banyak kritikus adalah bahwa ia mencoba menjadi lebih dari sekadar sistem init sederhana dan mencoba menemukan kembali beberapa subsistem Linux.

Sistem penebangan tradisional yang digunakan di Linux, misalnya rsyslog, Versi modern dari tradisional Syslog. Systemd memperkenalkan sistem loggingnya sendiri: diimplementasikan oleh daemon, Journald, yang menyimpan log dalam format biner menjadi "jurnal", yang dapat ditanyakan oleh Journalctl kegunaan.

Dalam tutorial ini kita akan mempelajari beberapa parameter yang dapat kita gunakan untuk memodifikasi Journald perilaku daemon, dan beberapa contoh cara menanyakan jurnal dan memformat output yang dihasilkan dari kueri tersebut.

Dalam tutorial ini Anda akan belajar:

  • Cara mengubah pengaturan jurnal default
  • Bagaimana Journald dapat hidup berdampingan dengan syslog
  • Cara menanyakan jurnal dan beberapa cara untuk memformat output kueri

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Linux Menggunakan SystemD (Hampir Semua Lakukan)
Perangkat lunak Tidak ada perangkat lunak khusus yang dibutuhkan
Lainnya Root hak istimewa ke (akhirnya) mengubah konfigurasi default
Konvensi # - Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-Linux-Commands untuk dieksekusi sebagai pengguna biasa

File Konfigurasi Jurnal

Perilaku Journald Daemon dapat dimodifikasi dengan mengubah pengaturan dalam file konfigurasinya: /etc/systemd/jurnald.conf. Modifikasi langsung dari file ini tidak disarankan; Sebagai gantinya, kita harus membuat beberapa file konfigurasi terpisah yang berisi parameter yang ingin kita ubah, simpan dengan .conf ekstensi, dan letakkan di dalam /etc/systemd/jurnald.conf.D direktori.

File yang ditempatkan di dalam /etc/systemd/jurnald.conf.D Direktori memiliki prioritas yang lebih besar dari /etc/systemd/jurnald.conf: Mereka diurutkan berdasarkan nama mereka Urutan Leksikografi dan diuraikan dalam urutan itu, semua setelah file utama. Jika ada opsi yang sama, pengaturan ada di lebih dari satu file, yang terakhir akan diuraikan akan efektif.

Itu /etc/systemd/jourlnald.conf file, secara default, berisi daftar opsi yang dikomentari di dalam [Jurnal] Stanza: Mereka mewakili nilai default yang digunakan pada waktu kompilasi (konten di bawah ini berasal dari sistem fedora):

[Journal] #Storage=auto #Compress=yes #Seal=yes #SplitMode=uid #SyncIntervalSec=5m #RateLimitIntervalSec=30s #RateLimitBurst=10000 #SystemMaxUse= #SystemKeepFree= #SystemMaxFileSize= #SystemMaxFiles=100 #RuntimeMaxUse= #RuntimeKeepFree= #RuntimeMaxFileSize = #runtimeMaxFiles = 100 #maxRetentionsec = #maxFilesec = 1Month #forwardToSyslog = Tidak #ForwardTokmsg = Tidak #ForwardToconsole = Tidak #ForwardToWall = Ya #tTypath =/dev/konsol #maxLevelStore = debuG #maxlevelsyssy Maxlevelconsole = info #maxlevelwall = darurat #linemax = 48k #readkmsg = ya #audit = ya 


Mari kita lihat apa arti dari beberapa opsi itu, dan bagaimana mereka dapat mengubah perilaku Journald Daemon.

Opsi "penyimpanan"

Opsi pertama yang kami temui dalam file adalah Penyimpanan. Opsi ini mengontrol di mana data jurnal disimpan. Nilai default yang digunakan pada waktu kompilasi di sini adalah mobil, tetapi mungkin untuk memilih di antara:

  • tidak stabil
  • gigih
  • mobil
  • tidak ada

Jika kita menggunakan tidak stabil Sebagai nilai opsi ini, data jurnal hanya akan disimpan dalam memori di bawah /jalankan/log/jurnal (/berlari adalah TMPFS: Kontennya disimpan dalam memori), jadi tidak akan selamat dari reboot sistem.

Jika gigih digunakan sebagai gantinya, data jurnal akan disimpan di disk, di bawah /var/log/jurnal, yang dibuat jika tidak ada. Namun, jika karena alasan tertentu, disk tidak dapat ditulis, /jalankan/log/jurnal digunakan sebagai fallback.

Itu mobil nilai untuk Penyimpanan opsi, yang di sini digunakan sebagai default, pada dasarnya berfungsi gigih dalam arti bahwa ketika digunakan data jurnal disimpan di bawah /var/log/jurnal. Perbedaannya adalah jika jalurnya tidak ada, itu tidak dibuat, dan log hanya akan disimpan dalam memori.

Akhirnya, jika tidak ada Nilai digunakan, semua penyimpanan dimatikan: saat meneruskan ke sistem logging lainnya seperti Syslog akan tetap berfungsi, semua data yang diterima akan dijatuhkan.

Opsi "Compress"

Opsi "kompres" mengontrol apakah jika data melebihi ambang batas 512 byte dikompresi sebelum disimpan ke disk. Opsi ini menerima dua jenis nilai: a Boolean Seperti dalam kasus di atas (Ya), atau angka yang menetapkan ambang kompresi itu sendiri. Jika yang terakhir disediakan, kompresi diaktifkan secara implisit. Nilai ambang batas, secara default, diekspresikan dalam byte, tetapi K, M atau G Sufiks dapat digunakan sebagai gantinya.

Opsi "ForwardToSySlog"

Seperti yang telah disebutkan, di era pra-systemd, log di mana dikelola oleh Syslog sistem logging (rsyslog Sebenarnya). Sistem penebangan ini dapat meneruskan log ke banyak tujuan, seperti file teks, terminal, atau bahkan mesin lain di jaringan. SystemD mengimplementasikan sistem penebangannya sendiri, yang merupakan objek tutorial ini: Journald.

Kedua sistem dapat hidup berdampingan (ini kadang -kadang diperlukan karena Journald merindukan beberapa fitur seperti logging terpusat, Atau hanya karena kami, karena administrator mungkin menyukai log yang disimpan dalam file teks alih -alih dalam format biner, sehingga dapat dimanipulasi dengan alat unix standar).

Ini ForwardToSyslog opsi mengambil a Boolean Nilai: Jika diatur ke Ya, pesan akan diteruskan ke /run/systemd/jurnal/syslog soket, di mana dapat dibaca Syslog. Perilaku ini juga dapat diatur saat boot melalui Systemd.Journald.Forward_to_syslog pilihan.

Opsi serupa dapat digunakan untuk meneruskan pesan ke kmsg (Buffer log kernel), untuk menghibur atau ke "dinding" (dikirim sebagai pesan log untuk masuk pengguna). Hanya yang terakhir yang diatur ke Ya secara default.

Menanyakan jurnal

Alat yang dapat kami gunakan untuk memeriksa log sistem dan meminta jurnal SystemD Journalctl. Jika perintah dipanggil tanpa parameter lebih lanjut, semua konten jurnal ditampilkan. Untungnya, beberapa strategi dapat diimplementasikan untuk memfilter log. Mari kita lihat beberapa dari mereka.

Memfilter pesan berdasarkan unit

Salah satu opsi paling berguna yang dapat kita lewati Journalctl adalah -u, yang merupakan versi pendek dari --satuan. Dengan opsi ini kami dapat memfilter konten jurnal sehingga hanya pesan dari spesifik Systemd-Unit disahkan sebagai argumen opsi dikembalikan. Misalnya, untuk menampilkan hanya pesan yang berasal dari Pengelola jaringan.melayani unit, kita bisa menjalankan:

$ journalctl -u NetworkManager-Log dimulai pada Rabu 2020-07-01 21:47:23 CEST, berakhir di SAT 2020-07-25 15:26:59 CEST. -- 01 Jul 21:48:07 ERU Systemd [1]: Mulai Manajer Jaringan… 01 Jul 21:48:07 ERU NetworkManager [1579]: [1593632887.7408] NetworkManager (Versi 1.22.10-1.FC32) dimulai ... (untuk pertama kalinya) Jul 01 21:48:07 ERU NetworkManager [1579]: [1593632887.7413] Baca Konfigurasi:/etc/NetworkManager/NetworkManager.Conf Jul 01 21:48:07 ERU Systemd [1]: Mulai Manajer Jaringan. 

Selain itu, opsi spesifik didedikasikan untuk memfilter hanya pesan kernel: -k, yang merupakan bentuk pendek dari --dmesg.

Menyaring log berdasarkan tanggal

Jika kami ingin memfilter pesan yang disimpan dalam jurnal berdasarkan tanggal kami dapat menggunakan dua opsi khusus: -S (kependekan dari --sejak) Dan -U (kependekan dari --sampai). Kedua opsi menerima tanggal dalam format Yyyy-mm-dd hh: mm: ss. Bagian "waktu" tanggal dapat dihilangkan, dan dalam hal ini 00:00:00 diasumsikan. Misalkan kita ingin memfilter log mulai dari tanggal saat ini; Kami akan menjalankan perintah berikut:

$ Journalctl --Since 2020-07-25 


Untuk lebih membatasi log dengan waktu dari waktu 16:04:21 ke 16:04:26:

$ Journalctl --Since "2020-07-25 16:04:21"-hingga "2020-07-25 16:04:26" 

Serangkaian alias juga ada: mereka dapat digunakan sebagai pengganti tanggal polos:

Rangkaian Arti
"Kemarin" 00:00:00 sehari sebelum yang sekarang
"Hari ini" hari ini
"besok" sehari setelah yang saat ini
"Sekarang" waktu saat ini

Hanya menampilkan log terbaru

Jika kami meluncurkan Journalctl Perintah dengan -F (--mengikuti) Opsi, kita hanya dapat memvisualisasikan log terbaru yang diterima, dan masih mengamati karena log baru ditambahkan ke sana (pada dasarnya seperti panggilan ekor dengan -F pilihan). Di sisi lain, jika kita hanya ingin memvisualisasikan akhir jurnal kita dapat menggunakan -e pilihan (--Pager-end).

Memformat output journalctl

Output yang kami terima saat menggunakan Journalctl dapat dengan mudah diformat menggunakan opsi khusus: -Hai, atau versi panjangnya, --keluaran. Saat menggunakan opsi ini, kami dapat menentukan di antara serangkaian "gaya". Di antara (banyak) lainnya:

  • pendek
  • verbose
  • json-pretty

Itu pendek Format adalah default: Satu baris per entri ditampilkan dalam output yang mirip dengan syslog tradisional:

01 Jul 21:48:07 ERU Systemd [1]: Mulai Manajer Jaringan… 

Itu verbose Format, sebaliknya, membuat semua bidang entri untuk ditampilkan:

Rabu 2020-07-01 21:48:07.603130 CEST [s=d61cdf3710e84233bda460d931ebc3bb;i=6be;b=1c06b8c553624a5f94e1d3ef384fb50d;m=2e82666;t=5a966922b0155;x=6668aad5e895da03] PRIORITY=6 _BOOT_ID=1c06b8c553624a5f94e1d3ef384fb50d _MACHINE_ID=afe15f1a401041f4988478695a02b2bf _HOSTNAME=eru SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd _UID=0 _GID= 0 _transport = jurnal _cap_effective = 3fffffffff code_file = src/core/job.c CODE_LINE=574 CODE_FUNC=job_log_begin_status_message JOB_TYPE=start MESSAGE_ID=7d4958e842da4a758f6c1cdc7b36dcc5 _PID=1 _COMM=systemd _EXE=/usr/lib/systemd/systemd _SYSTEMD_CGROUP=/init.Lingkup _systemd_unit = init.Lingkup _systemd_slice =-.Slice _selinux_context = system_u: System_r: init_t: s0 _cmdline =/usr/lib/systemd/systemd --switched-root --system --deserialize 34 Pesan = Mulai Jaringan Manajer ... Job_id = 243 Unit = NetworkManager.Layanan Invocation_id = 6416439e51ff4543a76bded5984c6cf3 _source_realtime_timestamp = 1593632887603130 


Itu json-pretty Format menampilkan entri sebagai Json objek dengan cara yang dapat dibaca manusia. Dalam format ini entri dipisahkan oleh garis baru:

"__Realtime_timestamp": "1593632887603541", "prioritas": "6", "_systemd_unit": "init.scope "," _systemd_cgroup ":"/init.scope "," _uid ":" 0 "," _comm ":" Systemd "," _systemd_slice ":"-.slice", "_CAP_EFFECTIVE" : "3fffffffff", "_BOOT_ID" : "1c06b8c553624a5f94e1d3ef384fb50d", "_SELINUX_CONTEXT" : "system_u:system_r:init_t:s0", "__CURSOR" : "s=d61cdf3710e84233bda460d931ebc3bb;i=6be;b=1c06b8c553624a5f94e1d3ef384fb50d; Tuan M = x = 6668aAd5e895da03 "," _hostname ":" eru "," _pid ":" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " Mulai manajer jaringan ... "," _exe ":"/usr/lib/systemd/systemd "," __monotonic_timestamp ":" 48768614 "," _transport ":" jurnal "," syslog_facility ":" 3 "," unit ":" Pengelola jaringan.layanan "," job_id ":" 243 "," job_type ":" start "," _gid ":" 0 "," code_file ":" src/core/job.c "," _machine_id ":" afe15f1a401041f4988478695a02b2bf "," _cmdline ":"/usr/lib/systemd/systemd --scitched-root-sistem --deserialize 34 "," Sysloge: "" "" "" "" "" "" "" lib/lib/lib/Systemd-"Syslog," "" "" "" "" "" lib/lib/lib/SystemD-SYSLOGET: "" "" "" "" "" OMLOT "" "lib/lib/lib/lib 34" " "574", "Invocation_id": "6416439e51ff4543a76bded5984c6cf3", "_source_realtime_timestamp": "1593632887603130" 

Kesimpulan

Dalam tutorial ini kami mendekati Journald Daemon SystemD yang mengimplementasikan jurnal logging. Sistem penebangan ini dimaksudkan untuk digunakan sebagai pengganti syslog yang merupakan sistem tradisional yang digunakan di Linux. Pada banyak distribusi, karena suatu alasan atau yang lain kedua sistem masih hidup berdampingan.

Kami melihat apa itu Journald file konfigurasi dan apa arti beberapa opsi penting yang dapat digunakan untuk memodifikasi perilakunya, dan kami belajar bagaimana kami dapat meminta jurnal SystemD dengan Journalctl kegunaan. Jika Anda ingin tahu lebih banyak tentang Journald Dan Journalctl. Saya sarankan Anda untuk membaca manual masing -masing (Man Journald.conf Dan Man Journalctl adalah perintah yang Anda cari).

Tutorial Linux Terkait:

  • Pencatatan dan audit lanjutan di Linux
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • File Konfigurasi Linux: 30 Teratas Paling Penting
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Unduh Linux
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…
  • Can Linux mendapatkan virus? Menjelajahi kerentanan Linux…
  • Distro linux terbaik untuk pengembang
  • Hal -hal yang harus diinstal pada Ubuntu 22.04