概括:我想防止 OpenVPN 客户端的主日志填满其文件系统,但我还需要保持相当高的调试级别(至少目前如此)。我的尝试logrotate
目前没有按预期运行(尽管它可能按指示运行:-(
细节:
作为一名 Linux 管理员,我的技能肯定不够,所以请随意纠正下面嵌入的任何错误或误解。我有一台笔记本电脑
$ cat /etc/debian_version
jessie/sid
$ uname -rv
3.11-2-amd64 #1 SMP Debian 3.11.8-1 (2013-11-13)
$ sudo openvpn --version | head -1
OpenVPN 2.3.2 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [eurephia] [MH] [IPv6] built on Nov 28 2013
$ sudo logrotate --version | head -1
logrotate 3.8.6
这是我第一次设置 OpenVPN 客户端。客户端尚未工作,因此 ISTM 我需要保留我的 OpenVPN 日志@/var/log/openvpn.log
相当丰富的信息。不幸的是,我开始收到 notification= Low Disk Space on "Filesystem root"
,因为我/var
的 LVM2 根卷上有。手动删除/var/log/openvpn.log
几次后,我决定“是时候学习使用了logrotate
”。读了一点后,我创建/etc/cron.hourly/logrotate
了
#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf
并将以下节附加/var/log/openvpn.log
到我的/etc/logrotate.conf
(即,之前的所有内容# for OpenVPN client
都在/etc/logrotate.conf
debian 安装中):
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}
# system-specific logs may be configured here
# for OpenVPN client
/var/log/openvpn.log {
missingok
copytruncate
size 100M
rotate 5
dateformat -%Y%m%d_%H%M
dateext
compress
delaycompress
nomail
}
也就是说,我的意图是,
cron
每小时运行logrotate
一次。- 一旦
/var/log/openvpn.log
大于 100 MB,logrotate
是否copytruncate
会(允许 process=openvpn
继续写入原始日志文件)。 - 每个
copytruncate
d 日志部分都将带有 format= 的时间戳%Y%m%d_%H%M
(在命令行中使用date +%Y%m%d_%H%M
) - 每个
copytruncate
d日志部分都会被压缩;我正在使用它delaycompress
,因为它看起来比不使用它更安全:-) - 我最多保留 5 个日志部分,因此 OpenVPN 日志不超过 500 MB。 (希望更少,因为我正在压缩。)
不幸的是,我仍然收到 root-full 通知,例如
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/LVM2_crypt-root 20G 20G 0 100% /
udev 10M 0 10M 0% /dev
tmpfs 390M 1.1M 389M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1.6G 876K 1.6G 1% /run/shm
/dev/sda3 485M 33M 423M 8% /boot
/dev/mapper/LVM2_crypt-home 322G 228G 95G 71% /home
none 4.0K 0 4.0K 0% /sys/fs/cgroup
$ sudo rm /var/log/openvpn.log
rm: cannot remove ‘/var/log/openvpn.log’: No such file or directory
$ ls -alS /var/log/ | head
total 5521688
-rw------- 1 root root 5636743168 Mar 6 14:21 openvpn.log-20150306_%H%M
...
$ sudo rm /var/log/openvpn.log*
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/LVM2_crypt-root 20G 15G 4.3G 78% /
...
所以我有 3 个问题,按重要性升序排列(对我来说):
- 为什么
logrotate
时间戳不正确?即,为什么它是创建openvpn.log-20150306_%H%M
而不是openvpn.log-20150306_1421
? - 为什么要
logrotate
创建 5 GB 日志文件段,而不是按照指示旋转 @ 100 MB? - 如何最好地解决这个问题?
答案1
这是一个非常广泛的问题。我将尝试解决其中的一些问题。
安装后,每天都会通过 cron 类型的情况调用 logrotate。在 Centos 7 中,您可以在 /etc/cron.daily 下找到 logrotate 的调用,它是通过 /etc/cron.d 文件中的每日条目 (0daily) 调用的。当然,您可以进行更改以每小时运行一次,或者从根 crontab 中的特殊条目进一步调用 logrotate。
如果您查看手册页,您会发现日期格式有限制“仅允许 %Y %m %d 和 %s 说明符。”。因此你的规格问题。
看起来您生成的旋转文件非常大,似乎是一整天的日志。这很可能是由于规范错误造成的,因为数据被复制到同一文件中。由于压缩只会发生在当前轮换周期之后的周期,因此您可能基本上会拥有两个大文件。由于 24 小时内不会创建新的 logrotate 文件,因此压缩未按您的预期进行。
最后要注意的是,一些启发包现在包含默认情况下执行此操作的 logrotate 脚本。这些条目通常放置在 /etc/logrotate.d 下的文件中,而不是使用单个 logrotate.conf 文件。当 logrotate 默认运行时,这些文件将被包含在 /etc/logrotate.conf 中的“include”指令中。这个 include 指令几乎存在于我目前所知的所有 logrotate 安装中。