一、jaeger 介绍
jaeger 官网:https://www.jaegertracing.io/
jaeger 是 Uber 开源的分布式跟踪系统,用于微服务的监控和全链路跟踪,其设计思想来自于 Dapper 和 zipkin。jaeger 特征包括:
-
-
分布式事务监控
-
Root 原因分析
-
服务依赖性分析
-
性能/延迟优化
二、jaeger 安装
如果你使用 istioctl profile demo 安装 istio 的话,jaeger 默认就是安装好的
[root@k8s-master k8s]# kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
grafana ClusterIP 10.1.5.34 <none> 3000/TCP 6h54m
istio-egressgateway ClusterIP 10.1.247.154 <none> 80/TCP,443/TCP,15443/TCP 6h55m
istio-ingressgateway NodePort 10.1.117.117 <none> 15021:32064/TCP,80:32223/TCP,443:32254/TCP,31400:30364/TCP,15443:30581/TCP 6h55m
istiod ClusterIP 10.1.76.150 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 6h56m
jaeger-collector ClusterIP 10.1.74.203 <none> 14268/TCP,14250/TCP 23m
kiali NodePort 10.1.4.30 <none> 20001:31461/TCP,9090:32540/TCP 6h54m
prometheus ClusterIP 10.1.198.172 <none> 9090/TCP 6h54m
tracing ClusterIP 10.1.122.6 <none> 80:/TCP 23m
zipkin ClusterIP 10.1.171.167 <none> 9411/TCP 23m
注意:在istio老版本叫jaeger-query,新版本叫tracing
为了可以将 jaeger 暴露在 k8s 集群外访问,需要将 tracing的 ClusterIP 服务类型更改为 NodePort。执行语句如下
kubectl patch svc -n istio-system tracing -p '{"spec":{"type": "NodePort"}}'
查看svc端口
[root@k8s-master k8s]# kubectl get svc -n istio-system|grep tracing
tracing NodePort 10.1.122.6 <none> 80:31137/TCP 26m
可以看到暴露的端口为:31137
使用浏览器访问:
http://192.168.31.236:31137/jaeger/
注意:192.168.31.236是k8s-master地址
效果如下:
![](https://img-blog.csdnimg.cn/img_convert/6e6c5e38f13027ee02cdee509dd8b3f8.png)
三、kiali 关联 jaeger
kiali 是可视化服务网格组件,截图如下:
![](https://img-blog.csdnimg.cn/img_convert/3a1472ab928a6ac8a04e45769e5104b5.png)
点击上面箭头 Distributed Tracing 链接可以打开 jaeger。如果访问不到,说明你本地的浏览器并不能直接访问到 kiali 设置的 jaeger 外部链接。
注意:默认是没有的,我是关联之后才有的,莫慌。
设置 kiali jaeger 外部链接地址
编辑 kiali configmap:
kubectl edit configmap -n istio-system kiali
在 external_services.tracing.url 内容下添加 jaeger 外部链接,链接地址就是 istio-system 命名空间下 jaeger-query 服务的宿主机地址和 nodeport
external_services:
custom_dashboards:
enabled: true
tracing:
url: http://192.168.31.236:31137/jaeger
in_cluster_url: http://tracing/jaeger
编辑 kiali configmap 后,需要删除并重新生成 kiali pod,好让配置挂载生效,执行语句如下
kubectl delete pod -n istio-system $(kubectl get pod -n istio-system | grep -i kiali | awk '{print $1}')
执行完后,再次查看 kiali pod
[root@k8s-master k8s]# kubectl get pods -n istio-system|grep kiali
kiali-667b888c56-nt27g 1/1 Running 0 15m
查看发现 url 值已经生效:
[root@k8s-master k8s]# kubectl -n istio-system exec -it kiali-667b888c56-nt27g -- cat /kiali-configuration/config.yaml
auth:
openid: {}
openshift:
client_id_prefix: kiali
strategy: anonymous
...
external_services:
custom_dashboards:
enabled: true
tracing:
url: http://192.168.31.236:31137/jaeger
in_cluster_url: http://tracing/jaeger
再次刷新访问 kiali,就会在左侧栏出现Distributed Tracing,点击它,就会打开jaeger,效果同上!
四、kiali jaeger 流量关联
以上的操作中通过 kiali 可以打开 jaeger 了,还可以通过实际流量将 kiali 和 jaeger 关联起来,首先打入一些流量,这里采用的是 istio 的官方用例 bookinfo:
while true; do sleep 1;curl http://192.168.31.16:32223/productpage; done
访问 kiali 的 service 菜单标签:
![](https://img-blog.csdnimg.cn/img_convert/da71cae52a6d111a2ecec21740fb7e03.png)
双击 productpage 进入微服务,然后选择标签页 Traces,再点击蓝色圆圈(trace 点)后会显示该 tracing 的路径信息,然后再选择链接(View Trace in Tracing):
![](https://img-blog.csdnimg.cn/img_convert/e63589b5839490ea747600796f39ccb4.png)
点击View in Tracing,效果如下:
![](https://img-blog.csdnimg.cn/img_convert/e912ed516e6055dd1c41d77f439e2110.png)
点击下面的istio-ingressgateway: productpage.default.svc.cluster.local:9080/productpage
![](https://img-blog.csdnimg.cn/img_convert/29f918cda492a9b22c650b65e0cf6bfb.png)
效果如下:
![](https://img-blog.csdnimg.cn/img_convert/86e4f7c6d52303e96351f55f3de05aa0.png)
本文参考链接: