为了账号安全,请及时绑定邮箱和手机立即绑定

基于Metrics+Flume+Kafka+ES实现服务监控

标签:
Premiere

背景

因为公司的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:

webp

通俗的讲:

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

现在是楼主自己的demo:


webp

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


webp

可以看出这个接口的名字,以及一天的总失败数,下图是一个失败次数的可视化展示,另外楼主还对一次RPC调用返回的结果集合也做了统计,这里就不截图了.

最后将服务器上的日志,flume进行日志采集,通过kafka配置topic消费到ES中,可视化后的结果如下:


webp



作者:ninetyhe_
链接:https://www.jianshu.com/p/3dd1bda20cac


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消