无法通过 Opentelemetry Collector 将遥测数据发送到 Jaeger Query

问题描述 投票:0回答:1

为了添加属性、过滤遥测数据并将其进一步导出到 WebUI,我尝试使用

OpenTelemetry collector
实现
Jaeger
,但无法在
Jaeger UI
中获取痕迹。

  1. 首先,我尝试使用

    jaeger-all-in-one
    作为初始设置,但没有找到如何处理数据,除了使用已弃用的
    Jaeger Agent
    及其
    --agent.tags
    选项。

  2. 接下来我尝试在

    OpenTelemetry collector
    中接收数据并将其导出到
    jaeger-all-in-one
    。作为遥测的来源,我使用了
    官方文档示例
    中的 telemetrygen
    Config.yaml
    对于收藏家:

user@host:~$ cat /etc/otelcol/config.yaml 

extensions:
  health_check: {}
  pprof: {}
  zpages: {}

receivers:
  otlp:
    protocols:
      grpc:
        endpoint: localhost:4317
      http: 
        endpoint: localhost:4318
  zipkin: {}


processors:
  attributes:
    actions:
      - key: some.ip
        value: "some_IP_in_future"
        action: insert
  batch: {}

exporters:
  debug:
    verbosity: detailed
  otlp:
    endpoint: jaeger-all-in-one:4317
    tls:
      insecure: true
  zipkin:
    endpoint: "http://zipkin:9411/api/v2/spans"

service:
  pipelines:
    traces:
      receivers: [otlp, zipkin]
      processors: [attributes, batch]
      exporters: [debug, otlp]
    metrics:
      receivers: [otlp]
      exporters: [debug, otlp]
    logs:
      receivers: [otlp]
      processors: [batch]
      exporters: [debug]
  extensions: [pprof, zpages, health_check]
  telemetry:
    logs:
      level: "debug"

启动收集器:

user@host:~$ /usr/bin/otelcol --config=file:/etc/otelcol/config.yaml --feature-gates=-component.UseLocalHostAsDefaultHost

启动负载:

$GOBIN/telemetrygen traces --otlp-insecure --traces 3

我在终端中看到来自

OpenTelemetry collector
telemetrygen
的日志消息,但是,当我尝试启动它时,jaeger-all-in-one 失败并出现错误:

user@host:~/pkg/jaeger-1.61.0-linux-amd64$ ./jaeger-all-in-one --collector.otlp.enabled=true
...
could not start OTLP receiver: could not start the OTLP receiver: listen tcp :4317: bind: address already in use

OpenTelemetry collector
还会向其终端发送错误:

Exporting failed. Will retry the request after interval.        {"kind": "exporter", "data_type": "traces", "name": "otlp", "error": "rpc error: code = Unavailable desc = name resolver error: produced zero addresses", "interval": "13.56862226s"}

如果我没有向

receivers::otlp::protocols::grpc
receivers::otlp::protocols::http
添加任何端点,我的
OpenTelemetry collector
实例不会从负载接收数据,它会直接发送到
Jaeger Collector
,并进一步从它发送到
Jaeger UI
,所以在这种情况下
OpenTelemetry collector
被忽略。 我按照 recommendations 并使用 docker compose 启动了
OpenTelemetry Collector
jaeger-all-in-one
,但是从
network_mode: host
中删除
docker-compose.yaml
并没有解决问题。 我还遵循了其他建议,更改了端口 4317/14250/9317/... 、 localhost/0.0.0.0/jaeger/... 、 jaeger/otlp/... ,但没有帮助。

  1. 然后我尝试避免使用
    Jaeger Collector
    ,从我的设置中排除
    jaeger-all-in-one
    ,只使用
    Jaeger Query
    。我在
    endpoint: jaeger-query:16685
    exporters
    部分使用了
    /etc/otelcol/config.yaml
    但这不起作用(不知道在这种情况下哪个端口应该更适合需求) -
    jaeger-query
    是通过
    ./jaeger-query --span-storage.type memory
    启动的,没有错误发生了,但同时没有任何痕迹被发送到 UI(至少我尝试过......)。

我认为我的方法有几个错误,请纠正我的错误,任何有关该问题的帮助将不胜感激。

trace open-telemetry jaeger open-telemetry-collector
1个回答
0
投票

您需要修复此错误

listen tcp :4317: bind: address already in use
。 Jaeger 和 OTEL Collector 都在端口 4317 上侦听 - 如果您在容器中运行它们,则可以这样做,但看起来您是直接在主机上将它们作为二进制文件运行,因此它们会在此端口上发生冲突。尝试告诉 Jeager 在不同的端口上运行。

© www.soinside.com 2019 - 2024. All rights reserved.