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

k6无法通过OpenTelemetry Collector写入Mimir/Tempo求助

无法通过OpenTelemetry Collector将k6指标存入Grafana Mimir、追踪数据存入Grafana Tempo的问题解决

报错信息

INFO[0030] 2025/01/15 22:47:29 failed to upload metrics: context deadline exceeded: rpc error: code = Unavailable desc = connection error: desc = "error reading server preface: EOF"

已尝试的配置

OpenTelemetry Collector配置

receivers:
  otlp:
    protocols:
      grpc:
      http:

processors:
  batch:

exporters:
  # 指标:使用Prometheus Remote Write导出器发送数据到Grafana Mimir
  prometheusremotewrite:
    endpoint: "http://mimir:9009/api/v1/remote_write"
    # Mimir端点和认证信息需根据实际情况调整

  # 追踪:使用OTLP导出器发送追踪数据到Tempo
  otlp:
    endpoint: "tempo:4317"
    tls:
      insecure: true

service:
  pipelines:
    metrics:
      receivers: [otlp]
      processors: [batch]
      exporters: [prometheusremotewrite]
    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp]

docker-compose配置

networks:
  observability:
    driver: bridge

services:
  # OpenTelemetry Collector (Contrib) 
  otel-collector:
    image: otel/opentelemetry-collector-contrib:latest
    container_name: otel-collector
    command: ["--config=/etc/otel-collector-config.yaml"]
    volumes:
      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml:ro
    ports:
      - "12345:12345"
      # - "4418:4318"
    networks:
      - observability

  # Grafana Tempo 追踪存储
  tempo:
    image: grafana/tempo:latest
    container_name: tempo
    command: ["-config.file=/etc/tempo/tempo.yaml"]
    ports:
      - "3200:3200"   # 查询用HTTP API
      - "4317:4317"   # OTLP 数据接入
      - "4318:4318"
    volumes:
      - ./tempo.yaml:/etc/tempo/tempo.yaml:ro
      - ./tempo-data:/var/tempo
    networks:
      - observability

  # Grafana Mimir 指标存储
  mimir:
    image: grafana/mimir:latest
    container_name: mimir
    # 实际配置取决于你的Mimir设置;这里假设它在9009端口接收remote write请求
    ports:
      - "9009:9009"
    volumes:
      - ./mimir-config.yaml:/etc/mimir/mimir.yaml:ro
      - ./mimir-data:/data
    networks:
      - observability

  # Grafana 可视化
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    environment:
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
      - GF_AUTH_DISABLE_LOGIN_FORM=true
      - GF_FEATURE_TOGGLES_ENABLE=traceqlEditor metricsSummary
      - GF_INSTALL_PLUGINS=https://storage.googleapis.com/integration-artifacts/grafana-exploretraces-app/grafana-exploretraces-app-latest.zip;grafana-traces-app      
    volumes:
      - ./grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml
      # - ./grafana-dashboards.yaml:/etc/grafana/provisioning/dashboards/dashboards.yaml:ro
    ports:
      - "3000:3000"
    depends_on:
      - mimir
      - tempo
    networks:
      - observability

k6运行命令

K6_OTEL_HTTP_EXPORTER_INSECURE=true K6_OTEL_HTTP_EXPORTER_ENDPOINT=http://localhost:12345 K6_OTEL_METRIC_PREFIX=k6_ k6 run --out experimental-opentelemetry ./demo.js

问题排查与解决步骤

1. 修复端口映射不匹配问题

你的OpenTelemetry Collector启用了OTLP HTTP协议,但docker-compose中仅映射了未使用的12345端口,默认OTLP HTTP监听端口是4318,导致k6无法连接到Collector。

修改方案:

  • 更新docker-compose中otel-collector的端口配置:
    ports:
      - "4317:4317"  # OTLP gRPC端口
      - "4318:4318"  # OTLP HTTP端口(k6需要连接这个)
    
  • 调整k6运行命令,指向正确的端口:
    K6_OTEL_HTTP_EXPORTER_INSECURE=true K6_OTEL_HTTP_EXPORTER_ENDPOINT=http://localhost:4318 K6_OTEL_METRIC_PREFIX=k6_ k6 run --out experimental-opentelemetry ./demo.js
    

2. 修正Mimir Remote Write端点路径

Grafana Mimir默认的指标推送端点是/api/v1/push,而非Prometheus默认的/api/v1/remote_write,需要调整Collector的exporter配置:

prometheusremotewrite:
  endpoint: "http://mimir:9009/api/v1/push"

3. 验证容器间网络连通性

进入otel-collector容器,测试与Mimir、Tempo的连通性:

# 测试Mimir HTTP连接
docker exec -it otel-collector curl http://mimir:9009/api/v1/push -X POST
# 测试Tempo gRPC连接
docker exec -it otel-collector grpcurl -plaintext tempo:4317 list

如果无法连通,确认所有服务都加入了observability网络。

4. 调整Collector批处理超时(可选)

若数据量较大,默认批处理设置可能导致超时,可增加超时时间:

processors:
  batch:
    timeout: 10s
    send_batch_size: 1000

5. 查看Collector日志排查细节

通过日志获取更详细的错误信息:

docker logs otel-collector

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:50:08