OpenVPN 客户端日志未按预期“logrotate”

OpenVPN 客户端日志未按预期“logrotate”

概括:我想防止 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.confdebian 安装中):

# 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
}

也就是说,我的意图是,

  1. cron每小时运行logrotate一次。
  2. 一旦/var/log/openvpn.log大于 100 MB,logrotate是否copytruncate会(允许 process=openvpn继续写入原始日志文件)。
  3. 每个copytruncated 日志部分都将带有 format= 的时间戳%Y%m%d_%H%M(在命令行中使用date +%Y%m%d_%H%M
  4. 每个copytruncated日志部分都会被压缩;我正在使用它delaycompress,因为它看起来比不使用它更安全:-)
  5. 我最多保留 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 个问题,按重要性升序排列(对我来说):

  1. 为什么logrotate时间戳不正确?即,为什么它是创建openvpn.log-20150306_%H%M而不是openvpn.log-20150306_1421
  2. 为什么要logrotate创建 5 GB 日志文件段,而不是按照指示旋转 @ 100 MB?
  3. 如何最好地解决这个问题?

答案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 安装中。

相关内容