Perilaku default oleh rsyslog adalah untuk menambahkan jejak ke yang sudah ada file log yang .
Sekarang, saya telah melihat (CentOs, Scientific Linux) bahwa ketika rsyslog sudah berjalan, Anda menghapus file log (misalnya yang didedikasikan untuk melacak log dari aplikasi Anda), Anda kemudian menjalankan aplikasi Anda, rsyslog tidak akan membuat file log dan tidak ada jejak yang akan direkam.
Apakah ada opsi konfigurasi entah bagaimana yang dapat memberitahu rsyslog untuk membuat file log jika tidak ada sebelum menambahkan jejak ke sana?
Catatan : melakukan service rsyslog restart
tekad memaksa pembuatan file log kosong.
rsyslog.conf (tidak ada yang ditambahkan)
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability
$SystemLogRateLimitInterval 1
$SystemLogRateLimitBurst 50000
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local1.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList # run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
Jawaban:
Dari rsyslog's POV, file log yang dihapus masih ada. Ini karena rsyslog tidak menulis ke nama file, itu menulis ke file yang dibuka untuk file log.
Sistem Unix tidak benar-benar menghapus file sampai tidak ada proses dengan pegangan terbuka ke file. Ini berarti bahwa ruang disk yang digunakan oleh file yang dihapus tidak dibebaskan sampai semua dan semua pegangan file yang terbuka ditutup. Ini juga berarti bahwa setiap proses dengan pegangan file terbuka ke file yang dihapus dapat melanjutkan membaca dari dan / atau menulis ke file.
Mengirim sinyal HUP (mis. Via
pkill -HUP rsyslog
atau/etc/init.d/rsyslog rotate
) ke rsyslog memberitahukannya untuk menutup semua file yang dibuka, memuat ulang file konfignya, dan membuka kembali semua file log untuk menulis (membuatnya jika perlu).Restart rsyslogd juga berfungsi.
Perhatikan bahwa ini adalah fitur, bukan bug, dengan beberapa implikasi berguna - misalnya itu sebabnya rsyslog terus menulis ke file log yang sama bahkan setelah diputar (mis. Berganti nama / mv-red) sampai rsyslog menerima sinyal HUP. Ini berarti bahwa skrip & utilitas pemrosesan log tidak harus sangat berhati-hati dalam menentukan waktu - mereka hanya dapat memutar semua log, mengirim rsyslog HUP, dan semuanya terus bekerja, tanpa kehilangan data log.
BTW, satu-satunya cara agar hal ini tidak terjadi dengan rsyslog adalah dengan menutup dan membuka kembali setiap file log pada setiap penulisan (atau setidaknya disebut
sync()
). Kinerja akan sangat buruk.sumber
$ FileCreateMode
Apakah opsi ini tidak melakukan apa yang Anda inginkan, $ FileCreateMode ?
kutipan
Modul Output File
Menurut dokumentasi rsyslog, argumen File dari Modul Output File dapat digunakan untuk melakukan ini.
kutipan modul omfile
Kirim syslog sinyal HUP
Saya pikir pada akhirnya Anda perlu "memicu" rsyslog untuk melakukan ini. Saya tidak berpikir itu akan apa yang Anda inginkan secara otomatis. Jadi Anda bisa memberikannya sinyal HUP untuk memicu pembuatan kembali file log setelah dihapus.
Melakukan hal itu membuat pesan berikut dalam
/var/log/messages
file log saya :sumber