关于服务监控的思考
目前开源的组件如Skywalking
、Zipkin
只能做到横向监控,没法针对某一时间段方法纵向监控和告警。基于这种痛点和对一些组件的了解,自己写了一套可满足自己业务需求的服务监控组件,结合了Grafana
、Loki
、Promtail
、Elasticsearch
、Kafka
等,可实现服务接口级监控、监控告警、告警日志在线查看等特性。
基础组件
Grafana
:Grafana 搭建Loki
:轻量级日志采集Loki搭建Elasticsearch
:介绍及使用文档- 消息中间件:
kafka
- 服务监控组件(未开源):
service-profiler
设计思想
Client
收集服务调用信息后生成数据快照(Snapshot
),通过Kafka
定时上报到Server
端。Client
通过Promtail
采集错误日志上报到Loki
服务器。Server
端统计聚合Client
端上报的信息后落库ES
。Loki
服务端接收到Client
端上报的日志后存储至磁盘并生成索引。- 通过
Grafana
整合统计信息和错误日志,通过丰富的仪表盘实时展示相关指标与分析结果。 - 当相关指标超过自定义阈值时,通过通知平台告警到相关研发人员,及时处理告警。
日志采集
日志采集使用的是较为轻量级的Loki
。Loki
的搭建和使用可参考轻量级日志采集Loki搭建。
需要在Grafana
中配置Loki
的信息,然后在Explore
中展示日志。
效果
下面展示图是实际应用到项目中的大屏和监控效果图。
在调用链路视图中,可以查看到整个调用分析中,每一个应用的调用类型、服务名、方法名称、实例名称、耗时区间,以及平均耗时等。能一步定位到哪一个方法存在性能瓶颈。
借助于Grafana
的特性,可让数据大屏展示更丰富:
- 解决服务黑盒问题,让服务调用可视化,纵向分析服务调用;
- 可及时发现服务调用失败、超时信息并告警,并可进行性能指标分析,让研发人员及时发现并解决问题;
- 全方位、立体化、可视化监控。可选择具体系统编码、应用、方法进行查看,可根据各列进行排序。无需手动刷新,系统动态进行刷新(刷新时间可自定义);
- 可动态调整超时时间设置(应用无需重启),可自定义设置单个方法的超时时间;
- 结合
Grafana
特性可自定义告警阈值。可根据业务调整告警阈值。
性能
服务监控组件通过切面捕获服务调用信息,捕获数据后异步存储后通过消息中间件上报到服务端,客户端无阻塞,正常情况下性损极小(微秒级)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 彩虹马的博客!
评论