PDNS 日志轮换

PDNS 日志轮换

我想知道轮换 PowerDNS 日志文件的推荐方法是什么。我在 logrotate 中添加了以下条目:

# cat /etc/logrotate.d/pdns 
/var/log/pdns/*.log {
    daily
    rotate 7
    compress
    delaycompress
}

- 但看起来 PowerDNS 不接受来自 logrotate 的信号并且它引用的是旧的日志文件:

# lsof | grep "pdns.log*"
rsyslogd  17776    root    5w      REG              253,0      88273     785738 /var/log/pdns/pdns.log-20140728

有两种可用的方法:

1. 选择该copytruncate选项,但是会出现警告,提示某些日志数据可能会丢失。

copytruncate
              Truncate the original log file in place after creating a copy,
              instead of moving the old log file and optionally creating a
              new one.

2.postrotate脚本。似乎需要完全重启,因为重新加载(pdns_control 循环)也kill HUP被忽略了 - 使用这种方法 PowerDNS 将在短时间内不可用。

postrotate
        /sbin/service pdns reload > /dev/null 2>/dev/null || true
    endscript

问 1. 有没有更好的方法来避免潜在的日志数据丢失或需要完全重启?

细节:

- 系统:CentOS 6x

- 版本:pdns-3.3.1 - 相关选项

/etc/pdns/pdns.conf
...
log-dns-queries=yes
loglevel=5
logging-facility=6
...

编辑:

这很奇怪,但我还注意到它在logging-facility系统日志默认状态下运行良好/var/log/messages

答案1

PowerDNS 会将日志记录到本地系统日志中,因此当您轮换日志文件时,您需要向系统日志守护程序发送 HUP 信号。您根本不需要向 PowerDNS 发送信号。

例如(取自 rsyslog 的 logrotate 配置):

/var/log/pdns/*.log {
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

相关内容