istio如何将跟踪范围发送给jaeger?

时间:2018-11-24 15:42:52

标签: kubernetes istio zipkin envoyproxy jaeger

我想将istio与K8S中的现有jaeger跟踪系统一起使用,我首先在the official link之后安装casegandra作为后端存储来安装jaeger系统。然后通过the helm way安装istio,但仅启用了某些选定的组件:

helm upgrade istio -i install/kubernetes/helm/istio --namespace istio-system \   
--set security.enabled=true \   
--set ingress.enabled=false \   
--set gateways.istio-ingressgateway.enabled=true \   
--set gateways.istio-egressgateway.enabled=false \   
--set galley.enabled=false \   
--set sidecarInjectorWebhook.enabled=true \  
--set mixer.enabled=false \   
--set prometheus.enabled=false \
--set global.proxy.envoyStatsd.enabled=false \
--set pilot.sidecar=true \ 
--set tracing.enabled=false

Jaeger和istio安装在同一个命名空间istio-sytem中,完成后,其中的所有pod都如下所示:

kubectl -n istio-system get pods                           
NAME            READY     STATUS    RESTARTS   AGE 
istio-citadel-5c9544c886-gr4db      1/1       Running   0          46m 
istio-ingressgateway-8488676c6b-zq2dz     1/1       Running   0        51m 
istio-pilot-987746df9-gwzxw               2/2       Running   1    51m 
istio-sidecar-injector-6bd4d9487c-q9zvk   1/1       Running   0    45m 
jaeger-collector-5cb88d449f-rrd7b         1/1       Running   0    59m 
jaeger-query-5b5948f586-gxtk7             1/1       Running   0    59m

然后我跟随the link将bookinfo示例部署到另一个带有标签istio-play的命名空间istio-injection=enabled中,但是无论我如何刷新productpage页面,都没有跟踪数据填充到jaeger中。

我想也许跟踪范围是通过混频器发送给jaeger的,就像istio进行所有其他远程处理的方式一样,所以我-set mixer.enabled=true,但不幸的是,只有istio-mixeristio-telementry之类的某些服务显示。最后,我清理了所有上述安装,并逐步进行了this task,但是bookinfo应用程序的跟踪数据仍然不存在。

我的问题是:istio确实如何向jaeger发送跟踪数据? Sidecar代理会像how envoy does一样直接将其发送到jaeger-collector(zipkin.istio-system:9411)还是这样的数据流:sidecar-proxy -> mixer -> jaeger-collector?以及如何调试istio网格内各种组件之间的数据流?

感谢您的帮助和信息:-)


更新:我再次尝试安装没有头盔的istio:kubectl -n istio-system apply -f install/kubernetes/istio-demo.yaml,这次一切正常,kubectl way和{{1}之间必须有所不同}。

1 个答案:

答案 0 :(得分:3)

根据我的经验和在线阅读,我在Istio mixer faq

中发现了这一有趣的行
  

混合器跟踪的生成受命令行标志控制:trace_zipkin_url,trace_jaeger_url和trace_log_spans。如果设置了这些标志值中的任何一个,则跟踪数据将直接写入这些位置。如果没有提供跟踪选项,则Mixer将不会生成任何应用程序级跟踪信息。

此外,如果您深入混频器helm chart,您会发现Zipkin和Jaeger的痕迹,表明该混频器正在将跟踪信息传递给Jaeger。

我也很困惑,在其中一篇文章中读到这行

  

Istio在运行您的应用程序容器的Pod中注入一个sidecar代理(Envoy)。该Sidecar代理透明地拦截(iptables魔术)进入和流出应用程序的所有网络流量。由于这种拦截,Sidecar代理处于独特的位置,可以自动跟踪所有网络请求(HTTP / 1.1,HTTP / 2.0和gRPC)。

在Istio混合器文档上,在每个请求执行前提条件检查之前以及在每个请求报告遥测请求之后,Envoy辅助车都会在逻辑上调用Mixer。边车具有本地缓存​​,因此可以从缓存中执行很大一部分的前提条件检查。另外,Sidecar缓冲传出遥测,使其仅很少调用Mixer。

更新:您可以启用跟踪,以了解Istio中的请求发生了什么,以及混合器和特使的作用。阅读更多信息here