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

无法通过AWS Distro for OpenTelemetry采集Spring Boot应用指标

ECS Fargate中ADOT采集Spring Boot Actuator/Prometheus接口返回404问题排查

将Spring Boot应用部署在AWS ECS Fargate集群,以Sidecar方式部署ADOT Collector容器,计划通过ADOT采集ECS指标和Spring应用的Prometheus指标(应用在8080端口暴露/actuator/prometheus接口),并导入Amazon Managed Service for Prometheus。但ADOT采集Spring应用接口时返回404 Not Found错误,尽管接口实际存在。


相关配置

ADOT Collector配置(adot.config.yaml)

receivers:
  prometheus:
    config:
      global:
        scrape_interval: 15s
        scrape_timeout: 10s
      scrape_configs:
      - job_name: "prometheus"
        static_configs:
        - targets: [ 0.0.0.0:9090 ]
      - job_name: "my-spring-app"
        metrics_path: "actuator/prometheus"
        static_configs:
        - targets: [ 0.0.0.0:8080 ]

  awsecscontainermetrics:
    collection_interval: 10s
processors:
  filter:
    metrics:
      include:
        match_type: strict
        metric_names:
          - ecs.task.memory.utilized
          - ecs.task.memory.reserved
          - ecs.task.cpu.utilized
          - ecs.task.cpu.reserved
          - ecs.task.network.rate.rx
          - ecs.task.network.rate.tx
          - ecs.task.storage.read_bytes
          - ecs.task.storage.write_bytes
exporters:
  prometheusremotewrite:
    endpoint: https://xxx/remote_write
    auth:
      authenticator: sigv4auth
  logging:
    loglevel: info
extensions:
  health_check:
  pprof:
    endpoint: :1888
  zpages:
    endpoint: :55679
  sigv4auth:
    region: us-west-2
    service: aps
    assume_role:
      arn:
      sts_region: eu-west-2
service:
  extensions: [pprof, zpages, health_check, sigv4auth]
  telemetry:
    logs:
      level: debug
  pipelines:
    metrics:
      receivers: [prometheus]
      exporters: [logging, prometheusremotewrite]
    metrics/ecs:
      receivers: [awsecscontainermetrics]
      processors: [filter]
      exporters: [logging, prometheusremotewrite]

ECS任务定义

{
  "family": "adot-prom",
  "networkMode": "awsvpc",
  "containerDefinitions": [
    {
      "name": "adot-collector",
      "image": "account_id.dkr.ecr.region.amazonaws.com/image-tag",
      "essential": true,
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-adot-collector",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    },
    {
      "name": "prometheus",
      "image": "prom/prometheus:main",
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-prom",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "ecs",
          "awslogs-create-group": "True"
        }
      }
    },
    {
      "name": "my-spring-app",
      "image": "ecr repo url",
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/ecs-app",
          "awslogs-region": "my-region",
          "awslogs-stream-prefix": "app",
          "awslogs-create-group": "True"
        },
        "portMappings": [{
          "containerPort": 8080
        }]
      }
    }
  ],
  "requiresCompatibilities": [
    "FARGATE"
  ],
  "cpu": "1024"
}

错误信息

debug scrape/scrape.go:1353 Scrape failed {"kind": "receiver", "name": "prometheus", "data_type": "metrics", "scrape_pool": "prometheus", "target": "http://0.0.0.0:8080/actuator/prometheus", "error": "server returned HTTP status 404 Not Found", "errorVerbose": "server returned HTTP status 404 Not Found\ngithub.com/prometheus/prometheus/scrape.(*targetScraper).scrape\n\tgithub.com/prometheus/prometheus@v0.43.0/scrape/scrape.go:817\ngithub.com/prometheus/prometheus/scrape.(*scrapeLoop).scrapeAndReport\n\tgithub.com/prometheus/prometheus@v0.43.0/scrape/scrape.go:1340\ngithub.com/prometheus/prometheus/scrape.(*scrapeLoop).run\n\tgithub.com/prometheus/prometheus@v0.43.0/scrape/scrape.go:1264\nruntime.goexit\n\truntime/asm_amd64.s:1598"}

问题排查与解决方案

1. 修正容器间访问目标(核心修复)

在ECS Fargate的awsvpc网络模式下,同一任务内的容器共享网络命名空间,但0.0.0.0指向ADOT Collector容器自身的端口,而非Spring应用容器的端口。需将目标地址改为Spring应用的容器名称:

修改ADOT配置中my-spring-app任务的target:

- job_name: "my-spring-app"
  metrics_path: "actuator/prometheus"
  static_configs:
  - targets: [ "my-spring-app:8080" ]

2. 验证Spring应用接口可用性

进入ADOT Collector容器内部,执行curl命令测试连通性:

curl http://my-spring-app:8080/actuator/prometheus

若返回404,需检查:

  • Spring应用是否引入依赖:确保spring-boot-starter-actuator和micrometer-registry-prometheus已添加到项目依赖
  • Spring配置是否正确暴露端点:
    management.endpoints.web.exposure.include=prometheus
    management.endpoint.prometheus.enabled=true
    

3. 检查容器启动状态

  • 查看Spring应用日志,确认是否正常启动并监听8080端口(日志中应有Tomcat started on port(s): 8080字样)
  • 确认任务定义中Spring应用的containerPort配置为8080,无需映射到主机端口(同一任务内容器直接通过容器端口访问)

4. 清理无效配置

ADOT配置中针对0.0.0.0:9090的Prometheus任务无效(任务中Prometheus容器未暴露9090端口),可删除该配置以避免冗余错误日志。


内容的提问来源于stack exchange,提问作者Abhi.G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:35:20