sistemd

Jurnal induk memahami log sistemd

Jurnal induk memahami log sistemd
Systemd adalah alat mengurus perkhidmatan baru. Dibuat pada mulanya oleh Red Hat, ia memungkinkan untuk mengurus perkhidmatan dengan lebih baik melalui proses terpusat yang memantau dan melancarkan perkhidmatan mengikut keperluan. Tetapi systemd juga merangkumi sistem kontena, sistem cron, cara menyediakan direktori sementara untuk perkhidmatan dengan cara yang selamat dan juga sistem pembalakan - di situlah kita akan fokus di sini.

Memahami log adalah penting: jika anda pernah menggunakan pelayan yang mempunyai bug atau diretas, umumnya satu-satunya cara anda untuk memahami apa yang berlaku adalah melalui log. Aplikasi utama yang akan kita gunakan adalah jurnal justeru nama artikelnya. Oleh itu, dengarkan dengan teliti kerana pada hari yang tepat, anda mungkin gembira mengetahui bagaimana ia berfungsi.

Di manakah log sistemd disimpan? Dan format apa yang disimpan?

Kami akan menganggap anda mempunyai sistem yang normal, kerana systemd dapat disesuaikan untuk berada di tempat yang luar biasa. Juga, sebilangan pengedaran Linux seperti Ubuntu 16.04 melumpuhkan pembalakan berterusan secara lalai, yang menghalang sistem untuk menjalankan tugasnya dengan betul. Sekiranya anda mempunyai sebaran tersebut, edit / etc / systemd / journald.fail conf, ubah Storage = auto ke Storage = berterusan dan akhirnya, reboot.

Oleh itu, anda biasanya akan menemui fail log sistemd di / var / log / jurnal. Sistem jurnal itu sendiri adalah perkhidmatan yang disebut sistem-jurnal.perkhidmatan.  Mari cuba senaraikan fail dalam direktori ini:

# ls / var / log / jurnal / -R
/ var / log / jurnal /:
15e43c1734090ac7fbea6b40fcd99d31
 
/ var / log / jurnal / 15e43c1734090ac7fbea6b40fcd99d31:
sistem @ a39da368947bd2ba-231f9bfc18a7a356.jurnal ~
sistem @ 62ac1299826d036cb043d6c06a9493b7-0000000000000001-00067d6410099a19.jurnal
pengguna-1000 @ b27e98812223a9bc-387e0521703f73d9.jurnal ~
pengguna-1000 @ 2123bc076b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.jurnal
pengguna-1000.jurnal
[banyak fail lain seperti di atas ...]

Kerana saya ingin anda terus membaca, saya harus memendekkan output kerana mengandungi banyak fail (dalam contoh saya, lebih dari 60 fail), maaf! Tergoda untuk membuka satu mungkin?

# head --bytes = 512 / var / log / jurnal / 15e43c1734090ac7fbea6b40fcd99d31 / [dilindungi e-mel]
b58569fe1fb13e9dbc1b0e0-0000000000000001-0007fe36ac2810e0.jurnal
?s, q?n / FLz???Ulz?l?]????
?_?b???z????o?y1KN ?i?eO??W?awak?  ?=?x0?L?d?7??X4n #?e? d3l?
hlm??o | MFO:?!qs?.tK??R?\??1?| 5  ????$?g??#?S??;??B7???????t???Y????mN?q????ZQ
?Yv?e?????BD?C?? wF??d |
?2?? 7???????[??Tidak?= 8????c?2 = p?&?"   ?0
????*????_??  ???
5?????yk?G? ?6?|??awak??w: # 12?Y??
3 TU;???'?jX??2?x '?=??[[dilindungi e-mel]
[dilindungi e-mel]?_?>??3S???,lR?.?$?g?L???s?/ E??M1??q???

Hei, lihat, itu tidak seperti fail log biasa yang anda lihat betul? Jangan risau, fail ini tidak rosak, anda baru sahaja mengetahui aspek systemd: systemd menyimpan fail dalam format binari. Itulah sebabnya sekecil mungkin: data berstruktur seperti waktu atau lokasi disimpan terus dalam binari, yang biasanya mengambil bait lebih sedikit daripada teks. Tetapi itu bukan satu-satunya alasan.

systemd tidak hanya menyimpan garisan log. Tujuannya adalah untuk membuat pemantauan dan penerokaan balak menjadi lebih mudah. Untuk membantu dalam tugas ini, mesej log sebenarnya adalah sebaris teks yang disertakan dengan data seperti keterukan log (amaran, kesalahan, dll.), atau bahkan bidang yang hanya berguna untuk aplikasi anda (contohnya URL diminta).

# journalctl --output = verbose - semua
KEUTAMAAN = 6
_UID = 0
_GID = 0
_CAP_EFFECTIVE = 3fffffffff
_BOOT_ID = ee4cc2ce7e8273aaffb5fc59c873ce7b
_MACHINE_ID = bc422e0feaab64bb7dd218c24e6830e5
_HOSTNAME = linux
SYSLOG_FACILITY = 3
SYSLOG_IDENTIFIER = sistemd
UNIT = dnf-makecache.perkhidmatan
_TRANSPORT = jurnal
_PID = 1
_COMM = sistemd
_EXE = / usr / lib / systemd / systemd
_CMDLINE = / usr / lib / systemd / systemd --switched-root --system --deserialize 76
_SYSTEMD_CGROUP = / init.skop
_SYSTEMD_UNIT = init.skop
_SYSTEMD_SLICE =-.kepingan
_SELINUX_CONTEXT = system_u: system_r: init_t: s0
CODE_FILE = src / core / pekerjaan.c
CODE_LINE = 795
CODE_FUNCTION = pekerjaan_log_status_mesej
PESAN_ID = a76e08846f5f0971371dbb11126e62e1
MESEJ = Bermula dnf makecache.
# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = kernel" HASIL = selesai
_SOURCE_REALTIME_TIMESTAMP = 1532886335471422

Saya telah memberitahu anda bahawa terdapat banyak medan (di sini terdapat 25 medan, atau 29 cap waktu pengiraan), semua coretan di atas hanya untuk satu mesej log! Keuntungan besarnya ialah anda boleh menjalankan carian dengan menyaring di mana-mana bidang dalam mesej log ini. Ini benar-benar membolehkan anda melakukan penapisan lanjutan.

Salah satu penapis yang paling jelas yang anda mahukan ialah menapis mengikut perkhidmatan. Seperti yang anda lihat di atas, terdapat medan UNIT sehingga anda dapat menapis dengan mudah untuk mendapatkan hanya mesej log dari satu perkhidmatan. Saya akan memberitahu anda lebih lanjut mengenai perkara itu kemudian.

Tetapi jumlah data ini juga bermaksud yang lain: dalam hampir semua kes, anda tidak akan membuka fail log secara manual dan anda tidak akan menyentuh folder / var / log / jurnal. Anda akan menggunakan jurnal untuk sebarang tugas yang berkaitan dengan pembalakan. Tidak ada putaran log seperti itu, semuanya diuruskan oleh masa mesej log.

Juga, jumlah bidang bergantung pada seberapa baik penyatuan sistemd dalam aplikasi anda. Semakin banyak bidang yang mengandungi mesej log, semakin baik. Untuk perkhidmatan sistem asas, systemd telah melakukan integrasi yang baik tetapi untuk aplikasi dan perkhidmatan lain, kualiti integrasi sangat berbeza. Biasanya, ini akan menjadi lebih baik dari masa ke masa apabila orang terbiasa dengan sistem.

Baiklah, sekarang masanya untuk mengetahui ciri-ciri jurnal.

Perintah yang paling banyak digunakan untuk jurnal

Perintah pertama yang mungkin anda ingin perhatikan adalah yang menunjukkan log kernel Linux. Ya, systemd juga menangani penyimpanan log kernel, jadi anda juga boleh mendapatkan log but sebelumnya. Inilah arahannya:

# journalctl --catalog --lines = 3000 --pager-end "_TRANSPORT = kernel"

Ini menunjukkan kepada anda pager di mana anda dapat melihat mesej terakhir. Anda boleh menatal hingga 3.000 baris terakhir menggunakan kekunci anak panah (↑ / ↓) atau Halaman Naik / Halaman Bawah. Bendera-katalog mengarahkan jurnal untuk menunjukkan konteks di sekitar garis log, seperti reboot komputer atau, dalam konteks lain, perkhidmatan berhenti / bermula. Saya selalu meletakkan bendera ini kerana konteksnya selalu penting, sangat membantu untuk mengetahui di mana situasi garis log muncul, jadi anda dapat meneka mengapa anda mendapat garis log ini.

Sekarang, mungkin anda hanya mahu melihat garis log dari but semasa:

# journalctl --catalog --lines = 35000 --pager-end --boot "_TRANSPORT = kernel"

Perhatikan argumen baris perintah -boot berfungsi dalam semua situasi, bukan hanya dengan log kernel. Sekiranya anda lebih suka memulakan dari awal:

# journalctl --catalog --boot "_TRANSPORT = kernel"

Saya tidak tahu apakah itu masalahnya untuk anda, tetapi saya mempunyai banyak kernel log! Dan bagaimana dengan gambaran umum umum mengenai mesin anda?

# journalctl --catalog --lines = 3000 --pager-end

Wow, terdapat banyak perkara yang berlaku di sistem anda! Sedikit penapisan akan sangat berguna di sini. Salah satu penapis yang paling banyak digunakan adalah mencocokkan perkhidmatan tertentu (seperti pelayan SSH atau pelayan HTTP), nama fail unit sistem untuk perkhidmatan SSH adalah sshd.perkhidmatan, jadi:

# journalctl --catalog --lines = 3000 --pager-end --unit = sshd.perkhidmatan

Bagus, bukan? Ia hanya boleh digunakan jika anda mengetahui nama perkhidmatan tersebut - tetapi dalam banyak kes, anda tidak mengetahui nama perkhidmatan tersebut. Sekiranya anda berada dalam situasi seperti itu, anda mungkin mahu senarai perkhidmatan, keterangan dan statusnya:

# systemctl list-unit - jenis = perkhidmatan

Baiklah, masalah ini kini diselesaikan. Tetapi kadang-kadang, anda mempunyai mesej ralat yang anda dapatkan dari sistem luaran seperti laman web anda sendiri atau dari aplikasi di desktop anda. Oleh itu, anda mungkin ingin mencari kata atau ayat tertentu dalam mesej log. Sejak systemd v237, kini mungkin.

Dalam jurnal, carian tidak peka huruf besar jika kata yang anda cari semuanya dalam huruf kecil. Oleh itu, jika anda mencari kata port, ia juga akan mencari port kata dengan huruf besar. Satu contoh:

# journalctl --catalog --lines = 3000 --pager-end --grep = "port"

Sekarang, jika anda mencari kata seperti CPU, ia hanya akan mencari CPU dengan semua huruf besar, ia tidak akan mencari cpu.

# journalctl --catalog --lines = 3000 --pager-end --grep = "CPU"

Anda ingat mesej ralat dari sistem luaran? Secara amnya, mesej ini mengandungi cap waktu. Untuk menapis mesej log, anda mungkin mahu menggunakan cap waktu itu. journalctl dapat menyenaraikan anda semua mesej log sejak tarikh dan waktu tertentu dengan argumen -sejak:

# journalctl --catalog --since = "2018-07-30 09:30:00"

Sekiranya sistem luaran itu jauh atau menggunakan cap waktu UTC, anda ingin menyaring berdasarkan tarikh dan waktu UTC dan memaparkan di terminal cap waktu UTC sehingga anda tidak perlu mengubahnya di kepala anda, yang cenderung sungguh mengelirukan. Untuk melakukannya, anda perlu menambahkan UTC setelah rentetan waktu dalam argumen -since. Anda kemudian perlu menambahkan bendera -utc. Jadi, sebagai contoh:

# journalctl --catalog --since = "2018-07-30 10:45:00 UTC" --utc

Perhatikan bahawa anda boleh menggunakan bendera -utc sahaja, dalam kes ini pada dasarnya akan memaparkan semua tarikh dan waktu di zon waktu UTC.

# journalctl --catalog --lines = 3000 --pager-end --utc

Log diurus dengan lebih baik dengan jurnal

Seperti yang anda lihat dengan semua arahan sebelumnya, sistemd jurnal menjadikan penyaringan dan penyahpepijatan lebih mudah kerana anda dapat memilih melalui semua baris log menggunakan satu perintah,. Sebilangan daripada anda mungkin tahu zaman dahulu di mana anda harus membuka setiap fail secara manual di / var / log untuk mempunyai idea umum mengenai masalah dan apa yang berlaku. Dengan semua petua yang anda pelajari di sini, anda akan memiliki alat yang kukuh untuk melihat mesej log anda mengikut cara ANDA menginginkannya.

Pasang Dolphin Emulator terkini untuk Gamecube & Wii di Linux
Dolphin Emulator membolehkan anda memainkan permainan Gamecube & Wii pilihan anda di Komputer Peribadi Linux (PC). Menjadi emulator permainan sumber ...
Cara Menggunakan Mesin Cheat GameConqueror di Linux
Artikel ini merangkumi panduan mengenai penggunaan mesin cheat GameConqueror di Linux. Ramai pengguna yang bermain permainan di Windows sering menggun...
Emulator Konsol Permainan Terbaik untuk Linux
Artikel ini akan menyenaraikan perisian emulasi konsol permainan popular yang tersedia untuk Linux. Emulation adalah lapisan keserasian perisian yang ...