Jawaban lainnya menjelaskan, seperti yang dikatakan penulisnya, "logging klasik" di Linux. Itu bukan cara kerja banyak sistem saat ini.
Kernel
Mekanisme kernel telah berubah.
Kernel menghasilkan output ke buffer dalam memori. Perangkat lunak aplikasi dapat mengakses ini dengan dua cara. Subsistem logging biasanya mengaksesnya dengan nama pseudo-FIFO /proc/kmsg
. Sumber informasi log ini tidak dapat dibagi secara bermanfaat di antara pembaca log, karena ini dibaca sekali. Jika beberapa proses membagikannya, mereka masing-masing hanya mendapatkan sebagian dari aliran data log kernel. Ini juga hanya baca.
Cara lain untuk mengaksesnya adalah /dev/kmsg
perangkat karakter yang lebih baru . Ini adalah antarmuka baca-tulis yang dapat dibagikan di antara beberapa proses klien. Jika beberapa proses berbagi, mereka semua membaca aliran data lengkap yang sama, tidak terpengaruh satu sama lain. Jika mereka membukanya untuk akses tulis, mereka juga dapat menyuntikkan pesan ke aliran log kernel, seolah-olah dihasilkan oleh kernel.
/proc/kmsg
dan /dev/kmsg
menyediakan data log dalam bentuk non-RFC-5424.
Aplikasi
Aplikasi telah berubah.
Fungsi pustaka GNU C syslog()
dalam upaya utama untuk terhubung ke AF_LOCAL
soket datagram bernama /dev/log
dan menulis entri log untuk itu. (Fungsi pustaka BSD C syslog()
saat ini menggunakan /var/run/log
sebagai nama soket, dan mencoba /var/run/logpriv
terlebih dahulu.) Aplikasi tentu saja dapat memiliki kode sendiri untuk melakukan ini secara langsung. Fungsi perpustakaan hanyalah kode (untuk membuka, menghubungkan, menulis, dan menutup soket) yang mengeksekusi dalam konteks proses aplikasi sendiri, setelah semua.
Aplikasi juga dapat mengirim pesan RFC 5424 melalui UDP ke server RFC 5426 lokal, jika seseorang mendengarkan pada soket AF_INET
/ AF_INET6
datagram pada mesin.
Berkat tekanan dari dunia daemontools selama dua dekade terakhir, banyak dukungan demon berjalan dalam mode di mana mereka tidak menggunakan syslog()
fungsi pustaka GNU C, atau soket UDP, tetapi hanya memuntahkan data log mereka ke kesalahan standar di mode Unix biasa.
manajemen log dengan nosh dan keluarga daemontools secara umum
Dengan rangkaian alat keluarga daemontools, ada banyak fleksibilitas dalam pencatatan. Tetapi secara umum di seluruh keluarga idenya adalah bahwa setiap demon "utama" memiliki dikaitkan "logging" demon. "main" demon bekerja seperti halnya proses non-demon dan menulis pesan log mereka ke kesalahan standar (atau output standar), yang diatur oleh subsistem manajemen layanan untuk terhubung melalui pipa (yang dipegang terbuka agar data log tidak hilang lebih dari restart layanan) ke input standar dari "logging" dasmon.
Semua dasmon "logging" menjalankan program yang mencatat suatu tempat . Secara umum program ini adalah sesuatu seperti multilog
atau cyclog
yang membaca dari input standar dan menulis (catatan waktu nanosecond) file log dalam direktori ukuran-capped, otomatis diputar, eksklusif-menulis, eksklusif. Secara umum, semua demon ini berjalan di bawah naungan akun pengguna khusus yang tidak memiliki hak pribadi.
Jadi seseorang berakhir dengan sistem logging yang sebagian besar didistribusikan, dengan data log masing-masing layanan diproses secara terpisah.
Seseorang dapat menjalankan sesuatu seperti klogd
atau syslogd
atau di rsyslogd
bawah manajemen layanan keluarga-daemontools. Tetapi dunia daemontools menyadari bertahun-tahun yang lalu bahwa struktur manajemen layanan dengan "logging" dasmon cocok untuk melakukan berbagai hal dengan cara yang lebih sederhana. Tidak perlu mengipasi semua stream log menjadi satu mash mash-mash, mengurai data log, dan kemudian mengipasi stream kembali ke file log yang terpisah; dan kemudian (dalam beberapa kasus) membaut mekanisme rotasi log eksternal yang tidak dapat diandalkan di samping. Struktur daemontools-family sebagai bagian dari manajemen log standarnya sudah melakukan rotasi log, penulisan logfile, dan pemisahan aliran.
Selanjutnya: Model pemuatan rantai untuk menjatuhkan hak istimewa dengan alat-alat yang umum di semua layanan berarti bahwa program logging tidak memerlukan hak pengguna super; dan model UCSPI berarti mereka hanya perlu peduli tentang perbedaan seperti transport stream versus datagram.
Toolset nosh mencontohkan ini. Sementara seseorang dapat berjalan rsyslogd
di bawahnya, di luar kotak, dan hanya mengelola kernel /run/log
,, dan input log UDP dengan cara lama; ini juga menyediakan lebih banyak cara "daemontools asli" untuk mencatat hal-hal ini:
- sebuah
klogd
layanan yang membaca dari /proc/kmsg
dan hanya menulis bahwa aliran log kesalahan standar. Ini dilakukan oleh sebuah program sederhana bernama klog-read
. Log logging terkait memberi aliran log pada input standarnya ke /var/log/sv/klogd
direktori log.
- sebuah
local-syslog-read
layanan yang bertuliskan datagram dari /dev/log
( /run/log
di BSD) dan hanya menulis bahwa aliran log kesalahan standar. Ini dilakukan oleh sebuah program bernama syslog-read
. Log logging terkait memberi aliran log pada input standarnya ke /var/log/sv/local-syslog-read
direktori log.
- sebuah
udp-syslog-read
layanan yang mendengarkan pada port syslog UDP, membaca apa yang dikirimkan kepadanya dan hanya menulis aliran log itu ke kesalahan standarnya. Sekali lagi, programnya adalah syslog-read
. Log logging terkait memberi aliran log pada input standarnya ke /var/log/sv/udp-syslog-read
direktori log.
- (pada BSD)
local-priv-syslog-read
layanan yang membaca datagrams dari /run/logpriv
dan hanya menulis aliran log itu ke kesalahan standarnya. Sekali lagi, programnya adalah syslog-read
. Log logging terkait memberi aliran log pada input standarnya ke /var/log/sv/local-priv-syslog-read
direktori log.
Toolset ini juga dilengkapi dengan export-to-rsyslog
alat yang dapat memantau satu atau beberapa direktori log (menggunakan sistem kursor log yang tidak mengganggu ) dan mengirim entri baru dalam formulir RFC 5424 melalui jaringan ke server RFC 5426 yang ditunjuk.
manajemen log dengan systemd
systemd memiliki program manajemen log monolitik tunggal systemd-journald
,. Ini berjalan sebagai layanan yang dikelola oleh systemd.
- Bunyinya
/dev/kmsg
untuk data log kernel.
- Bunyinya
/dev/log
(tautan simbolik ke /run/systemd/journal/dev-log
) untuk data log aplikasi dari syslog()
fungsi pustaka GNU C.
- Ia mendengarkan pada
AF_LOCAL
soket aliran di /run/systemd/journal/stdout
untuk data log yang datang dari layanan yang dikelola sistem.
- Ia mendengarkan pada
AF_LOCAL
soket datagram di /run/systemd/journal/socket
untuk data log yang berasal dari program yang berbicara protokol jurnal khusus sistem (yaitu sd_journal_sendv()
et al.).
- Ini mencampur semuanya.
- Itu menulis ke satu set file jurnal seluruh sistem dan per-pengguna, di
/run/log/journal/
atau /var/log/journal/
.
- Jika itu dapat terhubung (sebagai klien) ke
AF_LOCAL
soket datagram di /run/systemd/journal/syslog
situ menulis data jurnal di sana, jika penerusan ke syslog dikonfigurasi.
- Jika dikonfigurasi, ia menulis data jurnal ke buffer kernel menggunakan
/dev/kmsg
mekanisme yang bisa ditulis .
- Jika dikonfigurasi, ia juga menulis data jurnal ke terminal dan perangkat konsol.
Hal-hal buruk terjadi di seluruh sistem jika program ini macet, atau layanan dihentikan.
systemd sendiri mengatur output standar dan kesalahan (beberapa) layanan yang harus dipasang ke /run/systemd/journal/stdout
soket. Jadi demon yang masuk ke standard error dalam mode normal memiliki output mereka dikirim ke jurnal.
Ini sepenuhnya menggantikan klogd, syslogd, syslog-ng, dan rsyslogd.
Ini sekarang harus spesifik sistemd. Pada sistem systemd mereka tidak bisa menjadi server akhir /dev/log
. Sebagai gantinya, mereka mengambil satu dari dua pendekatan:
- Mereka bisa menjadi ujung server
/run/systemd/journal/syslog
, yang (jika Anda ingat) systemd-journald
mencoba untuk terhubung dan menulis data jurnal. Beberapa tahun yang lalu, seseorang akan mengkonfigurasi imuxsock
metode input rsyslogd untuk melakukan ini.
- Mereka membaca langsung dari jurnal systemd, menggunakan perpustakaan systemd-spesifik yang memahami format jurnal biner dan yang dapat memonitor file jurnal dan direktori untuk entri baru yang ditambahkan. Saat ini, seseorang mengkonfigurasi
imjournal
metode input rsyslogd untuk melakukan ini.