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

关于AWS ECS中通过AWS OpenTelemetry Collector Sidecar采集服务原生OpenTelemetry日志至CloudWatch的配置指引咨询

AWS ECS中通过AWS OpenTelemetry Collector Sidecar采集服务原生OpenTelemetry日志至CloudWatch的配置指引咨询

嗨,我完全懂你的困扰!通过ECS控制台默认勾选的「追踪采集」「指标采集」确实只会给侧车配置对应的数据管道,日志部分默认是没开启原生OTLP日志接收的——控制台里的「日志采集」选项确实只是抓容器stdout/stderr,完全满足不了你需要保留日志属性和完整多行结构的需求。不过别担心,AWS OTel Collector是支持原生OTLP日志采集的,只是需要手动自定义配置来开启。

下面是具体的配置步骤:

1. 编写自定义OpenTelemetry Collector配置文件

你需要创建一个包含日志采集管道的YAML配置文件,比如otel-collector-config.yaml,示例如下:

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318

processors:
  batch:

exporters:
  # 保留原有的追踪导出到X-Ray
  awsxray:
    region: "你的AWS区域"
  # 保留原有的指标导出到CloudWatch EMF
  awsemf:
    region: "你的AWS区域"
    namespace: "你的服务指标命名空间"
  # 新增日志导出到CloudWatch
  awscloudwatchlogs:
    region: "你的AWS区域"
    log_group_name: "/ecs/你的服务名称-otel-logs"
    log_stream_name: "{container_id}"
    # 允许自动创建日志组(如果不存在)
    create_log_group: true

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [awsxray]
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [awsemf]
    # 新增日志处理管道
    logs:
      receivers: [otlp]
      processors: [batch]
      exporters: [awscloudwatchlogs]

2. 将配置文件部署到ECS

因为你是通过控制台部署的任务,有两种方式加载这个自定义配置:

  • 方式一:S3托管配置

    1. 把上面的YAML文件上传到你的S3存储桶中,比如s3://你的存储桶名称/otel-config/otel-collector-config.yaml
    2. 给ECS任务执行角色添加S3读取权限(s3:GetObject),以及CloudWatch日志写入权限(logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents)
    3. 在ECS任务定义中,找到AWS OTel Collector侧车容器,添加环境变量:
      • 键:AOT_CONFIG_S3_PATH
      • 值:s3://你的存储桶名称/otel-config/otel-collector-config.yaml
  • 方式二:直接通过环境变量传入配置
    如果配置内容不长,可以直接把YAML内容转义后作为环境变量AOT_CONFIG_CONTENT的值传入,但这种方式在配置复杂时容易出错,更推荐用S3托管。

3. 确认服务日志发送配置

确保你的Web服务依然将OpenTelemetry日志发送到侧车的localhost:4317(gRPC协议)或localhost:4318(HTTP协议),和配置文件中接收器的监听端口一致。

关键注意事项

  • 任务执行角色的权限一定要配置齐全,否则Collector会无法读取配置或者无法写入CloudWatch日志
  • 日志组名称可以根据你的需求自定义,log_stream_name用{container_id}可以区分不同容器的日志
  • 配置生效后,你在CloudWatch日志中看到的每条日志都会包含完整的OpenTelemetry属性(比如attributes字段),多行日志也会作为单个条目存在,完全保留你服务输出的日志上下文

这样调整后,你的服务原生的OpenTelemetry日志就能正确通过侧车Collector导入CloudWatch啦!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:53:12