如何监控微服务

首先要搞清楚三个问题:监控的对象是什么?具体监控哪些指标?从哪些纬度进行监控?

  • 监控的对象是什么?
  • 具体监控哪些指标?
  • 从哪些纬度进行监控?

监控的对象可以分为四个层次,从上到下可以归纳为:

  • 用户端监控:通常指业务直接对用户提供的功能的监控。
  • 接口监控:通常指业务提供的功能所依赖的具体RPC接口的监控。
  • 资源的监控:通常指某个接口依赖的资源的监控。比如对redis的监控就是属于资源监控。
  • 基础监控:通常指对服务器本身的健康状况的监控。cpu,I/O读写,带宽等。

监控指标:

  • 请求量。请求量分为两个维度,一个是实时请求量QPS( Queries Per Second),一个是统计请求量PV(Page View)。
  • 响应时间。大多数情况下,可以用一段时间内所有调用的平均时耗来反映请求的响应时间。
  • 错误率。一段时间内调用的失败次数占调用的总次数的比率来衡量。

监控维度:

  • 全局维度。从整体角度监控对象的请求量、平均耗时以及错误率,全局维度的监控一般是为了让你对监控的对象的调用情况有个整体的了解。
  • 分机房维度。一般是为了业务的高可用性,服务通常部署在不止一个机房,需分机房分别监控。
  • 单机维度。不同机器的同一监控对象的各种指标也会有差异。
  • 时间维度。
  • 核心维度。业务上一般会依据重要性程度对监控对象进行分级。最简单的可分为核心业务和非核心业务。两者分开监控。

监控系统原理:
我们对服务调用进行监控,首先要能收集到每一次调用的详细信息,包括调用的响应时间,调用是否成功,调用的发起者和接受者分别是谁,这个过程叫做数据收集。采集到数据后,要把数据通过一定的方式传输给数据处理中心进行处理,这个过程叫做数据传输。数据传输过来后,数据处理中心再按照服务的维度进行聚合,计算出不同服务的请求量,响应时间以及错误率等信息并存储起来,这个过程叫做数据处理。最后再通过接口或者Dashboard的形式对外展示服务的调用情况,这个过程叫做数据展示。

可见,监控系统主要包括四个环节:数据采集,数据传输,数据处理和数据展示。
1.数据采集

通常有两种数据采集方式:
*
服务主动上报,这种处理方式通过在业务代码或者服务框架里加入数据收集代码逻辑,在每一次服务调用完成后,主动上报服务的调用信息。
*
代理收集,这种处理方式通过服务调用后把调用的详细信息记录到本地日志文件后,然后再通过代理去解析本地日志文件,然后再上报服务的调用信息。

2.数据传输

数据的传输方式:

  • UDP传输,这种处理方式是数据处理单元提供服务器的请求地址,数据采集后通过UDP协议与服务器建立连接,然后把数据发送出去。
  • Kafka传输,这种处理方式是数据采集后发送到指定的Topic,然后数据处理单元再订阅对应的Topic,就可以从Kafka消息队列中读取到对应的数据。

数据的格式:

  • 二进制协议:最常用的就是PB对象,它的优点是高压缩比和高性能,可以减少传输带宽并且序列化和反序列化效率特别高。
  • 文本协议,最常用的就是json字符串,它的优点是可读性好,但相比于PB对象,传输占用带宽高,并且解析性能也要差一些。

3.数据处理

数据处理是对采集的数据进行聚合并存储。数据聚合通常有两个维度:

  • 接口维度聚合,这个维度是把实时收到的数据按照接口名维度实时聚合在一起,这样就可以得到每个接口的实时请求量,平均耗时等。
  • 机器维度聚合,这个维度是 把实时收到的数据按照调用的节点维度聚合在一起,这样就可以从单机维度去查看每个接口的实时请求量,平均耗时等信息。

聚合后的数据需要持久化到数据库中存储,所选用的数据库一般分为两种:

  • 索引数据库,比如Elasticsearch,以到排索引的数据结构存储,需要查询的时候,根据索引来查询。
  • 时序数据库,比如OpenTSDB,以时序序列数据的方式存储,查询的时候按照时序如1min,5min等维度来查询。

4.数据展示
曲线图,饼状图,格子图等

你可能感兴趣的:(技术分享)