首页/安全/等保与合规速查/容器与 K8s 日志:采集与审计策略

容器与 K8s 日志:采集与审计策略

容器日志随生命周期销毁,必须集中采集;K8s 集群还应开启 API 审计日志(audit policy)以记录对集群的关键操作。

等保与合规速查安全更新于 2026-10-13

容器日志为什么容易丢

容器与 Pod 是短生命周期对象:容器重建、Pod 调度到别的节点,本地日志文件随之消失。因此容器日志必须集中采集,不能依赖节点上的本地文件做留存。除应用日志外,Kubernetes 集群还应开启 API 审计日志,记录对集群的关键操作,否则谁改过 RBAC、谁看过 Secret 这类问题无法回答。

基本信息

适用平台Docker 与 Kubernetes 集群(Linux 节点)
采集方式每个节点部署 DaemonSet(Fluent Bit / Vector / Filebeat)
驱动限制Docker json-file 配置 max-size 与 max-file 防止写满磁盘
K8s 审计kube-apiserver 审计策略文件与审计日志参数
托管集群云厂商托管集群的审计日志通常需在控制台另行开启

典型使用场景

  • 故障排查:容器重建后仍能按时间还原现场
  • 集群合规:审计对 Secret、RBAC 与工作负载的访问
  • 入侵溯源:结合节点日志定位异常容器启动与命令执行
  • 容量控制:限制单容器日志体积,避免节点磁盘耗尽
  • 多集群汇聚:统一到集中平台做关联检索

节点与采集配置

节点与采集配置
# Docker 驱动限制单文件大小与数量,防止写满磁盘
# /etc/docker/daemon.json
{"log-driver": "json-file", "log-opts": {"max-size": "100m", "max-file": "5"}}
# K8s 使用 DaemonSet 采集(Fluent Bit / Vector)到集中平台
kubectl -n logging get ds            # 确认每个节点都有采集实例
kubectl -n logging logs ds/fluent-bit --tail=50   # 查看采集器自身日志

API 审计(kube-apiserver 参数示例)

API 审计(kube-apiserver 参数示例)
--audit-policy-file=/etc/kubernetes/audit-policy.yaml
--audit-log-path=/var/log/kubernetes/audit.log
--audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100
# 策略级别:None < Metadata < Request < RequestResponse
# 建议:secrets、configmaps 等敏感资源只记 Metadata

审计级别与代价

级别记录内容代价
None不记录该请求无
Metadata记录元数据,不含请求与响应体低,敏感资源常用
Request记录请求体中,注意敏感字段
RequestResponse记录请求与响应体高,日志量大且可能含敏感内容

采集方案取舍

  • DaemonSet 采集:每节点一个采集实例,适合通用日志与主机日志
  • Sidecar 采集:把采集容器与业务容器同 Pod 部署,适合多租户或日志格式特殊的场景
  • 节点日志目录挂载:直接读 /var/log/containers 下的软链接,实现简单
  • 托管集群方案:云厂商提供的日志服务,需确认字段口径与留存周期
  • 共同前提:先统一时间与时区,再做跨源关联
审计级别配置过高会产生大量日志并写入敏感内容;按资源与动词精细配置,例如让 secrets 只记录 Metadata 级别。

易错点

  • 容器重建日志即丢:不上集中采集时,日志随对象销毁无法溯源
  • 节点本地日志不设上限:单容器刷屏可能写满节点磁盘,影响其他工作负载
  • 审计策略全量 RequestResponse:成本与敏感内容风险都很高
  • 只部署采集器不看采集器日志:采集失败时日志静默中断,无人察觉

数据来源与参考

  • Kubernetes 官方文档(审计)
  • Docker 官方文档(logging drivers)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌