本文使用istio版本:1.4.2

开启链路监控

....
#
# addon jaeger tracing configuration
#
tracing:
  enabled: true
....

可以看出。istio链路监控集成使用的是Jaeger,Jaeger是什么,参考这篇

查看是否启动成功

[root@k8s-master istio-1.4.2]# kubectl get po -n istio-system --show-labels | grep jaeger
istio-tracing-795c9c64c4-224wm            1/1     Running     0          47h   app=jaeger,chart=tracing,heritage=Tiller,pod-template-hash=795c9c64c4,release=istio

访问jaeger UI

[root@k8s-master istio-1.4.2]# kubectl get svc -n istio-system | grep jaeger
jaeger-agent             ClusterIP      None             <none>        5775/UDP,6831/UDP,6832/UDP                                                                                                                   47h
jaeger-collector         ClusterIP      10.110.206.207   <none>        14267/TCP,14268/TCP,14250/TCP                                                                                                                47h
jaeger-query             NodePort       10.101.53.38     <none>        16686:31944/TCP 

如上所示,默认情况下,jaeger-query类型也是ClusterIP,为了便于访问,直接修改成NodePort类型,

kubectl edit svc jaeger-query  -n istio-system

然后访问IP:31944即可。

UI预览

Istio使用【链路监控】_框架Istio使用【链路监控】_Istio_02

Istio使用【链路监控】_框架_03

 

采集频率控制

如果所有的请求都采集监控,不管出于性能考虑还是资源考虑,都是不实际的。

pilot组件中PILOT_TRACE_SAMPLING环境变量用于控制采集率,默认为1(0~100),测试的时候可以改大点便于分析:

 kubectl -n istio-system get deploy istio-pilot -oyaml | grep PILOT_TRACE_SAMPLING -A5

--
        - name: PILOT_TRACE_SAMPLING
          value: "1"
        - name: PILOT_ENABLE_PROTOCOL_SNIFFING_FOR_OUTBOUND
          value: "true"
        - name: PILOT_ENABLE_PROTOCOL_SNIFFING_FOR_INBOUND
          value: "false"
---

也可以在安装前,设置 pilot.traceSampling,默认为1.配置文件目录:install\kubernetes\helm\istio\charts\pilot

监控数据采集存储

参考控制台kiali配置,其中配置了Prometheus和grafana。参考 Istio链路监控和监控可视化

  • prometheus作为基础数据采集和存储方式,可以通过PromQL查询指标。
  • grafana可定制化报表展示。

Istio使用【链路监控】_Istio_04