如何设置OpenVPN以轮换日志?

我想要轮转我的OpenVPN日志。我该如何实现这个目标?

请参见我在这里的回答。在logrotate配置文件中使用copytruncate - mivk
2个回答

将以下内容添加到新文件 /etc/rsyslog.d/20-ovpn.conf。这样可以确保将发送到 rsyslog 的日志事件得到良好处理。
# Create a template for the vpn log location
$template OpenVPN,"/var/log/openvpn/ovpn.log"

# Save log events where the programname starts with ovpn like ovpn-server to the 
# location mentioned in the template
:programname, startswith, "ovpn-" -?OpenVPN

# Stop processing ovpn-* log events 
:programname, startswith, "ovpn-" ~

运行这个命令,并确保没有任何输出。
grep ^log /etc/openvpn/server.conf

如果此命令输出任何行,则您需要进入配置文件并注释掉日志或日志附加行。这将触发将其发送到syslog的默认日志记录。
最后,创建一个新文件/etc/logrotate.d/ovpn,并将下面的内容添加到该文件中。这将每周进行一次轮换,或者在日志文件达到100M大小时进行轮换。它将保留4周并压缩除最后两个之外的所有内容。
/var/log/openvpn/*.log {
        weekly
        size 100M
        rotate 4
        compress
        delaycompress
        missingok
        notifempty
        create 640 syslog adm
}

重新启动rsyslog和openvpn服务,以确保这些新配置生效。在openvpn重新启动后,您应该立即看到rsyslog创建了/var/log/openvpn和/var/log/openvpn/ovpn.log。

看起来上面的示例使用了传统的rsyslog语法。文档中说这将是当前的语法:
if $programname startswith 'ovpn-' then /var/log/openvpn/ovpn.log
& ~

我测试过了,对我来说很有效。

谢谢,这取决于您使用的Ubuntu版本。我相信它适用于最新的LTS版本,但对于之前的版本,除非您使用rsyslog PPA,否则无效。我更喜欢新的语法。 - flickerfly
说实话,我实际上是在Debian 7上进行了测试,那里的rsyslog版本是5.8.x。但是同样的系列也适用于Ubuntu 12 LTS。 - Josip Rodin
确认在14.04版本上可正常运行。 - Stéphane Chazelas
我还添加了openvpn程序:如果$programname以'openvpn'开头,则/var/log/openvpn/ovpn.log & ~ - xkill