数据传输
常用方式如下:
- UDP传输
数据处理单元提供服务器的请求地址,数据采集后通过UDP协议与服务器建立连接,然后把数据发送过去。 - Kafka传输
数据采集后发送到指定的Topic,然后数据处理单元再订阅对应的Topic,即可从Kafka消息队列中读取到对应的数据。
无论哪种,数据格式都十分重要,尤其是对带宽敏感以及解析性能要求比较高的场景,一般数据传输时采用的数据格式有两种:
- 二进制协议,最常用的就是PB对象,它的优点是高压缩比和高性能,可以减少传输带宽并且序列化和反序列化效率特别高。
文本协议,最常用的就是JSON字符串,它的优点是可读性好,但相比于PB对象,传输占用带宽高,并且解析性能也要差一些。
数据处理
聚合并存储收集来的原始数据。
数据聚合通常有两个维度:
- 接口维度聚合
- 把实时收到的数据按接口名维度实时聚合在一起,得到每个接口的实时请求量、平均耗时等信息。
- 机器维度聚合
把实时收到的数据按照调用的节点维度聚合在一起,这样就可以从单机维度去查看每个接口的实时请求量、平均耗时等信息。
聚合后数据需持久化到DB,所选用DB一般两种:
- 索引数据库
e.g. Elasticsearch,以倒排索引的数据结构存储,需要查询的时候,根据索引来查询 - 时序数据库
e.g. OpenTSDB,以时序序列数据方式存储,查询时按照时序如1min、5min等维度来查询。
数据展示
把处理后的数据以Dashboard方式展示给用户。
数据展示有多种方式,比如曲线图、饼状图、格子图。
- 曲线图
一般是用来监控变化趋势的,比如下面的曲线图展示了监控对象随着时间推移的变化趋势,可以看出来这段时间内变化比较小,曲线也比较平稳。 - 饼状图
一般是用来监控占比分布的,比如下面这张饼图展示了使用不同的手机网络占比情况,可见Wi-Fi和4G的占比明显要高于3G和2G。
格子图
主要做一些细粒度的监控,比如下面这张格子图代表了不同的机器的接口调用请求量和耗时情况,展示结果一目了然。
总结
服务监控在微服务改造过程中十分重要,没有强大监控能力,就无法掌控各个不同服务的情况,在遇到调用失败时,如果不能快速发现系统的问题,业务就成了灾难。
参考
- 如何监控微服务调用


