数字化技能提升教程,数字化时代生存宝典

FreeBSD日志轮转

浏览:125

服务器运行一段时间后,日志文件可能持续增长,占用越来越多的磁盘空间。FreeBSD自带的newsyslog可以按文件大小或时间条件轮转日志,并设置归档数量及压缩方式。先用一个独立测试文件验证配置,再应用到业务日志,可以减少误操作对现有服务的影响。

一、确认环境与操作范围

以下示例使用FreeBSD的基础系统工具,不需要额外安装日志管理软件。

先查看系统版本及命令位置。

freebsd-version
command -v newsyslog

后续文件操作需要root权限。普通用户可以切换到root,再进入sh执行示例中的命令。

su -
/bin/sh

本例仅使用两个独立文件。

/var/log/zzbaike-demo.log
/usr/local/etc/newsyslog.conf.d/zzbaike-demo.conf

如果服务器上已经存在同名文件,先备份或更换示例名称。不要直接拿正在使用的数据库日志、访问日志进行强制轮转测试。

二、创建测试日志

创建日志文件并设置权限,然后写入一条测试内容。

touch /var/log/zzbaike-demo.log
chown root:wheel /var/log/zzbaike-demo.log
chmod 640 /var/log/zzbaike-demo.log

printf '%s\n' 'newsyslog test before rotation' \
>> /var/log/zzbaike-demo.log

检查文件。

ls -l /var/log/zzbaike-demo.log
cat /var/log/zzbaike-demo.log

这里使用640权限,供文件所有者读写、同组用户读取,不向其他用户开放日志内容。实际业务日志还需要结合写入进程使用的账号设置所有者和权限。

三、编写日志轮转规则

创建配置目录。

mkdir -p /usr/local/etc/newsyslog.conf.d

写入示例规则。

cat > /usr/local/etc/newsyslog.conf.d/zzbaike-demo.conf <<'EOF'
/var/log/zzbaike-demo.log root:wheel 640 7 1024 24 JN
EOF

这条规则中,各字段的含义如下。

  • /var/log/zzbaike-demo.log是需要管理的日志文件。
  • root:wheel指定所有者和所属组。
  • 640设置轮转后日志及归档的权限。
  • 7表示最多保留7份归档,不包含当前正在写入的日志。
  • 1024表示按大小判断时的阈值为1024KB。
  • 24表示按时间判断时,距离上次轮转达到24小时。
  • J表示使用bzip2压缩归档。
  • N表示轮转后不需要通知任何写入进程。

本例使用N,是因为测试内容通过短时运行的命令写入,没有常驻进程持续持有日志文件。不要把这个标志直接套用到所有应用日志上。

四、先模拟检查,再执行轮转

先指定配置文件进行模拟检查。

newsyslog -nv \
  -f /usr/local/etc/newsyslog.conf.d/zzbaike-demo.conf

-n不会实际轮转日志,-v用于输出详细信息。检查输出中是否包含正确的文件路径,以及是否出现配置解析错误。

为了验证归档效果,可以仅对测试日志强制执行一次轮转。

newsyslog -Fv \
  -f /usr/local/etc/newsyslog.conf.d/zzbaike-demo.conf \
  /var/log/zzbaike-demo.log

该命令同时限定配置文件和日志路径,避免误操作其他日志。-F会跳过正常的大小及时间条件,因此只用于这次验证,不要放入日常定时任务。

检查轮转结果。

ls -lh /var/log/zzbaike-demo.log*

正常完成后,应能看到当前日志和第一份压缩归档。

/var/log/zzbaike-demo.log
/var/log/zzbaike-demo.log.0.bz2

读取归档中的内容。

bzcat /var/log/zzbaike-demo.log.0.bz2

再向当前日志写入一条内容,确认新文件可以正常使用。

printf '%s\n' 'newsyslog test after rotation' \
  >> /var/log/zzbaike-demo.log

tail -n 5 /var/log/zzbaike-demo.log

新内容应出现在当前日志中,轮转前的测试内容应保留在归档中。后续轮转会按规则更新归档序号,并限制保留数量。

五、检查配置是否纳入定时执行

手动指定-f能够执行,并不代表系统定时任务已经加载了这份配置。

检查主配置中的包含规则。

grep -n '<include>' /etc/newsyslog.conf

FreeBSD的默认配置会加载指定配置目录中以.conf结尾、且不以点开头的文件。本例需要确认主配置包含下面这一目录规则。

<include> /usr/local/etc/newsyslog.conf.d/[!.]*.conf

如果已有该规则,不要重复添加。如果服务器使用了自定义主配置,应先备份,再将需要的包含规则补入。

随后检查cron服务和现有调度。

service cron status
grep -n newsyslog /etc/crontab

newsyslog通常由cron定期调用,本身不是需要常驻运行的服务。若系统已经配置了调度,保留现有任务即可,不要额外添加重复执行项。

最后,通过主配置再次检查测试日志。

newsyslog -nv /var/log/zzbaike-demo.log

确认它能够读取刚才设置的轮转规则。

六、应用到真实业务日志时要注意什么

业务程序可能长时间持有日志文件。文件改名之后,如果没有通知程序重新打开日志,它可能继续向旧文件写入。

newsyslog支持通过PID文件和信号通知写入进程,但具体配置必须对应实际服务。不能把syslogd使用的处理方式直接复制给Nginx、数据库或其他应用,也不要通过随意填写PID和信号来消除报错。

接入业务日志前,建议先明确三件事。

  1. 日志由哪个进程写入,使用什么账号。
  2. 应用是否已经有自己的轮转机制。
  3. 轮转后需要怎样通知应用重新打开日志文件。

日志轮转负责管理文件大小和保留数量。如果还需要记录登录及文件操作等安全事件,可以结合站内的FreeBSD安全审计教程配置对应的审计策略。

七、常见问题

1. 设置1024KB后,为什么文件还能继续增长

newsyslog只有被执行时才检查文件。两次调度之间,日志仍可能继续增长,因此大小阈值不是实时硬限制。需要结合日志增长速度和调度频率安排轮转。

2. 保留7份归档是否等于保留7天

不等于。按大小触发时,一天可能生成多份归档。保留数量控制的是文件份数,实际覆盖的时间取决于日志增长速度和轮转频率。

3. 修改规则后是否需要重启newsyslog

不需要。newsyslog在每次执行时读取配置。修改后先模拟检查,再等待现有调度执行即可。

八、撤销测试配置

完成验证后,如果不准备继续管理这个测试日志,可以将配置文件改为不以.conf结尾的名称。

mv /usr/local/etc/newsyslog.conf.d/zzbaike-demo.conf \
  /usr/local/etc/newsyslog.conf.d/zzbaike-demo.conf.disabled

在采用前述包含规则的情况下,该文件将不再被自动加载。测试日志和归档可以先保留,确认不再需要后再单独清理,不必修改其他服务的日志配置。

广告合作

广告合作

QQ群号:4114653

QQ群号:4114653

温馨提示:
  1. 本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。
  2. 本站原创内容未经允许不得转载,转载请注明出处“站长百科”和原文地址。