记录一下那天晚上的排查过程。一台跑 K8s 的 CentOS 7 上 audit 日志里反复出现 audit: backlog limit exceeded,等保抽查时发现整段审计缺口,节点上跑着几百个容器。

原因不止一个,得分开看。规则开得太宽,-w /etc -p wa 和 -w /var 一起上,事件量远超处理能力。少数情况下是backlog_limit 默认只有 320,busy 时排队一满就直接丢事件。

还有一种情况,flush 设成 none,auditd 不等落盘,突发时更容易溢出。

第一件事是看积压与丢弃计数

auditctl -s

临时把队列放大

auditctl -b 8192

永久改配置

在 /etc/audit/auditd.conf 写 backlog_limit = 8192 与 flush = incremental

收敛监控范围

删掉 -w /var 这类大范围规则,只留关键路径

当时还开着另一个排查窗口,两边日志对照着看才定位到。

同一份数据我导出了两份,一份留底,一份拿来试。

怎么算真的好了,看的是同一批现象。auditctl -s 里 lost 为 0、backlog 长期低于 limit 的一半,audit.log 里不再出现 backlog limit exceeded。

提醒一点。audit 丢事件是静默的,只能靠 lost 计数和日志里那句话发现;扩容队列只是缓兵,收敛规则才是根本。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189