GNU/Linux >> Belajar Linux >  >> Ubuntu

Pesan Log Pemula Di Ubuntu 13.x?

Di Ubuntu 12.04, saya dapat menemukan pesan log Pemula di /var/log/syslog .

Perintah:

# initctl log-priority info
# initctl emit hello

Catatan:

Apr  1 01:56:56 precise64 kernel: [ 8365.820425] init: Connection from private client
Apr  1 01:56:56 precise64 kernel: [ 8365.821130] init: Handling hello event

Di Ubuntu 13.10, pesan tidak muncul di syslog atau di mana pun di bawah /var/log direktori, meskipun perintah seperti logger hello bekerja seperti yang diharapkan. Haruskah saya mencari mereka di tempat lain? Apakah ada pengaturan konfigurasi yang perlu saya ubah di suatu tempat?

Ada pertanyaan tentang Kesalahan Server dari seseorang yang tampaknya memiliki masalah yang sama di Ubuntu 13.04, dan lebih banyak lagi di sini dan di sini yang mungkin juga menjelaskan masalah yang sama. Sayangnya, pertanyaan ini tidak memberikan petunjuk untuk masalah tersebut.

Jawaban Terbaik

Edit 02-06-2016

Jika Anda mencoba menemukan “Pesan log pemula” secara umum, periksa /var/log/upstart/ . Di situlah Pemula menyimpan stdout dan stderr dari layanan pemula. Terima kasih atas jawaban leopd untuk menunjukkan hal ini.

Jika Anda mencari pesan log dari Pemula itu sendiri, yang dikonfigurasi oleh initctl log-priority dan dipancarkan oleh initctl emit , baca terus!

Versi pendek

Entri log seharusnya benar-benar muncul di dmesg. Meskipun begitu, mereka tidak muncul secara default di /var/log .

Jika Anda menginginkannya di /var/log juga, tambahkan $KLogPermitNonKernelFacility on ke konfigurasi rsyslogd. Saya sarankan membuat file khusus seperti /etc/rsyslog.d/60-custom.conf untuk menghindari pengeditan /etc/rsyslog.conf , karena itu dikelola oleh dpkg. Sekarang pesan Pemula akan muncul di /var/log/syslog , setelah Anda menyetel log-priority Up Pemula ke info atau lebih.

Versi panjang

Ini membutuhkan waktu berhari-hari bagi saya untuk melacaknya, tetapi tampaknya Pemula (1.5) tidak log ke syslog, yaitu, tidak memanggil fungsi glibc syslog() . Sebagai gantinya, Pemula masuk ke buffer ring kernel, yang dibaca dmesg. Sekarang, saya tidak berpikir itu mungkin untuk proses ruang pengguna untuk menulis ke buffer itu, tetapi ternyata mereka bisa dengan menulis ke /dev/kmsg , dan itulah yang dilakukan Pemula. Jadi itulah bagian pertama dari teka-teki.

Bagian kedua adalah bahwa ada kepercayaan luas bahwa pesan yang ditulis ke buffer ring kernel secara otomatis disalin ke syslog oleh kernel (setidaknya itulah yang selalu saya pikirkan). Ternyata ini sebenarnya dilakukan oleh daemon ruang pengguna, secara tradisional klogd, yang beroperasi bersama-sama dengan syslogd. Jelas rsyslogd menggantikan syslogd tetapi ternyata itu juga menggantikan klogd (semacam:lihat catatan di akhir).

Bagian ketiga adalah bahwa pesan yang ditulis ke buffer ring kernel dari ruang pengguna sebenarnya terlihat berbeda dari pesan yang ditulis dari ruang kernel:mereka memiliki fasilitas yang berbeda. dmesg memiliki beberapa opsi yang berinteraksi dengan ini:-x akan menampilkan fasilitas (dan prioritas), sedangkan -u dan -k beri tahu dmesg untuk masing-masing hanya menampilkan pesan fasilitas pengguna dan pesan fasilitas kernel.

Terkait:Bagaimana cara menghentikan Unity dari mengingat riwayat pencarian?

Sekarang inilah penentunya:secara default, rsyslogd mengabaikan pesan dengan fasilitas non-kernel ketika sedang membaca pesan dari buffer ring kernel. Opsi konfigurasi yang relevan adalah $KLogPermitNonKernelFacility , yang dinonaktifkan secara default dan perlu diaktifkan jika Anda ingin rsyslogd memproses pesan-pesan ini. Perhatikan bahwa konfigurasi rsyslogd lainnya akan memperlakukan semua pesan dari buffer ring kernel sebagai memiliki kern fasilitas, terlepas dari fasilitas yang mereka miliki di buffer ring kernel.

Informasi lebih lanjut

syslog

Kode dapat menulis ke syslog dengan memanggil fungsi glibc syslog() , dijelaskan dalam man 3 syslog . Rupanya fungsi-fungsi ini menulis ke /dev/log . Kode dapat dibaca dari syslog dengan membaca /dev/log , dan inilah yang syslogd dan penggantinya lakukan. rsyslogd membaca /dev/log menggunakan imuxsock modul masukan.

Buffer cincin kernel

Ruang kernel menulis ke buffer ini dengan memanggil fungsi kernel printk() , jadi terkadang disebut buffer printk. Ruang pengguna dapat menulisnya dengan menulis ke /dev/kmsg . Ruang pengguna dapat membaca dari buffer ini dengan beberapa metode:dapat dibaca dari /proc/kmsg (apa yang dilakukan dmesg secara default), atau dapat dibaca dari /dev/kmsg , atau dapat memanggil panggilan sistem syslog() , yang dijelaskan dalam man 2 syslog dan sangat berbeda dari fungsi glibc syslog() dijelaskan dalam man 3 syslog . glibc sebenarnya menyediakan pembungkus untuk panggilan sistem syslog() , disebut klogctl() , untuk membantu meringankan kebingungan ini.

Secara tradisional, klogd membaca dari salah satu antarmuka ini, lalu memanggil fungsi glibc syslog() untuk menyalinnya ke syslog. rsyslogd membaca salah satu antarmuka ini melalui imklog modul input tetapi AFAIK tidak repot memanggil glibc syslog() , itulah sebabnya tidak persis seperti klogd; itu hanya memproses output imklog sama seperti memproses output dari modul input lainnya. Ada peringatan tambahan bahwa semua imklog keluaran memiliki kern fasilitas terlepas dari pesan fasilitas yang ada di buffer ring kernel.

Referensi

  • http://upstart.ubuntu.com/cookbook/#initctl-log-priority (Salah menyatakan bahwa Pemula masuk ke syslog)
  • https://www.kernel.org/doc/Documentation/ABI/testing/dev-kmsg
  • http://www.gnu.org/software/libc/manual/html_node/Overview-of-Syslog.html
  • http://www.rsyslog.com/doc/v5-stable/configuration/modules/imklog.html (Perhatikan bahwa ini untuk v5, digunakan di Ubuntu 12.04. Opsi ini dianggap warisan dalam versi rsyslog terbaru)

Ubuntu
  1. Patch Live Kernel Linux di Ubuntu 20.04 LTS

  2. Bagaimana Cara Mengatur Layanan?

  3. Catat Aktivitas Ssh?

  1. Perbarui versi Kernel di server Ubuntu

  2. Kernel Linux 5.13 Dirilis! Cara Menginstal di Ubuntu 21.04

  3. Perbedaan Antara /var/log/messages, /var/log/syslog, Dan /var/log/kern.log?

  1. Cara Memperbarui Kernel Linux Di Ubuntu

  2. Gagal Instalasi Virtualbox 5.1 Di Ubuntu 16.04?

  3. Pesan Auditd Mengisi /var/log/messages