系统优化

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

2026-07-30 3 admin

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

一、为什么要管理日志?

飞牛NAS作为日常存储和服务的核心设备,长时间运行后日志文件会不断累积。这些日志记录了系统运行状态、应用访问记录、错误信息等,但如果不加以管理,会出现以下问题:

  • 占用存储空间:日志文件可能膨胀到数GB甚至更大,挤占数据盘空间
  • 影响磁盘性能:大量小文件日志可能导致文件系统碎片化
  • 隐私风险:长期保留的访问日志可能包含敏感信息
  • 排查困难:日志文件过多时,查找关键错误信息如同大海捞针

因此,建立合理的日志管理与清理策略,是每个飞牛NAS用户必须要掌握的技能。

二、飞牛NAS日志体系

飞牛NAS基于Debian Linux,日志系统遵循标准Linux日志结构,主要分布在以下位置:

日志路径 说明
/var/log/syslog 系统综合日志
/var/log/auth.log 认证/登录日志
/var/log/kern.log 内核日志
/var/log/nginx/ 飞牛Web管理界面访问日志
/var/log/php-fpm/ 后端服务日志
/volume1/@appstore/ 应用商店安装的应用日志

三、查看当前日志状态

首先登录飞牛NAS的SSH终端:

# 查看日志目录整体占用
du -sh /var/log/

# 查看各日志文件大小
du -sh /var/log/*

# 统计日志文件数量
ls -l /var/log/ | wc -l

# 查看最近10条系统日志
tail -10 /var/log/syslog

正常状态下,/var/log/ 目录应在数百MB以内。如果超过1GB,说明需要清理。

四、手动清理日志

4.1 清理系统日志

# 清空syslog(保留文件但不删除)
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/auth.log
sudo truncate -s 0 /var/log/kern.log

# 删除历史轮转日志(保留最新1个)
sudo find /var/log -name "*.log.*" -type f -delete
sudo find /var/log -name "*.gz" -type f -delete

4.2 清理Nginx日志

飞牛Web界面日志通常较大:

# 查看Nginx日志大小
ls -lh /var/log/nginx/

# 清空访问日志
sudo truncate -s 0 /var/log/nginx/access.log
sudo truncate -s 0 /var/log/nginx/error.log

# 删除旧轮转日志
sudo rm -f /var/log/nginx/*.log.*

4.3 清理应用日志

飞牛应用商店安装的应用日志通常存储在各自目录:

# 查看应用日志占用
du -sh /volume1/@appstore/*/logs/

# 清理指定应用日志(以Jellyfin为例)
sudo truncate -s 0 /volume1/@appstore/jellyfin/logs/*.log

五、配置自动日志轮转

手动清理治标不治本,我们需要配置logrotate实现自动管理。

5.1 检查现有配置

# 查看logrotate配置文件
cat /etc/logrotate.conf
ls /etc/logrotate.d/

飞牛NAS默认包含部分基础配置,但往往不够精细。

5.2 创建全局日志轮转策略

# 编辑全局配置文件
sudo nano /etc/logrotate.d/fnnas

写入以下内容:

/var/log/syslog
/var/log/auth.log
/var/log/kern.log
/var/log/nginx/*.log
{
    rotate 4
    weekly
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

参数说明: - rotate 4:保留4个轮转备份 - weekly:每周轮转一次 - compress:轮转后压缩为.gz文件 - delaycompress:延迟压缩,保留一份未压缩的

5.3 添加应用日志轮转

sudo nano /etc/logrotate.d/apps

以Jellyfin为例:

/volume1/@appstore/jellyfin/logs/*.log
{
    rotate 2
    daily
    size 100M
    missingok
    notifempty
    compress
    copytruncate
}

copytruncate参数特别重要——它不会删除原始日志文件,而是复制后清空,保证应用不中断写入。

5.4 测试轮转配置

# 测试配置语法
sudo logrotate -d /etc/logrotate.d/fnnas

# 强制执行一次轮转
sudo logrotate -f /etc/logrotate.d/fnnas

# 检查执行结果
ls -lh /var/log/

六、设置日志归档与清理计划

除了logrotate,我们还可以通过cron定时任务补充清理策略。

6.1 创建清理脚本

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

写入:

#!/bin/bash
# 飞牛NAS日志清理脚本
# 清理超过30天的日志文件

LOG_DIR="/var/log"
DAYS=30

echo "[$(date)] 开始日志清理..."

# 清理旧日志文件
find $LOG_DIR -type f -name "*.log.*" -mtime +$DAYS -delete
find $LOG_DIR -type f -name "*.gz" -mtime +$DAYS -delete

# 确保主要日志文件存在且不为空
for log in syslog auth.log kern.log; do
    if [ ! -f "$LOG_DIR/$log" ]; then
        touch "$LOG_DIR/$log"
    fi
done

# 清理journal日志(如果有)
if command -v journalctl &> /dev/null; then
    journalctl --vacuum-time=2weeks
fi

echo "[$(date)] 日志清理完成"

赋予执行权限:

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

6.2 添加cron任务

# 编辑crontab
sudo crontab -e

添加以下行(每月1日凌晨3点执行):

0 3 1 * * /usr/local/bin/clean_logs.sh > /var/log/clean_logs.log 2>&1

七、日志优化最佳实践

7.1 调整日志级别

对于无需调试的环境,可以降低某些服务的日志级别:

# 查看rsyslog配置
cat /etc/rsyslog.conf

# 编辑配置文件,降低记录级别
sudo nano /etc/rsyslog.d/50-default.conf

例如,将*.info改为*.notice可以减少大量info级日志。

7.2 启用日志压缩

确保logrotate配置中启用了compress,轮转后的日志自动压缩,可节省约80%空间。

7.3 监控日志大小

通过飞牛NAS的通知系统或自定义监控脚本,当日志目录超过阈值时发送告警:

# 简单阈值检测示例
LOG_SIZE=$(du -sm /var/log | cut -f1)
if [ $LOG_SIZE -gt 500 ]; then
    echo "警告:日志目录超过500MB,请及时清理" | mail -s "NAS日志告警" [email protected]
fi

八、常见问题排查

Q1:日志清理后服务异常?

大多数服务在日志文件被truncate后会自动重建。如果遇到服务异常,重启对应服务即可:

sudo systemctl restart rsyslog
sudo systemctl restart nginx

Q2:logrotate未按预期执行?

检查logrotate状态和定时任务:

# 查看logrotate状态
sudo cat /var/lib/logrotate/status

# 手动执行并查看详细输出
sudo logrotate -v /etc/logrotate.conf

Q3:journald日志占用过高?

如果系统使用systemd-journald,其日志可能独立于传统日志文件:

# 查看journal占用
journalctl --disk-usage

# 限制最大使用量(保留200MB)
sudo journalctl --vacuum-size=200M

九、总结

通过本文的日志管理与清理策略,你可以:

  1. 立即清理:使用truncatefind命令释放当前占用的空间
  2. 自动轮转:配置logrotate实现日志的自动压缩和归档
  3. 定期清理:通过cron脚本自动删除过期日志 4