Otel Collector无法将Trace发送至Jaeger问题排查求助
Otel Collector无法将Trace发送至Jaeger问题排查求助
各位大佬好,我遇到一个非常棘手的问题,想请大家帮忙排查下:
我有几个基于Spring Boot + Micrometer + Spring Boot Actuator实现了OpenTelemetry追踪的Java应用,直接把应用的OTLP端点指向Jaeger的4318端口时,Trace能正常在Jaeger UI(http://localhost:16686)里显示。但因为很多Trace没用,我想过滤掉或者重命名这些无用的Trace,所以引入了Otel Collector,打算通过它来转发并处理Trace,结果现在完全卡壳了——Collector没报错,但就是没把Trace转发到Jaeger,只有Collector的debug exporter能在控制台正常输出Trace内容,Jaeger UI里啥都看不到。
下面是我的所有相关配置,以及已经试过的排查动作:
1. 业务应用(api-service)的Docker Compose配置
api-service: image: <api-image> restart: on-failure depends_on: - mysql - zookeeper - redis - kafka - user-app - ff4j-ui volumes: - $PWD/data/config:/config environment: SPRING_REDIS_HOST: <host> AWS_ACCESS_KEY_ID: <AWS_ACCESS_KEY_ID> SPRING_DATASOURCE_PASSWORD: <PASSWORD> AWS_SECRET_ACCESS_KEY: <AWS_SECRET_ACCESS_KEY> CORS_EXPOSED_HEADERS: <HEADERS> XSRF_DOMAIN: 127.0.0.1 ZOOKEEPER_CONNECTION: zookeeper:2181 JAEGER_SAMPLER_TYPE: const SPRING_DATASOURCE_USERNAME: <USERNAME> REDIS_SESSION_HOST: redis JDBC_INCLUDES: QUERY, KEYS, FETCH OTEL_EXPORTER_OTLP_ENDPOINT: http://0.0.0.0:4318 CCS_SERVICE_NAME: <SERVICE-NAME> FEATUREFLAG_HOSTURL: http://ff4j-ui:8099 CORS_ALLOWED_ORIGINS: http://127.0.0.1:8081 SWAGGER_ENABLED: 'false' CORS_ALLOWED_METHODS: GET,POST,HEAD,OPTIONS,PATCH,PUT,DELETE JAEGER_SAMPLER_PARAM: '1' JAEGER_AGENT_HOST: jaeger HTTP_SERVICE_CONNECT_TIMEOUT: '99999' HTTP_SERVICE_READ_TIMEOUT: '999999' SPRING_DATASOURCE_URL: <DATASOURCE-URL> SPRING_KAFKA_BOOTSTRAPSERVERS: kafka:9092 MANAGEMENT_OTLP_TRACING_ENDPOINT: http://0.0.0.0:4318 ports: - 8082:8080 - 7988:5005
补充说明:当我把应用的
MANAGEMENT_OTLP_TRACING_ENDPOINT直接改成jaeger:4318时,Trace能立刻在Jaeger里正常显示,说明应用的追踪逻辑本身没问题。
2. Otel Collector的Docker Compose配置
otel-collector: image: otel/opentelemetry-collector-contrib:latest depends_on: - jaeger volumes: - $PWD/data/config/otel-collector-config.yml:/etc/otel-collector-config.yml ports: - 4317:4317 - 4318:4318 - 1888:1888 - 13133:13133 - 55679:55679
3. Jaeger的Docker Compose配置
jaeger: image: jaegertracing/all-in-one:latest container_name: jaeger environment: COLLECTOR_ZIPKIN_HOST_PORT: 9411 COLLECTOR_OTLP_ENABLED: true SPAN_STORAGE_TYPE: memory LOG_LEVEL: debug JAEGER_LOG_LEVEL: debug ports: - "16686:16686" - "16685:16685"
4. Otel Collector的核心配置文件(otel-collector-config.yml)
receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: filter: traces: exclude: spans: - 'name == "security filterchain before"' - 'name == "authorize request"' exporters: otlp/jaeger: endpoint: jaeger:4317 tls: insecure: true debug: verbosity: detailed debug: service: telemetry: logs: level: debug extensions: [zpages] pipelines: traces: receivers: [otlp] exporters: [otlp/jaeger,debug]
我已经试过的所有排查动作
- 完全移除Collector配置里的
filter处理器,只保留最基础的接收+转发逻辑,问题依旧 - 尝试修改Collector的Jaeger exporter端点:
- 改成
jaeger:4318(Jaeger的OTLP HTTP端口) - 改成
jaeger:14250(Jaeger的gRPC直接接收端口)
两种情况都没用
- 改成
- 更换Jaeger镜像版本(试过比
latest新的特定版本),没有改善 - 调整应用的OTLP端点为
otel-collector:4318/otel-collector:4317,Collector的debug exporter能正常收到Trace,说明应用到Collector的链路是通的 - 开启了Collector的debug级别日志,全程没看到任何报错信息
现在我要么想解决Collector转发到Jaeger的问题,要么求推荐其他能实现过滤/重命名OpenTelemetry Trace的替代方案,麻烦各位大佬支支招!
内容来源于stack exchange
相关产品推荐
相关产品推荐

