目前开源的组件如SkywalkingZipkin只能做到横向监控,没法针对某一时间段方法纵向监控和告警。基于这种痛点和对一些组件的了解,自己写了一套可满足自己业务需求的服务监控组件,结合了GrafanaLokiPromtailElasticsearchKafka等,可实现服务接口级监控、监控告警、告警日志在线查看等特性。

基础组件

设计思想

  1. Client收集服务调用信息后生成数据快照(Snapshot),通过Kafka定时上报到Server端。Client通过Promtail采集错误日志上报到Loki服务器。
  2. Server端统计聚合Client端上报的信息后落库ESLoki服务端接收到Client端上报的日志后存储至磁盘并生成索引。
  3. 通过Grafana整合统计信息和错误日志,通过丰富的仪表盘实时展示相关指标与分析结果。
  4. 当相关指标超过自定义阈值时,通过通知平台告警到相关研发人员,及时处理告警。

日志采集

日志采集使用的是较为轻量级的LokiLoki的搭建和使用可参考轻量级日志采集Loki搭建

需要在Grafana中配置Loki的信息,然后在Explore中展示日志。

效果

下面展示图是实际应用到项目中的大屏和监控效果图。

在调用链路视图中,可以查看到整个调用分析中,每一个应用的调用类型服务名方法名称实例名称、耗时区间,以及平均耗时等。能一步定位到哪一个方法存在性能瓶颈。

借助于Grafana的特性,可让数据大屏展示更丰富:

  1. 解决服务黑盒问题,让服务调用可视化,纵向分析服务调用;
  2. 可及时发现服务调用失败、超时信息并告警,并可进行性能指标分析,让研发人员及时发现并解决问题;
  3. 全方位、立体化、可视化监控。可选择具体系统编码、应用、方法进行查看,可根据各列进行排序。无需手动刷新,系统动态进行刷新(刷新时间可自定义);
  4. 可动态调整超时时间设置(应用无需重启),可自定义设置单个方法的超时时间;
  5. 结合Grafana特性可自定义告警阈值。可根据业务调整告警阈值。

性能

服务监控组件通过切面捕获服务调用信息,捕获数据后异步存储后通过消息中间件上报到服务端,客户端无阻塞,正常情况下性损极小(微秒级)。