idou老师教你学istio:监控能力介绍

通过了一年多的开发和测试,istio 于北京时间7月31日发布了1.0版本,而且宣布1.0版本已经能够成熟的应用于生产环境。对于 istio 的各项主要功能,以前的文章已经介绍的很是详细,而且还会有更多的文章来分析原理和实践功能。今天咱们主要介绍的服务是 istio 流量监控能力。架构

咱们知道每一个 pod 内都会有一个 Envoy 容器,其具有对流入和流出pod的流量进行管理,认证,控制的能力。Mixer 则主要负责访问控制和遥测信息收集。app

如拓扑图所示,当某个服务被请求时,首先会请求 istio-policy 服务,来断定是否具有访问资格,若具有资格则放行反之则请求不会被下发到服务。这一切的访问信息,都会被记录在 Envoy 中,以后会上报给 mixer 做为原始数据。遥测数据的收集及其余功能彻底是灵活可控的,你既能够配置新的收集指标和日志,也能够彻底禁用这些功能。

1.Prometheus 的应用和指标介绍

Prometheus 是一款开源的监控和告警系统,2016年加入 CNCF,以其灵活的检索语言,高效的数据存储方式以及多维度的数据模型使得愈来愈多的人使用。Istio 自0.8开始就默认的将 Prometheus 包含在内,咱们能够经过查询 service 或者 pod 看到普罗的运行状态和地址。点开 Prometheus 界面,UI 十分简洁明了。curl

用户在 Expression 内输入想要查询数据的表达式,而且再输入的过程当中,普罗还会在已有的指标中作出提示方便用户查找。咱们输入一个简单的查询表达式 istio_requests_total,点击 Execute,在图形界面中,将鼠标放到图中的折线能够看到请求的详细信息。

详细信息中的每一项均可以做为选定参考指标的特性,例如咱们须要查询返回值为200的 productpage 请求总数,就能够在以前的表达式中添加大括号和限定条件。

Istio 支持和容许用户本身定义新的遥测数据,而且在官网->任务->遥测->收集指标和日志中有详细的描述。用户能够自定义须要的监控指标进而能够再普罗查看监控数据结果。

2.Jaeger UI 的使用和介绍

Istio 配合 jaeger 能够解决端到端的分布式追踪问题。Jaeger 于2017年9月成为 CNCF 的成员。Jaeger 是一款开源的分布式追踪系统,由 Google Dapper 和 OpenZipkin 社区联合推进。分布式

Jager 主要可使用在微服务的架构上来完成分布式上下文广播,分布式事务监控,根因分析,服务依赖关系分析,性能/延迟优化等功能。

Jaeger 的界面极其简洁,在首页面选择你想了解的服务(productpage)以及选择你想观测的时间范围(过去两天),然后点击 find trace 按钮,页面就会显示过去两天内访问 productpage 的全部 trace。点击 trace 的名字,则会跳转到详情界面。

这个界面中你能够看到每一个请求可能会分为不止一个的子请求,以及这个请求的处理时间。例如咱们访问 productpage,productpage 会请求 details 和 reviews 这两个服务,那么初始的请求就会分为两个子请求,一个请求 details 的内容另外一个请求 reviews 的内容。Details 部分的请求总耗时4.99ms,reviews 部分的请求耗时5.61ms。内容返回并处理后,整个 productpage 的请求耗时21.32ms。这个详情界面不只会体现每一个请求的耗时也反映服务之间的调用关系。根据 istio 官方给出的解释,咱们知道 istio proxy 根据 http 部分 headers 来概括和合并请求的。

对于一个结构复杂,流量庞大的服务网格,追踪全部的调用不但不利于收集有效数据,还会形成冗余,浪费资源等问题,因此在制定监控服务的时候也须要去设定其采样频率。对于 Bookinfo 这种示例型应用,咱们的采样率能够设的高一点,对于大型应用就要进行适当的下降。 调整采样率一共有两种方式。 •在建立服务网格以前,咱们能够提早设定好采样频率,在Helm模板的values.yaml文件中,pilot 内的 traceSampling 属性能够对采样频率进行修改。

打开 istio/chart/pilot/templates/deployment.yaml能够看到一个简单的赋值过程。

正在运行的服务网格,对 deployment istio-pilot 进行编辑。首先查看全部的deployment:
而后对其进行编辑,搜索 PILOT_TRACE_SAMPLING这个属性,并对其值进行修改:

咱们先打开 jaeger UI肯定过去一个小时没有任何对productpage的访问。

然后将 PILOT_TRACE_SAMPLING的值从原有的100改成50。修改并保存后会有提示信息显示istio-pilot已经被修改。

稍等片刻后,咱们使用脚本 curl productpage 10次。再次在jaeger UI上选择productpage选择过去一小时,点击Find Trace,会发现此次只检测到4个trace。咱们在用相同的脚本再运行一次,发现检测到10个trace。至此咱们一共curl product page 20次总共得到10次 trace,符合总次数的50%。微服务

如今咱们用相同的方法,将 PILOT_TRACE_SAMPLING 改成100%而且稍等片刻。使用相同的脚本 curl 10次 product page,再点击 Find trace,如今总共有20个 Trace,也就是先前的10个 trace 加上后来 curl 的10次,证实 PILOT_TRACE_SAMPLING修改完毕会采集全部的请求。性能

3.华为云istio服务中简明监控介绍

在组件详情界面中除去 CPU 使用率,内存使用这种基本的监控外,华为云提供了另外两项简明流量监控,分别是 RPS (平均处理请求次数)和 RT(平均响应时延)。RPS 以分钟基本时间单位,纵轴则以处理请求次数为单位,用户能够直观的看到本身的应用单位时间内须要处理的请求数量。若 RPS 太高,则用户能够适当的采用相应措施,报障请求的高效处理。测试

RT 也是以分钟为单位,可是纵轴则是该时间段内平均的请求响应时间。若是个别时间段请求时延太高,用户则须要对本身服务进行分析。

组件详情这个界面更多的仍是提供一个 粗粒度的流量监控,将应用的工做关键信息最直接,最明确的呈现给用户。方便用户对本身的应用,资源,服务规划进行调整和改进。在从此,华为云会提供维度更多的监控,分析等服务。

Istio提供不少即插即用的服务,用户不须要修改本身的代码,也不须要从新构建本身的应用即可以直接享用istio带来的“红利”。可视化的监控服务,可修改的监控内容,能够更好地让用户了解本身应用的工做状态。本文只介绍了入门级的istio监控内容,除上文内容外,监控服务还有更多的功能等待用户去研究和使用。Istio就像一座金矿,而金子只属于勤奋的淘金工人。优化

相关文章
相关标签/搜索