Filebeat在Ubuntu上的日志轮转策略
Filebeat本身不直接处理日志文件的轮转(如分割、压缩),其设计定位是高效收集、转发日志,日志轮转通常由操作系统工具(如logrotate)或系统日志服务(如rsyslog/syslog-ng)完成。以下是Ubuntu系统上配置Filebeat日志轮转的常见方法及详细步骤:
logrotate是Ubuntu系统自带的日志管理工具,支持按时间/大小轮转、压缩、删除旧日志等功能,与Filebeat配合可实现完善的日志生命周期管理。
Ubuntu系统通常预装logrotate,可通过以下命令确认:
dpkg -l | grep logrotate
若未安装,执行:
sudo apt update && sudo apt install logrotate
在/etc/logrotate.d/目录下创建filebeat配置文件(如/etc/logrotate.d/filebeat),内容如下:
/var/log/filebeat/*.log {
daily # 每天轮转一次(可选:weekly/monthly)
missingok # 若日志文件不存在,不报错
rotate 7 # 保留最近7个轮转文件(可根据存储空间调整)
compress # 使用gzip压缩旧日志(节省空间)
delaycompress # 延迟压缩(如第8个文件才压缩第1个,避免压缩当天日志)
notifempty # 若日志为空,不进行轮转
create 640 root adm # 轮转后创建新文件,权限640,属主root,属组adm
sharedscripts # 所有日志轮转完成后统一执行postrotate脚本
postrotate # 轮转后通知Filebeat重新打开日志文件(避免丢失日志)
if [ -f /var/run/filebeat/filebeat.pid ]; then
kill -USR1 $(cat /var/run/filebeat/filebeat.pid)
fi
endscript
}
配置说明:
daily:轮转频率(可根据需求改为weekly/monthly);rotate 7:保留7个旧日志文件(避免无限增长);compress + delaycompress:平衡压缩效率与日志可用性;postrotate:通过kill -USR1向Filebeat进程发送信号,使其释放旧日志文件的句柄,确保后续日志能正常写入新文件。手动执行以下命令,验证配置是否正确:
sudo logrotate -vf /etc/logrotate.d/filebeat
-v:显示详细执行过程;-f:强制立即轮转(而非等待定时任务)。Ubuntu的logrotate默认由cron.daily每日执行(路径:/etc/cron.daily/logrotate),无需额外配置。可通过以下命令查看cron任务:
cat /etc/cron.daily/logrotate
确认包含logrotate /etc/logrotate.conf语句(/etc/logrotate.conf是logrotate的主配置文件,会加载/etc/logrotate.d/下的子配置)。
若需直接控制Filebeat自身日志(如/var/log/filebeat/filebeat.log)的轮转,可通过修改Filebeat配置文件(/etc/filebeat/filebeat.yml)实现,但不推荐用于收集的外部日志(仅适用于Filebeat自身日志)。
在filebeat.yml中添加logging.file部分,示例如下:
logging.level: info # 日志级别(info/debug/warning/error)
logging.to_files: true # 启用文件日志(默认true)
logging.files:
path: /var/log/filebeat # 日志文件路径
name: filebeat.log # 日志文件名
keepfiles: 7 # 保留最近7个日志文件
permissions: "640" # 文件权限
rotation.period: 24h # 轮转周期(24小时)
rotation.max_size: 100MB # 单个日志文件最大大小(可选,触发轮转的条件之一)
说明:
/var/log/syslog)的轮转。修改配置后,重启Filebeat使生效:
sudo systemctl restart filebeat
若系统使用systemd(Ubuntu 16.04及以上默认使用),可通过journalctl集中管理Filebeat日志,无需单独配置轮转。但需调整Filebeat的服务配置,将日志输出到journald:
sudo mkdir -p /etc/systemd/system/filebeat.service.d/
sudo nano /etc/systemd/system/filebeat.service.d/override.conf
添加以下内容:
[Service]
StandardOutput=journal+console
StandardError=journal+console
SyslogIdentifier=filebeat
保存后,重新加载systemd配置并重启Filebeat:
sudo systemctl daemon-reload
sudo systemctl restart filebeat
此时,Filebeat日志可通过journalctl查看:
journalctl -u filebeat -f # 实时查看Filebeat日志
/var/log/filebeat/目录存在,且Filebeat进程有权限写入(通常属主为root,属组为adm);logrotate配置中的paths(如/var/log/filebeat/*.log)需与Filebeat配置中的filebeat.inputs.paths一致,避免漏轮转;daily或weekly);