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

Docker环境下Prometheus无法访问Actuator端点问题求助

问题描述

在Docker环境部署Prometheus容器后,无法从其他服务连接到/actuator/prometheus端点,出现两种错误:

Get "http://notification-service:8080/actuator/prometheus": dial tcp 172.24.0.13:8080: connect: connection refused

或者:

server returned HTTP status 404

Prometheus监控截图

另外,直接用容器IP发起curl请求时,初始返回404错误,但几分钟后能正常响应。


相关配置示例

docker-compose.yml 片段

services:
  ticket-service:
    container_name: ticket-service
    image: <docker_hub_nick>/ticket-service:latest
    environment:
      - SPRING_PROFILES_ACTIVE=docker
      - SPRING_DATASOURCE_URL=jdbc:postgresql://postgres-ticket:5431/ticket_service
    depends_on:
      - postgres-ticket
      - broker
      - zipkin
      - discovery-server
      - api-gateway

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: always
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    depends_on:
      - bet-service
      - ticket-service
      - chat-service
      - notification-service
      - wallet-service

ticket-service 的 properties 配置

spring.application.name=ticket-service

management.health.circuitbreakers.enabled=true
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

prometheus.yml 配置

global:
  scrape_interval:     1m
  evaluation_interval: 30s
  scrape_timeout: 1m
  external_labels:
    monitor: 'easywin-monitor'

scrape_configs:
  - job_name: 'ticket_service'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['ticket-service:8080']
        labels:
          application: 'Ticket Service'

解决方案

1. 修复服务启动顺序问题

depends_on仅保证容器启动顺序,不确保依赖服务完全就绪。Prometheus可能在Spring Boot服务初始化完成前就开始抓取,导致连接拒绝或404。

  • 给Prometheus添加启动延迟脚本,修改command:
    prometheus:
      # ...其他配置
      command: ["sh", "-c", "sleep 60 && /bin/prometheus --config.file=/etc/prometheus/prometheus.yml"]
    
  • 或者使用wait-for-it工具检测依赖服务端点就绪后再启动Prometheus

2. 验证Spring Boot端点暴露配置

  • 确认docker环境对应的配置文件(如application-docker.properties)中包含完整的端点配置:
    management.endpoints.web.exposure.include=*
    management.endpoint.prometheus.enabled=true
    
  • 检查服务启动日志,确认/actuator/prometheus端点已注册,搜索类似日志:Exposing X endpoint(s) beneath base path '/actuator',需包含prometheus

3. 检查Docker网络连通性

  • 进入Prometheus容器,执行ping ticket-service确认DNS解析正常
  • 执行curl http://ticket-service:8080/actuator查看所有可用端点,确认prometheus存在
  • 若DNS解析异常,为所有服务指定同一自定义网络:
    networks:
      app-network:
        driver: bridge
    
    services:
      ticket-service:
        # ...其他配置
        networks:
          - app-network
      prometheus:
        # ...其他配置
        networks:
          - app-network
    

4. 调整Prometheus抓取配置

  • 缩短scrape_timeout(如改为10s),避免因服务初始化慢导致超时
  • 添加重试和健康检查配置,仅当服务就绪后再抓取:
    scrape_configs:
      - job_name: 'ticket_service'
        metrics_path: '/actuator/prometheus'
        scrape_timeout: 10s
        static_configs:
          - targets: ['ticket-service:8080']
            labels:
              application: 'Ticket Service'
        retry_config:
          max_retries: 3
          retry_interval: 30s
        health_checks:
          - http_get:
              path: '/actuator/health'
              port: 8080
            interval: 30s
            timeout: 10s
    

5. 检查Spring Boot服务启动状态

  • 查看ticket-service启动日志,确认数据库、注册中心等依赖服务已完全就绪,避免服务处于"启动中"状态时端点未激活

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:40:31