概述
注意:在使用阿里云Kubernetes容器服务Istio 1.0的过程中,如果遇到类似CRD版本问题,请参考我们提供的问题分析。 我们会持续更新遇到的问题及其解决方法。
本系列文章已经通过一个官方示例演示了如何部署应用到上述Istio环境中,并演示了如何设置智能路由、分布式追踪等。
阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验
阿里云Kubernetes Service Mesh实践进行时(2): 通过示例深入Istio
阿里云Kubernetes Service Mesh实践进行时(3): 智能路由
阿里云Kubernetes Service Mesh实践进行时(4): 分布式追踪
阿里云Kubernetes Service Mesh实践进行时(5): 遥测数据收集、查询及可视化
阿里云Kubernetes Service Mesh实践进行时(6): 故障诊断与检测工具Weave Scope
阿里云Kubernetes Service Mesh实践进行时(7): 可观测性分析服务Kiali
本文继续使用此示例来尝试 Istio 的遥测数据收集、查询及可视化等功能。
Prometheus 是 CNCF下的一款开源的为云原生应用程序提供实时监控、警报和时间序列数据库功能的系统。
收集遥测数据
首先请参照[官方文档](中定义的Metrics和日志配置内容,创建一个YAML文件new_telemetry.yaml
。
使用 istioctl
命令创建新配置,如下:
istioctl create -f samples/bookinfo/new_telemetry.yaml
Created config metric/istio-system/doublerequestcount at revision 2611607
Created config prometheus/istio-system/doublehandler at revision 2611608
Created config rule/istio-system/doubleprom at revision 2611609
Created config logentry/istio-system/newlog at revision 2611610
Created config stdio/istio-system/newhandler at revision 2611611
Created config rule/istio-system/newlogstdio at revision 2611612
在Kubernetes环境中,执行以下命令验证prometheus服务是否已正常运行:
kubectl -n istio-system get svc prometheus
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus ClusterIP 172.21.9.66 <none> 9090/TCP 16h
查询遥测数据
确保prometheus服务已正常运行之后,在浏览器中打开BookInfo应用程序的URL: http://{EXTERNAL-IP}/productpage
,或者执行多次: curl http://{EXTERNAL-IP}/productpage
执行以下命令打开Prometheus UI:
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090 &
Mixer内置了一个Prometheus适配器,并开放了一个服务用于收集监控信息。 Prometheus插件是一个Prometheus服务器,它预置了数据抓取配置,可以从Mixer收集metrics。 它提供了一个持久存储和查询Istio metrics的机制。
配置好的Prometheus插件有三部分:
- istio-mesh(istio-mixer.istio-system:42422): 所有Mixer产生的mesh metrics;
- mixer(istio-mixer.istio-system:9093): 所有特定的Mixer metrics。 用于监控Mixer自身;
- envoy(istio-mixer.istio-system:9102): 由envoy生成原始统计信息;
有关查询Prometheus的更多信息,请阅读[官方文档]
Prometheus 自带了 Web Console,可以进行任何 PromQL 查询和调试工作,非常方便,例如:
通过上图不难发现,Prometheus 自带的 Web 界面比较简单,适用于及时查询数据,方便 PromeQL 调试。
它并不是像常见的 Dashboard,在一个页面尽可能展示多的数据,下一节讲述如何使用Grafana来可视化这些数据。
使用Grafana可视化遥测数据
在Kubernetes环境中,执行以下命令验证Grafana服务是否已正常运行:
kubectl -n istio-system get svc grafana
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
....
执行以下命令打开Grafana UI:
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 &
Grafana插件是一个预先配置好的Grafana实例,基于基础镜像(grafana/grafana:4.1.2),在其中加入了Prometheus数据源,以及安装了Istio Dashboard。Istio和Mixer的初始安装中就会初始化一个缺省的对所有服务生效的全局Metrics。Istio Dashboard就是依赖这一默认Istio metrics配置和Prometheus插件来完成工作的,如下所示展现了不同的仪表板页面。
Istio Dashboard:
Mixer Dashboard:
Pilot Dashboard:
总结
我们可以利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。本系列前面的文章已经通过一个官方示例演示了如何部署应用到上述Istio环境中,并演示了如何设置智能路由、分布式追踪等,本文则是继续使用此示例来尝试 Istio 的遥测数据收集、查询及可视化等功能。 欢迎大家使用阿里云上的容器服务,快速搭建微服务的开放治理平台Istio,比较简单地集成到自己项目的微服务开发中。