配置一体化WAZUH日志保留时长的技术咨询
配置一体化WAZUH日志保留时长的技术咨询
嘿,针对你这种没装Elastic/Kibana的WAZUH一体化部署,要设置40天的日志保留,主要得搞定两类日志:WAZUH自身的运行日志,还有告警日志。下面是我整理的实操步骤,都是实测有效的:
1. 用logrotate配置日志轮转与删除
WAZUH默认依赖Linux的logrotate工具管理日志文件,咱们直接修改它的配置就能控制保留时长:
- 首先打开WAZUH的logrotate配置文件,一般路径是:
sudo nano /etc/logrotate.d/wazuh - 把文件里的轮转规则改成40天保留的版本,参考配置如下:
注意:如果你的日志轮转频率不是/var/ossec/logs/*.log /var/ossec/logs/alerts/*.log { daily # 每天轮转一次日志文件 rotate 40 # 保留40个轮转后的文件(对应40天) compress # 压缩旧日志节省空间 delaycompress # 延迟压缩,避免影响当前日志写入 missingok # 日志文件不存在时不报错 notifempty # 空日志文件不轮转 create 0640 root wazuh # 新建日志文件的权限与归属 sharedscripts postrotate # 轮转后重启WAZUH服务让配置生效 /var/ossec/bin/ossec-control restart > /dev/null 2>&1 || true endscript }daily(比如原来的是weekly),要调整rotate的数值——比如每周轮转的话,rotate 6就能保留42天,和40天的需求接近。 - 保存退出后,可以手动测试一下配置是否正常:
sudo logrotate -v /etc/logrotate.d/wazuh
2. 数据库告警记录的清理(如果用了WAZUH数据库)
如果你部署时配置了PostgreSQL来存储WAZUH告警(而不是纯文件存储),还得给数据库加个定时清理任务:
- 先写一个SQL清理脚本,比如
/opt/wazuh_clean_old_alerts.sql,内容如下:DELETE FROM alerts WHERE timestamp < NOW() - INTERVAL '40 days'; - 创建定时任务,每天凌晨低峰期执行清理:
运行sudo crontab -e打开定时任务编辑器,添加一行:
这行命令会每天凌晨2点自动删除40天以前的告警记录,避免数据库膨胀。0 2 * * * psql -U wazuh -d wazuh -f /opt/wazuh_clean_old_alerts.sql > /dev/null 2>&1
3. 验证配置是否生效
- 查看logrotate的状态,确认规则已经应用:
sudo logrotate -status - 检查日志目录,看看超过40天的日志是否被自动删除:
如果配置生效,这条命令应该不会返回任何结果(说明没有超过40天的日志文件)。find /var/ossec/logs/ -type f -mtime +40
备注:内容来源于stack exchange,提问作者SSD




