核心是让容器日志“不落地、不滞留、可溯源”,通过统一配置Docker全局syslog驱动、rsyslog中央服务器接收路由、补全容器元数据及TLS加密等措施,实现轻量高效、安全合规的集中日志管理。

用 Syslog 协议接入容器集群日志流水线,核心是让容器日志“不落地、不滞留、可溯源”,直接走标准协议发往中心日志服务。它不依赖复杂组件,适合中小规模集群或对资源敏感的生产环境。
一、统一配置 Docker 全局 syslog 驱动
避免逐个容器加 --log-driver=syslog,直接修改 Docker 守护进程配置,一劳永逸:
- 编辑
/etc/docker/daemon.json,写入:
-
syslog-address指向你的 rsyslog 中央服务器(支持 TCP/TLS,推荐 TCP+防火墙白名单) -
rfc5424格式带结构化时间戳、主机名、应用名,利于后续解析 -
tag模板自动注入镜像名和容器名,无需手动打标 - 改完执行
sudo systemctl restart docker生效
二、在中央服务器上配置 rsyslog 接收与路由
rsyslog 不只是“收日志”,更是轻量级日志总线——可按 tag、facility、内容做条件分发:
- 启用 TCP 模块,在
/etc/rsyslog.conf或/etc/rsyslog.d/50-docker.conf中添加:
$InputTCPServerRun 514
- 按容器标签拆分存储(示例:把 nginx 容器日志单独存):
& stop
- 支持正则匹配、字段提取、写入不同文件或转发到 Kafka/ES
- 记得
sudo systemctl restart rsyslog并检查端口监听:ss -tlnp | grep :514
三、确保容器元数据可追溯
原生 syslog 本身不携带 Pod/Namespace 等 Kubernetes 上下文,需在采集层补全:
- 若运行在 K8s,建议用
fluent-bitDaemonSet 替代原生 syslog 驱动——它能自动注入kubernetes.*字段(如 namespace、pod_name、container_name) - 若坚持纯 syslog 方案,可在容器启动时用
--log-opt tag手动注入关键标识,例如:
- 再配合 rsyslog 的
property解析能力(如$!programname),就能在日志行里稳定提取归属信息
四、安全与合规增强(金融/政企场景必选)
基础 syslog 明文传输不满足等保或金标要求,需叠加防护:
- 传输加密:rsyslog 配置 TLS(需证书),Docker 端改用
syslog-address="tcps://..." - 完整性保障:在 rsyslog 后接 Logstash 或自研脚本,对每条日志计算 SM3 哈希并附加签名字段
- 防篡改验证:Kibana 中通过字段比对
sm3_hash与实时重算值,实现“写入即验签”闭环 - 注意:RFC5424 的 structured-data 字段可用于安全地嵌入哈希与签名元数据

















