如何将ECS Fargate上Tomcat的Catalina日志推送至CloudWatch
ECS Fargate下Tomcat Catalina日志推送CloudWatch解决方案
核心问题定位
默认Docker日志驱动仅捕获容器stdout/stderr输出,而Tomcat的catalina-*.log是写入容器本地文件系统的,因此需要通过日志采集工具主动读取这些文件并转发至CloudWatch。以下是经过验证的Fluent Bit落地配置(你尝试过的Firelens本质基于Fluent Bit,也可参考此逻辑调整)
方案1:Tomcat日志双输出(简化采集)
修改Tomcat容器内的conf/logging.properties,让Catalina日志同时输出到文件和stdout,这样默认日志驱动或Firelens可直接捕获,无需额外文件监听:
# 保留原文件输出配置 1catalina.org.apache.juli.FileHandler.level = FINE 1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.FileHandler.prefix = catalina. 1catalina.org.apache.juli.FileHandler.suffix = .log # 追加ConsoleHandler,将日志输出到stdout org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler
你可以将修改后的logging.properties通过卷挂载替换Tomcat默认配置,或直接构建自定义Tomcat镜像。
方案2:Fluent Bit Sidecar采集文件日志
如果必须保留文件日志的独立采集,可通过Sidecar容器挂载日志目录,用Fluent Bit监听并转发:
1. 任务定义卷配置
在ECS任务定义中添加共享卷,将Tomcat的日志目录挂载到Fluent Bit容器:
- 卷类型:
emptyDir(Fargate环境推荐) - Tomcat容器挂载路径:
/usr/local/tomcat/logs - Fluent Bit容器挂载路径:
/tomcat-logs
2. Fluent Bit容器配置
使用AWS官方维护的Fluent Bit镜像:public.ecr.aws/aws-observability/aws-for-fluent-bit:stable,并挂载自定义配置文件:
Fluent Bit核心配置文件fluent-bit.conf
[SERVICE] Flush 1 Log_Level info [INPUT] Name tail Tag tomcat.catalina Path /tomcat-logs/catalina-*.log DB /tmp/tomcat-catalina-tracking.db Parser docker Mem_Buf_Limit 5MB Skip_Long_Lines On [FILTER] Name parser Match tomcat.catalina Parser tomcat-catalina Key_Name message [OUTPUT] Name cloudwatch Match tomcat.catalina region us-east-1 # 替换为你的AWS区域 log_group_name /ecs/tomcat-springboot/catalina log_stream_prefix fargate-task- auto_create_group true [PARSER] Name tomcat-catalina Format regex Regex ^(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3})\s+(\w+)\s+(.*)$
3. IAM权限配置
确保ECS任务执行角色拥有CloudWatch日志写入权限,添加以下IAM策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:/ecs/tomcat-springboot/catalina:*" } ] }
验证步骤
- 启动ECS任务后,查看Fluent Bit容器日志,确认无文件读取或权限报错
- 登录CloudWatch控制台,检查目标日志组是否有
catalina-*.log的日志流入 - 若日志未出现,排查卷挂载路径是否匹配、Fluent Bit的
Path配置是否正确、IAM权限是否生效
内容的提问来源于stack exchange,提问作者kc7
相关产品推荐
相关产品推荐

