rsyslogのローテートを設定する
やること
rsyslogでローテート設定
状況
上記のときに設定したDHCPサーバのログがローテートされてない。ので一つのファイルにひたすらログ出力されていた。
使ってるのはisc-dhcp-server。
dhcpd.confでファシリティを7に設定→rsyslog.confでファシリティ7のログを/var/log/dhcp.logとして出力するように設定。
/etc/dhcp/dhcpd.confの該当箇所
authoritative; log-facility local7;
/etc/rsyslog.confの該当箇所
※syslogに出力しない
*.*;auth,authpriv.none;local7.none -/var/log/syslog
※messagesに出力しない
*.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none;local7.none -/var/log/messages
※/var/log/dhcp.logに出力
# isc-dhcp-server local7.* /var/log/dhcpd.log
ある日なんとなく/var/logを眺めていると
dhcpd.logが一つしかないです。他のは番号付きでローテートされてるのに。
やな予感がして行数。
$ cat /var/log/dhcpd.log | wc -l 2862889
ちょっと!!
というわけでローテートの設定します。
rsyslogのローテート設定は/etc/logrotate.conf と /etc/logrotate.d/rsyslog。
デフォルトで勝手に専用ファイル作られるのもいくつかあります。
ls /etc/logrotate.d apache2 apt cups-daemon dpkg exim4-base exim4-paniclog minidlna mysql-server nginx pure-ftpd-common rkhunter rsyslog samba squid vsftpd
/etc/etc/logrotate.d/rsyslog に定義を書いてあげれば、rsyslogでログ出力制御しているものは記述に従ってローテーとしてくれます。
今回はローテートに特にこだわりはないので(日付つけて毎日ローテとか別にしない)普通にsyslogなんかと合わせてローテさせます。
/etc/logrotate.d/rsyslog
/var/log/syslog /var/log/iptables /var/log/dhcpd.log ## ここ書き加え { rotate 30 daily missingok notifempty delaycompress compress postrotate invoke-rc.d rsyslog rotate > /dev/null endscript } /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/daemon.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages { rotate 30 weekly missingok notifempty compress delaycompress sharedscripts postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }
これで毎日ローテ、30世代までとっとく、2個前のログは圧縮という動きをしてくれるはず。