istio - 如何在 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 服务器发送跟踪信息?
解决方案
我终于弄清楚了可能导致此问题的原因:
安装选项:
--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
希望这可以帮助。
推荐阅读
- hibernate - 重用Hibernate二级缓存来缓存代码中的实例?
- angular - 没有缓存的Angular 8 Http获取请求
- r - mutate_at() 在 R 中使用 to_label() 作为其函数引发错误
- c - 用于传递给 C DLL 的现代 Delphi 到 C 字符串
- html - 使图像高度等于视口
- java - Java:使用带有扫描仪输入的 Do-while 循环作为字符串类型:制作一个计算简单数学的程序,如果您键入 yes,则让它重复
- angular - 未检测到服务人员
- java - 在Java中将对象的多个实例合并为一个
- php - PHP 不一致的 var_dump,错误的地板结果与浮点计算
- mongodb - 如何编写一个 Mongo 查询,在排序后返回匹配后的所有内容