本文使用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预览
采集频率控制
如果所有的请求都采集监控,不管出于性能考虑还是资源考虑,都是不实际的。
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可定制化报表展示。