系统优化

飞牛NAS日志管理与清理策略

日志为何物,又为何要管?

很多朋友在刚接触飞牛NAS(fnOS)时,往往只关注存储、影音和Docker应用,却忽略了系统日志。日志是系统的“黑匣子”,记录着内核、服务、应用和登录行为。但日志也是“碎纸机”,如果不加控制,它们会以惊人的速度占满你的系统盘或存储空间,尤其是当你频繁使用Docker、部署了多个服务时,/var/log 目录的体积可能轻松突破几十GB。

更严重的是,过量的日志会导致磁盘I/O压力增大,影响SMB传输速度和应用的响应时间。因此,一套合理的日志管理与清理策略,是飞牛NAS长期稳定运行的必修课。

第一步:了解日志都藏在哪里

在飞牛NAS中,日志主要分布在以下位置:

  • 系统日志/var/log/ 下的 syslogmessageskern.log
  • 飞牛应用日志/vol1/@app_data/ 下各应用目录内的 logs 文件夹
  • Docker容器日志/var/lib/docker/containers/ 下每个容器ID对应的 *-json.log 文件
  • 登录与安全日志/var/log/auth.logbtmpwtmp

你可以通过SSH登录飞牛NAS(默认端口22,需要先在控制台开启SSH功能),执行以下命令快速查看日志占用:

sudo du -sh /var/log
sudo du -sh /var/lib/docker/containers

第二步:制定日志轮转策略(核心步骤)

飞牛NAS基于Debian,自带 logrotate 工具,但默认配置可能不够激进。我们需要手动调整,让日志自动切割、压缩并删除旧文件。

首先,编辑主配置文件:

sudo nano /etc/logrotate.conf

确保以下参数存在且未被注释:

daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 root root

这表示日志每天轮转一次,保留7份,压缩旧日志(延迟压缩一天,方便排查当天问题)。

然后,为飞牛和Docker定制一个专门的文件:

sudo nano /etc/logrotate.d/fnos

写入如下内容:

/var/log/syslog /var/log/messages /var/log/kern.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

/var/lib/docker/containers/*/*-json.log {
    daily
    rotate 3
    size 50M
    compress
    missingok
    copytruncate
}

保存后,先测试配置是否正确:

sudo logrotate -d /etc/logrotate.d/fnos

如果输出没有报错,再执行一次强制轮转验证效果:

sudo logrotate -f /etc/logrotate.d/fnos

注意,Docker容器日志我们限制了单个文件达到50M才轮转,每天最多保留3个压缩包,这样既能排查问题,又不会占用大量空间。

第三步:手动清理已有的大日志文件

如果你发现日志已经占用很大空间,需要立即清理,可以按以下方式操作。

对于系统日志,使用 truncate 而非 rm,这样可以避免进程因文件句柄丢失而异常:

sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/messages
sudo truncate -s 0 /var/log/kern.log

对于Docker容器日志,最稳妥的方式是重启容器后再删除文件,或者使用在线截断命令:

sudo sh -c "truncate -s 0 $(docker inspect --format='{{.LogPath}}' 容器名或ID)"

如果你不确定容器ID,可以用 docker ps 查看。更推荐的做法是直接使用 docker container logs --tail 100 容器名 查看日志,避免频繁读取大文件。

第四步:限制Docker容器日志的生成上限

除了依赖系统轮转,我们还可以从源头限制Docker容器日志的大小。修改 /etc/docker/daemon.json 文件:

sudo nano /etc/docker/daemon.json

添加或修改为:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "20m",
    "max-file": "3"
  }
}

保存后重启Docker服务:

sudo systemctl restart docker

注意,这个配置只对新建或重启后的容器生效,已有容器需要手动重建或重启才会应用。

第五步:飞牛应用日志的定期清理

飞牛影音、相册、下载器等应用日志位于 /vol1/@app_data/ 下。你可以编写一个简单的定时任务来清理超过7天的日志文件。

创建清理脚本:

sudo nano /usr/local/bin/clean_fnos_logs.sh

内容如下:

#!/bin/bash
find /vol1/@app_data -type f -name "*.log" -mtime +7 -delete
find /vol1/@app_data -type f -name "*.log.*" -mtime +7 -delete

赋予执行权限并加入crontab:

sudo chmod +x /usr/local/bin/clean_fnos_logs.sh
sudo crontab -e

添加一行:

0 3 * * * /usr/local/bin/clean_fnos_logs.sh

这将在每天凌晨3点自动删除飞牛应用下7天前的日志文件。

第六步:开启日志监控与告警

清理是事后补救,最好能提前发现日志异常增长。飞牛NAS自带“通知中心”,我们可以在其中配置存储空间告警,但针对日志目录的监控需要借助 du 配合脚本。

你可以将以下命令加入crontab,每天检查日志总大小是否超过1GB,若超过则发送通知(这里以飞牛的curl webhook为例):

0 0 * * * /bin/bash -c 'size=$(du -sm /var/log | cut -f1); if [ $size -gt 1024 ]; then curl -X POST -H "Content-Type: application/json" -d "{\"message\":\"日志超1GB\"}" http://127.0.0.1:端口/api/通知; fi'

总结

日志管理不是一次性的工作,而是一个持续的习惯。通过 logrotate 自动轮转、Docker日志限流、应用日志定期清理、以及定时监控,你可以让飞牛NAS的日志始终维持在一个健康的体积范围内。这样不仅释放了存储空间,还能显著提升系统响应速度,让飞牛NAS更稳定地为你服务。建议每季度检查一次 /var/log 和Docker日志目录的实际占用,并根据你的使用强度动态调整轮转参数。

💬 评论区
发表评论

暂无评论,来说两句吧