记录一下那天晚上的排查过程。一台跑 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 计数和日志里那句话发现;扩容队列只是缓兵,收敛规则才是根本。这类问题最好一次改到位,反复小改反而容易把原因搅混。
