jasper的技术小窝

关注DevOps、运维监控、Python、Golang、开源、大数据、web开发、互联网

浅谈storm的监控和告警

作者:jasper | 分类:storm | 标签:     | 阅读 3119 次 | 发布:2015-03-26 12:26 a.m.

大概是因为本来就是主要做监控这一块的吧,所以每当一个新的应用上去了之后,就会想到要做一个对这个应用的监控,storm自然也不例外,下面我就仅谈谈我个人的看法。其实在实现方式上并不困难,只是提供出来一种解决问题的方式罢了。

其实在storm ui上已经提供了很详细的相关数据指标了,但是没有告警功能,这对于使用者来说是不能忍受的。我认为storm的监控和告警可以从下面几个方面着手:

一、OS层面的监控

这一块我就不多说了,SA会帮我们搞定。

二、对上游数据的堆积做监控

上游数据一般的话就是队列了,一般来说,用一般都会选用kafka的,对于kafka里面数据堆积的监控,我就不多费口舌了,详情请见我的另一篇博文kafka的监控与告警。但是要注意下,如果你用的是官方提供的storm-kafka的spout,那么会有些许的不一样了,因为storm-kafka中的offset是写在storm的Zookeeper上,所以要算lag的话,需要从kafka上取到logsize,然后在storm的Zookeeper上获得offset,这样就能算出堆积量了,这一块不多说。

三、对storm集群中的进程做监控

1.nimbus和ui:

其实对于这两个最直接的方式就是查看进程在不在,我们可以很简单地运用java自带的jps命令来探测;比如“jps -l | grep storm | grep nimbus”来判断nimbus,用“jps -l | grep storm | grep ui”来判断ui。我认为这种最简单暴力的方式反而是最有效的。

2.supervisor:

我这边对于supervisor的监控是建立在nimbus和ui都存活的情况下,我们可以通过storm提供的restful的api,很容易地得到当前在集群里运行的supervisor。访问host:port/api/v1/supervisor/summary 就能拿到一个json格式结果(这里的host:port即为访问ui的那么host:port),结果中包含每个supervisor的详细信息,那么就能很轻易地拿到当前运行的supervisor,再和期望的做个对比,就能做出判断。

四、对topology做监控

一个storm集群可能运行多个topology,在我们知道topology name列表的前提下,我们可以很方便地通过restful api获得当前运行的topology;访问host:port/api/v1/topology/summary就能获取topology的详细信息,和期望的做对比,结果一目了然。

五、对tuple的fail数量做监控

这一块其实我认为很重要,如果出现fail的情况就应该马上报出来。当然这是针对于具体的topology来说的,其实在四中,我们也可以顺便拿到每个运行中的topology id,因为这是storm随机生成的,所以事先给不出。针对每一个topology id我们同样可以由host:port/api/v1/topology/topology_id,在返回结果中,你会发现有你几乎想要的任何数据,就和在storm ui上面看到的一样,包括spout、bolt还有几个时间窗里面的emitted,acked,failed的数量,你可以对他们进行判断。我个人认为只需要监控spout的fail数就可以了。

具体的代码我就不贴了,没什么难度,我开篇也说了,只是提供出来这种我监控的方式,关于storm ui提供的restful api的详细信息,请戳storm源码里的md


转载请注明出处:http://www.opscoder.info/storm_monitor.html

【上一篇】 没有了
【下一篇】 终于把博客后台改为Markdown了
其他分类: