Logrotate

PDNS 日誌輪換

  • September 26, 2016

我想知道旋轉 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

Q1。 有沒有更好的方法來避免潛在的日誌數據失去或需要完全重啟?

細節:

  • 系統:CentOS 6x

  • 版本:pdns-3.3.1 - 相關選項

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

編輯:

這很奇怪,但我也注意到它預設logging-facility為 system log可以正常工作/var/log/messages

PowerDNS 將日誌記錄到本地 syslog,因此它是您在輪換日誌文件時需要向其發送 HUP 信號的 syslog 守護程序。您根本不需要向 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
}

引用自:https://serverfault.com/questions/616074