laziobird / otel-collector-java

The example for using OpenTelemetry Collector in Java
MIT License
11 stars 3 forks source link

Windows 环境Docker localhost 不能互通:[OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.otlp.internal.grpc.OkHttpGrpcExporter - Failed to export spans. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4317 #1

Closed BeanHaHa closed 1 year ago

BeanHaHa commented 1 year ago

Windows环境,在docker里用下面命令启动

docker-compose -f docker-compose-collector.yml up -d

生成Trace,上报时报错:

[OkHttp http://localhost:4317/...] ERROR io.opentelemetry.exporter.otlp.internal.grpc.OkHttpGrpcExporter - Failed to export spans. The request could not be executed. Full error message: Failed to connect to localhost/127.0.0.1:4317

docker-compose-collector.yml配置如下:(其他配置未改动)

version: '3.3'
networks:
  jaeger:

services:

    app:
        build: ./
        container_name: otel-collector-demo
        ports:
            - "8080:8080"
        #environment:
            # 外网ip,用于访问jaeger UI
            ##- JAVA_OPTS=-javaagent:opentelemetry-javaagent.jar -Dotel.resource.attributes=service.name=otel-collector-demo -Dotel.traces.exporter=jaeger -Dotel.metrics.exporter=none
        #network_mode: host

    jaeger:
        image: jaegertracing/all-in-one:1.29
        ports:
            - 5775:5775/udp
            - 6831:6831/udp
            - 6832:6832/udp
            - 5778:5778
            - 16686:16686
            - 14250:14250
            - 14268:14268
            - 14267:14267
            - 14269:14269
            - 9411:9411
        #network_mode: host

    # Collector
    otel-collector:
      ## 用最新collecotr版本 otel/opentelemetry-collector-contrib:0.74.0
      image: otel/opentelemetry-collector-contrib:0.74.0
      command: ["--config=/etc/otel-collector-config.yaml"]
      environment:
        - OTEL_RESOURCE_ATTRIBUTES=service.name=otel-collector-demo
      ##在rules目录下提供更多Collector 插件使用示例
      volumes:
        - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
      ports:
        - "1888:1888"   # pprof extension
        - "8888:8888"   # Prometheus metrics exposed by the collector
        - "8889:8889"   # Prometheus exporter metrics
        - "13133:13133" # health_check extension
        - "4317:4317"        # OTLP gRPC receiver
        - "4318:4318"        # OTLP HTTP receiver
        - "55670:55679" # zpages extension
      #network_mode: host

    prometheus:
      container_name: prometheus
      image: prom/prometheus:latest
      volumes:
        - ./prometheus.yaml:/etc/prometheus/prometheus.yml
      ports:
        - "9090:9090"
        - "9464:9464"
      #network_mode: host
laziobird commented 1 year ago

Window 没试过,很明显容器内 localhost 不能互通 原因: 解决windows系统无法对docker容器进行端口映射的问题:https://www.runoob.com/note/46832

两个方法 A、改成 network_mode: host 试试 B、 修改Java 打包Dockerfile,

ENTRYPOINT ["java","-javaagent:opentelemetry-javaagent.jar","-Dotel.resource.attributes=service.name=collector-demo","-Dotel.metrics.exporter=otlp","-Dotel.traces.exporter=otlp","-Djava.security.egd=file:/dev/./urandom","-jar","java-demo.jar"]

指定Trace Exporter 的 IP https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/autoconfigure/README.md otel.exporter.otlp.traces.endpoint

BeanHaHa commented 1 year ago

docker-compose-collector.yml配置,增加 “ otel.exporter.otlp.traces.endpoint=http://otel-collector:4317

version: '3.3' networks: jaeger:

services:

app:
    build: ./
    container_name: otel-collector-demo
    ports:
        - "8080:8080"
    environment:
        - otel.exporter.otlp.traces.endpoint=http://otel-collector:4317
# Collector
otel-collector:
  image: otel/opentelemetry-collector-contrib:0.75.0
  command: ["--config=/etc/otel-collector-config.yaml"]
  ##在rules目录下提供更多Collector 插件使用示例
  volumes:
    - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
  ports:
    - "1888:1888"   # pprof extension
    - "8888:8888"   # Prometheus metrics exposed by the collector
    - "8889:8889"   # Prometheus exporter metrics
    - "13133:13133" # health_check extension
    - "4317:4317"        # OTLP gRPC receiver
    - "4318:4318"        # OTLP HTTP receiver
    - "55670:55679" # zpages extension