auditd日志过快增长时,核心靠rate_limit限频+max_log_file_action与num_logs自动轮转清理,而非仅依赖logrotate;rate_limit=50限制每秒50条,flush=incremental_async缓解I/O,max_log_file=10MB、num_logs=6实现轮转归档,compress=yes可压缩节省空间。

auditd 日志增长过快时,核心要靠 rate_limit 控制写入频率 + max_log_file_action + num_logs 实现自动轮转与归档清理,而非仅依赖 logrotate。
rate_limit:限制每秒日志条目数(防突发刷爆磁盘)
在 /etc/audit/auditd.conf 中设置:
# 允许每秒最多写入 50 条 audit 日志(默认 0 = 不限) rate_limit = 50触发限流时记录警告(便于监控识别是否被限速)
flush = incremental_async freq = 20
说明:
• 值设为 0 表示不限速,生产环境不建议;
• 50~200 是常见合理范围,具体需结合业务审计粒度(如只审 exec、user_login 等关键事件,可设低些);
• 配合 flush = incremental_async 可缓解 I/O 压力。
log_file & rotation:本地日志文件大小与轮转策略
同样在 /etc/audit/auditd.conf 中配置:
# 单个日志文件最大 10MB(避免单文件过大难分析) max_log_file = 10达到 max_log_file 后,自动轮转并保留 6 个历史文件(含当前)
num_logs = 6
轮转动作:rotate(重命名旧日志,生成新文件),非 ignore/suspend/syslog
max_log_file_action = rotate
可选:轮转前压缩旧日志(节省空间,需 auditd ≥ 3.0 且编译支持 zlib)
compress = yes
说明:
• num_logs = 6 意味着最多占用约 6 × 10MB = 60MB 磁盘(未压缩);
• 若启用 compress = yes,实际磁盘占用通常下降 60%~90%,但会略增 CPU 开销;
• max_log_file_action = rotate 是安全选项,suspend 会导致审计中断,应避免。
logrotate 补充:仅用于归档后压缩或异地备份(非主控手段)
auditd 自带轮转能力,logrotate 仅作辅助。若需对已轮转的 audit.log.* 进一步压缩或清理,可配 /etc/logrotate.d/auditd:
/var/log/audit/audit.log* {
weekly
missingok
compress
delaycompress
notifempty
create 0600 root root
sharedscripts
postrotate
# 通知 auditd 重新打开日志(仅对主文件有效,轮转文件无需)
if systemctl is-active --quiet auditd; then
kill -USR1 $(cat /var/run/auditd.pid 2>/dev/null) 2>/dev/null || true
fi
endscript
}
注意:
• 不要对 /var/log/audit/audit.log 本身用 logrotate 的 rotate 或 copytruncate,会干扰 auditd 自身轮转逻辑;
• 仅作用于带数字后缀的归档文件(如 audit.log.1, audit.log.2.gz);
• postrotate 中的 kill -USR1 是可选的,auditd 通常能自行管理主文件句柄。
验证与调试关键点
修改后必须重启服务并确认生效:
- 执行
sudo systemctl restart auditd - 检查状态:
sudo auditctl -s | grep rate(显示当前 rate_limit) - 查看日志路径与大小限制:
sudo auditctl -s | grep "log file\|num logs" - 手动触发轮转测试:
sudo auditctl -e 2 && sudo auditctl -e 1(先锁再解锁,强制 flush 并可能触发轮转) - 观察
/var/log/audit/下文件数量与大小变化(注意权限:属主 root:root,600)










