系统优化

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

飞牛NAS作为一款功能强大的国产NAS系统,在日常使用中会持续产生各类系统日志、应用日志以及访问记录。随着使用时间的增长,这些日志文件如果不加以管理,会逐渐蚕食宝贵的存储空间,甚至在极端情况下影响系统性能。本文将深入讲解飞牛NAS的日志生成机制,并提供一套从查看到清理的完整实操策略。

日志文件的存放位置与类型

在飞牛NAS中,日志主要存储在 /var/log 目录下,但部分应用日志(如Docker容器日志)会存放在 /var/lib/docker/containers/ 中。常见的日志类型包括:

  • 系统日志:记录内核、服务启动、硬件状态等信息,文件名为 syslogkern.log 等。
  • 登录日志:记录用户SSH登录、Web界面访问记录,文件名为 auth.log
  • 任务计划日志:记录cron定时任务的执行情况,文件名为 cron.log
  • 应用日志:如SMB共享访问日志、媒体服务扫描日志等,通常位于 /var/log/fnos/ 子目录下。
  • Docker容器日志:每个运行中的容器都会生成一个JSON格式的日志文件。

第一步:查看当前日志占用情况

在开始清理之前,我们需要先了解磁盘上到底有多少日志空间被占用。通过SSH登录飞牛NAS(默认端口22),执行以下命令:

sudo du -sh /var/log/*

该命令会列出 /var/log 下所有文件和目录的大小。如果你使用了Docker,还可以查看容器日志目录:

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

通常你会发现,Docker容器日志是最大的“罪魁祸首”,尤其是运行了数据库或下载工具(如qBittorrent)的容器,单日日志可能达到数百MB。

第二步:配置系统日志轮转策略

飞牛NAS默认使用 logrotate 工具进行日志轮转,但默认配置往往不够激进。我们可以通过修改配置文件来加强轮转频率和压缩策略。

编辑日志轮转主配置文件:

sudo nano /etc/logrotate.conf

找到或添加以下关键参数:

daily           # 每日轮转
rotate 7        # 保留7份历史日志
compress        # 压缩旧日志为.gz格式
delaycompress   # 延迟压缩,保留最近一份未压缩
missingok       # 日志缺失时不报错
notifempty      # 日志为空则不轮转

保存后,我们还需要为飞牛系统的特定日志设置独立的轮转规则。创建自定义配置文件:

sudo nano /etc/logrotate.d/fnos

写入以下内容:

/var/log/fnos/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    maxsize 100M
}

/var/log/syslog /var/log/auth.log /var/log/kern.log {
    weekly
    rotate 4
    compress
    delaycompress
    missingok
}

maxsize 100M 表示即使未到轮转周期,只要单个日志超过100MB也会强制轮转。配置完成后,可以手动测试轮转效果:

sudo logrotate -d /etc/logrotate.conf

-d 参数为调试模式,仅显示执行过程而不实际运行。确认无误后,去掉 -d 参数正式执行一次。

第三步:限制Docker容器日志大小

如果你使用了飞牛NAS中的Docker套件,容器日志的管理至关重要。最有效的方法是在创建容器时指定日志驱动参数。在 docker rundocker-compose.yml 中添加:

logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

对于已经运行的容器,可以修改其配置文件。首先查看容器ID:

docker ps --format "{{.ID}} {{.Names}}"

然后编辑容器的 hostconfig.json

sudo nano /var/lib/docker/containers/{容器ID}/hostconfig.json

找到 "LogConfig" 字段,将其修改为:

"LogConfig": {
    "Type": "json-file",
    "Config": {
        "max-size": "10m",
        "max-file": "3"
    }
}

修改后需要重启Docker服务(注意这会短暂中断所有容器):

sudo systemctl restart docker

第四步:手动清理现有日志

对于已经产生的臃肿日志,我们需要立即手动清理。最安全的清理方式不是删除文件,而是将文件内容清空,这样不会影响正在写入日志的进程。

# 清空所有轮转后的压缩日志(保留最新一份)
sudo find /var/log -name "*.gz" -delete

# 清空当前正在写入的日志文件内容
sudo truncate -s 0 /var/log/syslog /var/log/auth.log /var/log/kern.log

# 清空所有飞牛应用日志
sudo find /var/log/fnos -name "*.log" -exec truncate -s 0 {} \;

对于Docker容器日志,同样使用 truncate 而非 rm

sudo truncate -s 0 /var/lib/docker/containers/*/*.log

如果你确定某些日志不再需要,也可以直接删除文件,但请务必确认对应的服务不会因日志文件缺失而报错。对于飞牛系统日志,建议始终使用 truncate

第五步:设置自动清理计划

为了免去手动维护的烦恼,我们可以将清理命令封装为脚本,并通过cron定时执行。创建一个清理脚本:

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

脚本内容如下:

#!/bin/bash
# 飞牛NAS日志自动清理脚本

# 1. 删除超过7天的压缩日志
find /var/log -name "*.gz" -mtime +7 -delete

# 2. 清空核心系统日志
truncate -s 0 /var/log/syslog /var/log/auth.log /var/log/kern.log

# 3. 清空飞牛应用日志
find /var/log/fnos -name "*.log" -exec truncate -s 0 {} \;

# 4. 清空Docker容器日志
truncate -s 0 /var/lib/docker/containers/*/*.log

# 5. 强制进行日志轮转
/usr/sbin/logrotate -f /etc/logrotate.conf

# 记录本次清理时间
echo "$(date '+%Y-%m-%d %H:%M:%S') 日志清理完成" >> /var/log/fnos_clean.log

赋予执行权限:

sudo chmod +x /usr/local/bin/clean_fnos_logs.sh

然后编辑crontab:

sudo crontab -e

添加每周日凌晨3点执行:

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

进阶技巧:日志分析与预警

除了清理,我们还可以利用 logwatchfail2ban 等工具对日志进行分析。其中 fail2ban 对于检测暴力破解SSH登录特别有用。安装并配置:

sudo apt install fail2ban

配置飞牛SSH保护:

sudo nano /etc/fail2ban/jail.local

写入:

[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600

设置完成后重启服务:

sudo systemctl restart fail2ban

这样当有IP在短时间内连续5次登录失败,将会被自动封禁1小时,极大减少了恶意日志的产生。

总结

飞牛NAS的日志管理并不复杂,关键在于建立“轮转+压缩+定期清理”的三层机制。通过合理配置 logrotate、限制Docker日志大小、编写自动化清理脚本,你可以将日志占用的空间控制在极小范围内,同时保留足够的历史数据用于故障排查。建议每季度检查一次日志目录的实际占用情况,动态调整轮转参数。这套策略不仅能释放存储空间,还能提升系统整体响应速度,让你的飞牛NAS始终保持清爽高效的状态。

💬 评论区
发表评论

暂无评论,来说两句吧