使用Prometheus进行监控是Istio提供的监控能力之一。Istio提供丰富的监控能力,为网格中的服务收集遥测数据。Mixer是负责提供策略控制和遥测收集的Istio组件。
Istio通过Mixer实现流量监控的基本流程如下图:每个pod内有一个service和proxy,Envoy容器实现proxy功能,对流入和流出pod的流量进行管理、认证和控制。Mixer则主要负责访问控制和遥测信息收集。当某个服务被请求时,首先会请求istio-policy服务,来判定是否具备访问资格,若具备资格则放行,反之则请求不会被下发到服务。这一切的访问信息,都会被记录在Envoy中,之后会上报给Mixer作为原始数据,并生成具体的监测指标。
Figure 1 mixer拓扑
Mixer配合一系列后端基础设施,为运维提供丰富而深入的控制和监测,并且不额外增加服务开发人员负担。后端提供用于构建服务的支持功能,访问控制系统,遥测捕获系统,配额执行系统,计费系统等。Mixer开放了Istio服务与不同的基础设施后端的交互能力,隔离用户程序和各个基础设施后端的实现细节。Istio通过丰富组件的边界交互,减少系统复杂性,消除服务代码中的策略逻辑并将控制权交给运维。
Mixer处理不同基础设施后端的是通过使用通用插件模型实现的。每个插件都被称为 Adapter,Mixer通过它们可对接到不同的基础设施后端,这些后端可提供日志、监控、配额、ACL检查等核心运维功能。这些功能灵活可控,你既可以定制新的基础设施后端,也可以完全禁用这些功能。
Figure 2 mixer 及其适配器
Prometheus是一款开源的监控和告警系统,将所有信息存储为时间序列数据,实现监控方式,实时分析系统运行的状态、执行时间、调用次数等,以找到系统的热点,为性能优化提供依据。Prometheus系统自2016年加入CNCF,以其灵活的检索语言,高效的数据存储方式以及多维度的数据模型被越来越多的人使用。Istio自0.8版本开始默认将Prometheus包含在内,Mixer支持对接到Prometheus监控设施的Adapter。用户可以通过查询service或pod看到Prometheus的运行状态和地址。也可以通过简洁明了的Prometheus的UI界面查看监测数据。
接下来通过实践说明如何使用Prometheus查询Istio指标,使用基于网页的界面进行指标查询。
1.验证Prometheus是否在集群中运行(默认情况下Prometheus的设置包含在istio.yaml和istio-demo-auth.yaml中)。在安装istio的Kubernetes环境中,执行如下命令:
2.通过浏览器访问http://localhost:9090/graph,在网页顶部的“Expression”输入框中,输入要查询的命令,Prometheus能够根据输入自动提示可输入的命令,然后单击 Execute 按钮。
- 查询所有服务的请求总数:istio_request_bytes_count
- 查询指定服务的请求总数:(如查询对 productpage 服务的所有请求的总数)istio_request_bytes_count{destination_service=“productpage.default.svc.cluster.local”}
- 查询指定时间范围内对指定服务的请求总数:(如查询过去5分钟内对所有 productpage 服务的请求率)
istio_request_bytes_count {destination_service=~“productpage.*”, response_code=“200”}[5m])
如下图,Prometheus在图形界面中也提供了直观的显示。将鼠标放到图中的折线可以看到请求的详细信息,详细信息中的每一项都可以作为选定参考指标的特性。
同时Istio支持和允许用户自己定义新的遥测数据,用户可以自定义需要的监控指标进而再使用Prometheus查看监控数据结果。
Istio通过mixer组件无缝对接Prometheus监控服务,满足用户对路由网关、应用服务、资源使用以及自定义指标等实时监控,帮助用户在使用istio的过程中,快速实现对关键业务的运维需求。
相关服务请访问https://support.huaweicloud.com/cce/index.html?cce_helpcenter_2019