Pada situs web lalu lintas yang cukup tinggi yang berjalan dalam wadah virtual (VMware) dan kurang penyimpanan lokal, kami telah berhasil meningkatkan throughput (permintaan per detik) secara signifikan dengan beralih dari masuk langsung ke file log (yang berada di penyimpanan jaringan jarak jauh) ke rsyslogd .
Pada dasarnya kami telah beralih dari pencatatan sinkron ke asinkron. Pekerja server web menulis menggunakan syslog (3) ke beberapa buffer memori dan rsyslogd (8) mengirimkan data ke file aktual secara paralel, dan dengan kecepatannya sendiri, sehingga proses tidak memblokir IO saat masuk.
Sejauh ini bagus. Masalahnya adalah bahwa kadang - kadang rsyslogd dicegah dari menulis (misalnya pemadaman jaringan sementara / berkepanjangan) dan buffer yang masuk dengan cepat terisi.
Pertanyaan saya adalah:
- Bisakah klien memblokir ketika menulis ke rsyslogd menggunakan syslog (3) ?
- Apakah ada cara untuk melihat statistik rsyslogd , misalnya seberapa besar / penuh buffer?
- Apakah ada cara untuk meningkatkan ukuran buffer masuk rsyslogd ?
Jawaban:
Sejauh yang saya ingat mode default untuk antrian pesan utama di rsyslog adalah array ukuran tetap. Ini memiliki batas untuk elemen 10k atau lebih. Cobalah untuk mengubahnya ke daftar antrean tertaut. Antrian ini akan menangani pesan sesekali Anda dengan lebih baik.
Ya, ada
FixedArray
danLinkedList
antrian.sumber
/etc/rsyslog.conf
: Saya tidak melihat apa pun yang terkait dengan jenis antrian yang Anda sebutkan. Apakah ini memerlukan perubahan kode? Di mana dan bagaimana ini dapat dikonfigurasi? Terima kasih!Jawaban untuk pertanyaan pertama Anda adalah:
Kecuali jika server Anda menggunakan arsitektur dan primitif asinkron, akan selalu ada penguncian. Ini dapat dikurangi, tetapi tidak dihilangkan, misalnya dengan menggunakan separatethread untuk logging. Untuk dua pertanyaan lain saya tidak benar-benar tahu tetapi pemeriksaan ke kode sumber rsyslogd (serta ke satu untuk keluarga fungsi syslog ()) adalah satu-satunya cara untuk tahu.
Lebih umum, jika Anda memindahkan logging ke server eksternal melalui UDP: 514 "protokol syslog jaringan", maka Anda membawa kemungkinan untuk membuat kunci hampir nol. Dengan kelemahan kemungkinan hilangnya beberapa penebangan saat beban tinggi.
Pertama , di server "asal" Anda perlu memastikan semua logging terjadi melalui syslog. Misalnya, di Apache2 Anda perlu menentukan:
Untuk server lain, silakan merujuk ke halaman manual yang tepat. Jika Anda tidak dapat memastikan ini, harap diingat bahwa pencatatan pada sistem file dapat dibuat
Kedua , dalam konfigurasi rsyslogd yang berasal Anda meminta untuk mengarahkan semua lalu lintas syslog untuk fasilitas yang Anda pilih ("daemon" dalam contoh ini) ke satu atau lebih server syslog eksternal. Dalam file konfigurasi rsyslog Anda dapat menentukan:
untuk memiliki dua salinan log untuk dikirim ke dua server yang berbeda secara bersamaan.
Ketiga , di server tujuan Anda mengaktifkan penerimaan pesan syslog melalui UDP: 514. Itu ada dalam file konfigurasi rsyslogd (tujuan) dan biasanya dinonaktifkan oleh defualt (itu akan cukup untuk menghapus #s yang memimpin:
Keempat , opsional tetapi sangat dianjurkan, saya juga akan mengaktifkan cap waktu resolusi tinggi:
Juga opsi ini biasanya dinonaktifkan secara default (mengapa di Bumi?).
sumber