You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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:*"
        }
    ]
}

验证步骤

  1. 启动ECS任务后,查看Fluent Bit容器日志,确认无文件读取或权限报错
  2. 登录CloudWatch控制台,检查目标日志组是否有catalina-*.log的日志流入
  3. 若日志未出现,排查卷挂载路径是否匹配、Fluent Bit的Path配置是否正确、IAM权限是否生效

内容的提问来源于stack exchange,提问作者kc7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:18:29