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

VM(172.16.4.42)上Docker部署ELK Stack的APM Agent故障排查请求

ELK Stack + APM 部署至VM后Agent失效的配置排查

针对你把本地正常运行的ELK+APM docker-compose配置部署到IP为172.16.4.42的VM后,APM Agent无法工作的问题,结合给出的配置文件,整理出以下排查点及修正方案:

核心配置错误修正

1. Kibana的Elasticsearch地址配置错误

当前Kibana环境变量中ELASTICSEARCH_URL=http://localhost:9200存在问题:在Docker Compose的自定义网络中,localhost指向Kibana容器自身,而非Elasticsearch服务。需修正为服务名地址:

ELASTICSEARCH_URL=http://elasticsearch:9200

本地环境可能因端口映射到宿主机,Kibana容器偶然能访问宿主机的9200端口,但VM环境的网络隔离更严格,导致该配置失效,进而影响APM相关功能的联动。

2. APM Server监听范围限制

默认情况下APM Server可能仅监听容器内的localhost,需显式配置监听所有地址,确保同网络内的Golang服务能正常访问:
在apm-server的command参数中添加:

-E apm-server.host=0.0.0.0:8200

3. 开启Golang Agent调试日志

为了快速定位Agent连接失败的具体原因,建议在goservice的环境变量中添加调试日志配置:

- "ELASTIC_APM_LOG_LEVEL=debug"

通过查看服务日志可以直接获取连接超时、地址解析失败等关键错误信息。

修改后的完整docker-compose.yaml

version: '3.8'

services:
  apm-server:
    image: docker.elastic.co/apm/apm-server:7.13.0
    cap_add: ["CHOWN", "DAC_OVERRIDE", "SETGID", "SETUID"]
    cap_drop: ["ALL"]
    ports:
    - 8200:8200
    command: >
       apm-server -e
         -E apm-server.rum.enabled=true
         -E apm-server.host=0.0.0.0:8200
         -E setup.kibana.host=kibana:5601
         -E setup.template.settings.index.number_of_replicas=0
         -E apm-server.kibana.enabled=true
         -E apm-server.kibana.host=kibana:5601
         -E output.elasticsearch.hosts=["elasticsearch:9200"]
    healthcheck:
      interval: 10s
      retries: 12
      test: curl --write-out 'HTTP %{http_code}' --fail --silent --output /dev/null http://localhost:8200/
    networks:
      - elastic

  elasticsearch:
   container_name: elasticsearch
   image: docker.elastic.co/elasticsearch/elasticsearch:7.13.0
   ports:
    - 9200:9200
   environment:
    - xpack.monitoring.enabled=true
    - xpack.watcher.enabled=false
    - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    - discovery.type=single-node
   networks:
    - elastic

  kibana:
   container_name: kibana
   image: docker.elastic.co/kibana/kibana:7.13.0
   ports:
    - 5601:5601
   depends_on:
    - elasticsearch
   environment:
    - ELASTICSEARCH_URL=http://elasticsearch:9200
    - xpack.apm.enabled=false
   networks:
    - elastic
  
  goservice:
    build: "."
    ports:
      - "8102:3003"
    environment:
      - "ELASTIC_APM_SERVICE_NAME=apm-nemo"
      - "ELASTIC_APM_SERVER_URL=http://apm-server:8200"
      - "ELASTIC_APM_LOG_LEVEL=debug"
    networks:
      - elastic
    depends_on:
      apm-server:
        condition: service_healthy  

networks:
  elastic:
    driver: bridge

volumes:
  elasticsearch-data:

额外排查步骤

  1. 检查容器状态:执行docker-compose ps,确认所有服务均处于Up状态,若有异常容器,查看对应日志定位启动失败原因。
  2. 验证容器间通信:进入goservice容器执行curl http://apm-server:8200,若无法返回APM Server状态页,说明Docker网络存在连通性问题。
  3. VM环境检查:
    • 临时关闭SELinux(执行setenforce 0),排查是否是安全策略阻止了容器间通信;
    • 检查VM防火墙/iptables规则,确保Docker bridge网络的流量不受限制;
    • 确认VM内存资源充足,Elasticsearch配置的512M堆内存需确保VM有足够空闲内存支撑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:44:51