背景
因为公司的RPC框架不支持HTTP的服务端,所以无法在服务管理平台实现基于HTTP的RPC调用的服务可视化治理,所以楼主基于现有的框架实现了一套自己的服务集群监控,因为本身框架不一定适应业务,所以楼主重写了框架里的个别类,具体后面会讲.
技术引进:
Metrics(vertx的开源子项目的一个分支,是天然的监控框架,本文核心也围绕这个展开)
Flume(日志采集工具,将日志落服务器,然后通过flume采集)
Kafka(现主流的消息中间件,这里不作复述,这里用到消费flume里面的日志)
ElasticSearch(基于Lucene的搜索服务器,因为楼主不是主要做索引,只是入门级别,基于es做了一个可视化的平台)
整体架构组成 :Metrics+Flume+kafka+ElasticSearch
Metrics
引用官网的介绍:作为一款监控指标的度量类库,它提供了很多模块可以为第三方库或者应用提供辅助统计信息, Metrics提供了Gauge、Counter、Meter、Histogram、Timer等度量工具类以及Health Check功能。(楼主本次因为业务的适应,本次用Meter和Timer)
Metrics提供了多种类型的
Meter:
用来计算事件的速率。 例如 request per second。 还可以提供1分钟,5分钟,15分钟不断更新的平均速率(具体打什么时间,可以重写,楼主自己就重写了),因为这里meter已经提供了统计次数的,所以如果统计一额接口的统计成功数,可以直接用这个,而不需要用counter那个度量类.
下图是官方的Demo:

通俗的讲:
举个的例子,我想统计请求的次数,我只需要在调用方法后,调用meter的mark方法即可埋点.这个时候,就会在这次调用,使用后计数器加一,有些人说,我自己每次调用打一行日志也可以啊,但是!因为你如果是同步实时的打日志,在qps上万的情况下,你会发现你打日志的线程也占用了你资源,而且这样每次请求打一次,你会发现,你的磁盘也会出现瓶颈,当然,你也会说,我可以用log4j2采用异步打日志,如果你用过异步日志的时候,你会发现日志是隔一段时间打一次,而且当你清空日志的时候,还是会出现磁盘的阻塞.而Metics的打日志的时候,你可以完全自己设置打印时间,譬如30秒一次或者几分钟一次一样可以记录这时间段的服务情况.
现在是楼主自己的demo:

可以看出来,只要抛出一次,我在这调用这个mark方法,这个时候,metrics会自动统计你的失败次数,并在你设置的时间内打出来,因为楼主重写了他的log方式,方便es可视化,所以这里的日志是我的格式:

可以看出这个接口的名字,以及一天的总失败数,下图是一个失败次数的可视化展示,另外楼主还对一次RPC调用返回的结果集合也做了统计,这里就不截图了.
最后将服务器上的日志,flume进行日志采集,通过kafka配置topic消费到ES中,可视化后的结果如下:

作者:ninetyhe_
链接:https://www.jianshu.com/p/3dd1bda20cac
随时随地看视频