如何将EC2部署的ECS日志同时转发至Splunk和CloudWatch
ECS EC2启动类型日志同时转发到CloudWatch和Splunk的可行方案
存在完全可落地的实现方案,目前主流有两类适配不同场景的路径:
方案1:AWS原生FireLens + Fluent Bit(ECS官方推荐)
这是AWS官方针对ECS场景提供的日志路由方案,原生支持多目标同时输出:
- 前置准备:可以直接将Fluent Bit作为Sidecar容器和业务容器放在同一个Task定义中,也可以提前在所有ECS EC2节点上预装Fluent Bit Agent
- 配置逻辑:
- 在Task定义的业务容器配置段中,将日志驱动指定为
awsfirelens - 在FireLens配置中同时声明两个输出目标:
- CloudWatch输出:指定输出插件为
cloudwatch,配置对应的日志组名称、AWS区域、日志流前缀即可,会自动继承ECS Task角色的权限推送日志 - Splunk输出:指定输出插件为
splunk,配置你的Splunk HEC(HTTP事件收集器)地址、HEC Token、目标索引名称等参数
- CloudWatch输出:指定输出插件为
- 权限配置:给ECS Task角色开通
logs:CreateLogStream、logs:PutLogEvents等CloudWatch写入权限,同时放通ECS实例到Splunk HEC端口的网络访问权限
- 在Task定义的业务容器配置段中,将日志驱动指定为
- 优势:AWS官方维护,稳定性高,资源开销小,不需要额外改造现有ECS部署逻辑
方案2:通用节点日志代理(适配已有统一日志架构的场景)
如果你已经在EC2节点上部署了统一的日志采集组件(Fluentd、Logstash等),可以直接复用现有架构实现:
- 配置逻辑:
- 在ECS Task定义中,将业务容器的日志输出到EC2节点的本地指定目录,或者直接输出到stdout由节点上的采集Agent默认采集
- 在节点日志Agent的配置中,新增匹配ECS日志的规则,同时配置CloudWatch和Splunk两个输出端
- 对应配置Agent的IAM权限和Splunk访问权限即可
- 优势:可以和EC2节点上其他非ECS业务的日志采集规则统一维护,适合已有统一日志规范的场景
效果验证
配置完成后写入一条带特殊标识的测试日志,分别在CloudWatch对应日志组、Splunk对应索引中检索,确认日志内容、时间戳完全一致即配置生效。
内容的提问来源于stack exchange,提问作者Shashank
相关产品推荐
相关产品推荐

