首页 > 解决方案 > 如何在 istio 中指定外部 zipkin 收集器?

问题描述

我想在 istio 中使用 stackdriver trace 作为分布式跟踪的后端。我在 GCP 的虚拟机上安装了 Docker,并运行了 zipkin-gcp 的镜像。

docker run -d -p 9411:9411 -e STORAGE_TYPE=stackdriver -e STACKDRIVER_PROJECT_ID=my-project openzipkin/zipkin-gcp

然后,根据官方文档,我将 istio 配置为将 spans 发送到此 VM。

istioctl manifest apply --set values.tracing.enabled=true --set values.tracing.provider=zipkin --set values.global.tracer.zipkin.address=10.128.0.30:9411 --set values.pilot.traceSampling=100.0

但是,堆栈驱动程序跟踪中没有显示任何跟踪。

为了隔离问题,我停止了 zipkin-gcp 并检查了是否使用 tcpdump 发送了数据包。

tcpdump -i eth0 dst port 9411

结果发现什么都没有发送。我已经确认了从 kubernetes 集群到 VM 的端口 9411 连接。

如何使用 istio 向外部 zipkin 服务器发送跟踪信息?

标签: istiozipkindistributed-tracing

解决方案


我终于弄清楚了可能导致此问题的原因:

安装选项:

--set values.tracing.provider=zipkin --set values.global.tracer.zipkin.address

<zipkin-collector-service>.<zipkin-collector-namespace>:9411根据istio文档需要。虽然您只有外部服务器的 IP 地址和端口。

这很可能意味着安装选项需要 istio 服务网格注册表中的现有名称。

因此,如果您的 zipkin 收集器在集群外部,我们需要添加ServiceEntry,VirtualService并且也许DestinationRule这样外部服务就可以在网格内使用。

您可以按照istio文档了解如何为外部服务创建这些对象。是另一个指南。

之后,我们需要以VirtualService端点更新跟踪器地址值。

--set values.global.tracer.zipkin.address=zipkin-external-virtualservice.egress-zipkin-namespace:9411

希望这可以帮助。


推荐阅读