Cronolog vs logrotate

11

Alat rotasi log mana yang Anda sukai?

Tidak dikenal
sumber

Jawaban:

14

Dalam pengalaman saya, logrotate sangat bagus. Ini sangat fleksibel, dan bekerja dengan baik dengan sebagian besar perangkat lunak.

Namun, ada beberapa masalah dengan itu, dan karena cronolog terutama merupakan fasilitas rotasi log web, saya akan menuliskan pengalaman saya dengan logrotate + apache yang bermasalah:

Saat memutar log, kita harus memberi tahu apache bahwa log sedang diputar, karena meskipun logrotate mengganti nama access.log ke access.log.1, apache akan terus menulis ke access.log.1, karena ia menulis ke inode, dan mengganti nama file tidak mempengaruhi nomor inode.

Pada debian etch (dan mungkin banyak distro lainnya), logrotate digunakan untuk memutar log apache. Sekarang, apache memiliki restart yang anggun yang menyarankan anak proses apache untuk keluar setelah mereka selesai melayani koneksi yang ada, apache kemudian membaca kembali konfigurasi itu, memunculkan proses anak baru, yang mulai menulis ke file log baru (Dalam kasus yang sebelumnya adalah diputar).

Ini terdengar seperti solusi yang bagus, namun restart yang anggun tidak selalu berfungsi dalam kondisi tertentu (seperti beban yang berat), jadi pengembang debian memutuskan untuk menggunakan restart apache alih-alih restart yang anggun, dalam konfigurasi log apache apache. Sayangnya ini menyebabkan semua koneksi terputus sekaligus, yang sangat buruk untuk situs yang sarat muatan. Selain itu, apache restart juga dapat menyebabkan masalah seperti apache berhenti dan tidak mulai (juga dalam situasi memuat tertentu), lihat tautan bug di bawah ini untuk detailnya.

Intinya adalah, logrotate hebat, tetapi dapat menyebabkan masalah tertentu untuk program tertentu. Saya tidak punya banyak pengalaman dengan cronolog, tetapi ketika ia menulis log melalui pipa, itu tidak memerlukan apache ketika memuat file log yang berputar, yang pada dasarnya menyelesaikan semua yang dijelaskan di atas.

Bug debian logrotate / apache terkait:

  1. Bug Debian # 301702
  2. Bug Debian # 400455
Tom Feiner
sumber
1
solusi untuk hal di atas adalah menggunakan truncate! apa yang dilakukannya adalah menyalin isi access.log ke access.log.1 dan kemudian mengosongkan access.log (seperti yang Anda lihat sisa inode dari access_log tetap sama). Biasanya Anda tidak memiliki log yang lebih besar dari beberapa GB (dalam kasus terburuk), sehingga seluruh proses tidak akan memakan waktu lama!
Nikolaidis Fotis
3

Saya lebih suka kronolog, tapi itu bukan preferensi yang kuat.

logrotate di mana dimulai oleh cron, dan jika sistem mati karena suatu alasan ketika rotate seharusnya terjadi, maka file log Anda tidak akan diputar.

Saya juga suka memiliki file log yang memiliki tanggal (% Y% m.combined.access.log) di namanya karena saya menyimpan log itu untuk waktu yang lama. Pada kebanyakan sistem, secara default, apache logrotate akan memberi nama file access.log, access.log.1, dll. Dimungkinkan untuk menggunakan tanggal di file log dengan logrotate, tapi saya tidak tahu bagaimana melakukan terakhir kali saya melihat.

Sakit kepala
sumber
2
Masalah di mana logrotate tidak berfungsi jika melewati waktu cron dapat diperbaiki dengan menginstal paket "anacron".
andrewd18
atau bahkan lebih baik Anda dapat menyimpan log Anda dalam format yang diinginkan -ini dapat dilakukan dengan templat di rsyslog - (% tahun% -% bulan% -% hari% _lala.log). dalam hal ini, Anda bahkan tidak perlu memutar log, karena setiap hari namanya diubah!
Nikolaidis Fotis
2

Hanya pernah menggunakan logrotate. Itu yang digunakan Debian secara default dan saya tidak pernah punya keluhan dengannya.

David Pashley
sumber
2

Saya hampir secara eksklusif menggunakan cronologlebih logrotate. logrotatedatang dengan Debian, dan saya mengizinkannya tetap bekerja untuk layanan sistem seperti log server surat. Tetapi untuk Apache dan lighttpdfile log, itu saja cronolog.

Salah satu alasan mengapa saya menggunakan cronologadalah bahwa semua konfigurasi terjadi di baris log-file dari konfigurasi server web

misal dalam lighttpdfile config, Anda bisa meletakkan:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"

Dan semua mendapatkan file log baru setiap minggu tanpa konfigurasi lainnya. Atau Anda bisa menjadi kreatif dan melakukan sesuatu seperti:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"

Dan dapatkan file log yang menunjukkan lalu lintas berdasarkan hari dalam seminggu. misal semua hari Minggu, semua hari Selasa.

Apa yang lebih baik adalah bahwa bahkan jika server turun untuk jumlah waktu berapa pun, file log yang benar akan digunakan saat restart.

Marc DM
sumber
1
Itu sangat mirip dengan svlogd (dari aliran runit dan daemontools).
Tobu