无法用 Docker 日志驱动直连 Kafka 采集安全审计日志,因 Docker --log-driver 仅处理 stdout/stderr,不支持 auditd 日志、Docker daemon 审计事件等内核级日志;应使用 Filebeat 或 Fluent Bit 直接采集 /var/log/audit/audit.log 并输出至 Kafka。

在 Docker 中无法直接为单个容器配置独立日志驱动将安全审计日志(如 auditd 日志或容器运行时审计事件)直连 Kafka,因为 Docker 原生日志驱动(json-file、syslog、fluentd 等)只处理 容器标准输出/错误(stdout/stderr),不采集内核级审计日志(如 /var/log/audit/audit.log)或 Docker daemon 的审计事件。
明确日志来源:安全审计日志 ≠ 容器日志
安全审计日志通常来自:
-
Linux audit subsystem(auditd 服务生成的
/var/log/audit/audit.log) -
Docker daemon 的 audit event logging(需启用
audit=1内核参数并配置 audit rules) - 容器内应用主动写入的审计日志(如应用调用 syslog 或写文件)
Docker 的 --log-driver 仅对 docker run 启动的进程的标准输出生效,对上述三类审计日志均无感知。因此,“用 Docker 日志驱动对接 Kafka”这条路走不通——必须绕过 Docker 日志系统,改用专用审计日志采集方案。
推荐方案:用 Filebeat + Kafka Output 采集 audit.log
这是生产环境最常用、最可靠的方式。Filebeat 轻量、支持 tail、支持 TLS/认证、原生支持 Kafka 输出。
- 确保宿主机已开启 auditd,并生成
/var/log/audit/audit.log - 在宿主机部署 Filebeat(不建议跑在容器里,因需读取 host path 且要稳定运行)
- 配置
filebeat.yml:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/audit/audit.log
fields:
log_type: audit_log
fields_under_root: true
<p>output.kafka:
hosts: ["kafka-broker1:9092", "kafka-broker2:9092"]
topic: "security-audit-log"
required_acks: 1
compression: gzip
max_message_bytes: 1000000</p>启动后,Filebeat 会实时 tail audit.log 并转发到 Kafka 指定 topic。
进阶:采集 Docker daemon 审计事件(需内核 & auditd 配合)
Docker daemon 自身不产生结构化审计日志,但可通过 Linux audit 规则捕获其系统调用:
- 添加 audit rule(持久化写入
/etc/audit/rules.d/docker.rules):
-w /usr/bin/dockerd -p x -k docker-exec -a always,exit -F arch=b64 -S execve -F path=/usr/bin/docker -k docker-cli -a always,exit -F arch=b64 -S execve -F path=/usr/bin/runc -k container-runtime
重启 auditd:sudo systemctl restart auditd;这些事件也会写入 audit.log,因此仍由上述 Filebeat 统一采集,无需额外组件。
替代方案:使用 Fluent Bit(轻量、可容器化部署)
若必须容器化部署采集器,可用 Fluent Bit(比 Fluentd 更轻):
- 挂载宿主机
/var/log/audit/和/proc/(部分插件需要) - 启用
tail输入插件 +kafka输出插件 - 注意:Fluent Bit Kafka 插件需 v2.1+,且推荐用 SASL_SSL 认证连接生产 Kafka
示例配置片段:
[INPUT]
Name tail
Path /var/log/audit/audit.log
Parser docker
Tag audit.*
<p>[OUTPUT]
Name kafka
Match audit.*
Brokers kafka-broker1:9092,kafka-broker2:9092
Topics security-audit-log
Timestamp_Key @timestamp</p>通过 docker run 启动 Fluent Bit 容器时,务必加 -v /var/log/audit:/var/log/audit:ro 和 --privileged(部分场景需读取 /proc)。
不复杂但容易忽略:安全审计日志链路本质是「宿主机内核 → auditd → 文件 → 采集器 → Kafka」,Docker 日志子系统只是旁观者。把采集器(Filebeat/Fluent Bit)当成独立基础设施部署,比强行塞进 Docker 日志驱动更健壮、更可控。



















