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

背景

因为公司的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中,可视化后的结果如下:


Timer 计时器

Timer是一个Meter和Histogram的组合。这个度量单位可以比较方便地统计请求的速率和处理时间。对于接口中调用的延迟等信息的统计就比较方便了。如果发现一个方法的RPS(请求速率)很低,而且平均的处理时间很长,那么这个方法八成出问题了。

同样,通这是里官方的一个Demo:


上图中注释的地方就是你自己写的逻辑,譬如一次方法调用:

这里是楼主的自己业务的调用Demo:


可以看到我每一次http的调用后,通过Timer的context进行埋点统计,这个就会记录,下图的数据,这里用网上的图,因为我自己重写了图2;


图1

可以看到这里统计了调用次数,最大,最小的次数,以及平均数,中位数,以及TP75-TP99的时间.因为需要基于elasticSearch消费日志,所以楼主重写了那个report的类,如下:

下面是楼主重写的的上报类,里面可以支持传参数,以及你自己想要格式:

图二

在日志中的表示如下:


最后同样把日志落FLume,通过kafka配置topic消费,如ES,可是化后的如下图:


可以看到这里是可视化的监控,可以看服务的tp98的实时情况,当然可以根据自己的喜欢配置TP99,TP95的情况.



基于其他类型,楼主没有做过多的研究,直接引用官方的Demo:


这个Gaugets最简单的度量指标,只有一个简单的返回值.比如,我们类型为Gauge的计数器来记录某个服务目前开通的城市个数

Metric.Gauge("Service Cities Count", () => Cities.Count, new Unit("个"));

Histogram 


Histogram直方图是一种非常常见的统计图表,Metrics通过这个Histogram这个度量类型提供了一些方便实时绘制直方图.因为Timer已经集成了Histogram,而且两者的输出结果基本一致,而且Timer能返回一定的时间段,所以这里不作复述,个人可以根据喜好使用,为了形象,这里引用一个网上一个被copy了无数次的列子(也不知道真正的作者是谁)

网上图

最后是初始化Meterics的Demo,这里的LmAsReport就是楼主自己重写的那个上报的类


另外下面是官方的Demo:


另外该框架还支持了其他类型的上报,譬如控制台,因为实际中我们大多数都是通过日志,所以这里不做其他类型的演示了.

附:对于框架的上报方法,可以自己进行重写,可以加上自己想要传递的参数,可以自行实现,因为本来框架源码就不多,所以可以进行自己修改重写.(楼主自己重写的类后续会传到gitbub)


因为也是第一次接触,所以后续会继续改进,另外也会进行自己的重写一些框架里的类目.相比这个框架也不陌生,如果上述有说错的地方,欢迎指正,一起学习.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容