为了添加属性、过滤遥测数据并将其进一步导出到 WebUI,我尝试使用
OpenTelemetry collector
实现 Jaeger
,但无法在 Jaeger UI
中获取痕迹。
首先,我尝试使用
jaeger-all-in-one
作为初始设置,但没有找到如何处理数据,除了使用已弃用的 Jaeger Agent
及其 --agent.tags
选项。
接下来我尝试在
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/... ,但没有帮助。
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(至少我尝试过......)。我认为我的方法有几个错误,请纠正我的错误,任何有关该问题的帮助将不胜感激。
您需要修复此错误
listen tcp :4317: bind: address already in use
。 Jaeger 和 OTEL Collector 都在端口 4317 上侦听 - 如果您在容器中运行它们,则可以这样做,但看起来您是直接在主机上将它们作为二进制文件运行,因此它们会在此端口上发生冲突。尝试告诉 Jeager 在不同的端口上运行。