不少人在搞ELK,不少人也在搞STORM。更多人在用传统的Nagios,Zabbix等监控工具。Jason Dixon在2012就意识到这些工具的问题是每一个人都想作到大而全,实际上咱们更须要的是一对小二精的组件拼装成一个个性化的解决方案。推荐你们去看一下他的演讲视频:https://speakerdeck.com/obfuscurity/the-state-of-open-source-monitorin...ios

这是Jason Dixon所构想一个组件图。他认为不一样的开源方案应该专一于提供好这些组件。
Caskey Dickson 也有一样的设想,而且提出目前的不少组件仍然是缺少好的提供者的(好比海量metric存储和任意维度聚合):https://www.usenix.org/conference/lisa13/working-theory-monitoringnginx

这是他在ppt里画的一个组件图,而且评价了一下主流的开源组件。git

受到前辈们的影响,这个是我厂的一个告警平台的数据流图。下面按照顺序解释一下这个流程图中的各类组件:redis
- 采集/收集:数据可能来自于业务的db,可能来自于日志文件,多是由业务程序内置上报的。经过各类手段采集收集到“原数据库”里。什么是“原数据库”?好比kafka队列。好比logstash上报前把数据汇总到的redis数据库。“原数据库”的存在是为了把分散的数据汇总到一处,方便后续的处理。
- 索引:索引主要是为了日志存在的。为了让日志能够检索,须要把日志数据进行切分,提取出字段和关键字录入到“检索库”里。这就是著名的ELK最擅长的事情。Logstash负责索引操做,Elasticsearch充当检索库的角色。
- 统计:指标库最多见的就是给每一个ip存放一份cpu使用率的时间序列。对于这种状况,原数据采集了以后直接录入指标库就好了。另一种好比是nginx的access log,采集到以后须要通过统计才能得出某某url在5分钟内被访问了xx次的数据。统计最简单的形式好比statsd,复杂的能够用storm写自定义的流式计算任务,更复杂的甚至涉及机器学习,好比summo logic。指标库通常使用的是opentsdb等时间序列数据库,可是我强烈推荐Elasticsearch:http://taowen.gitbooks.io/tsdb/content/
- 异常检测:传统的告警就是比对一个静态的阈值。对于错误率,访问延迟等指标用静态阈值确实是没有问题的。可是对于5分钟内的收入,访问人数等综合的业务指标很难用静态阈值去作检测异常。复杂的异常检测会利用曲线的时间周期性,和相关曲线之间的相关性去定义动态的阈值。etsy的skyline是开源组件里比较著名的一个。
- 告警:告警和异常检测是两个过程。不是每一个异常都值得通知运维跟进处理(起码能够作一个频率收敛),也不是把原始异常以xx小于xx这样的形式告诉给运维就能够了(能够把告警相关的故障一块儿通知了)。这里个从异常到告警的过程须要作到确认这个异常是一个值得通知的告警,而且可以作一个初步的故障定位。最简单的定位的手段是就把其余部门的告警(好比网络部门的网络质量告警,安所有门的DDoS告警),以及流程单据(发布单)作为事件归入事件库。经过查询事件库定位缘由。
在这样的一个提下下,不少零散的工具作的事情被整合在了一块儿:算法
- 拨测:定时curl一下某个url,有问题就告警。这个是走 原数据=>直接录入为异常=>告警
- 日志集中检索:ELK的经典用法。走 原数据=>检索库
- 日志告警:5分钟Error大于xxx次告警。走 原数据=>实时统计出指标=>检测异常=>告警
- 指标告警:cpu使用率大于xxx告警。走 原数据=>录入到指标库=>检测异常=>告警
把不一样的告警和监控策略整合到同一个数据管线的好处是简化了总体的架构,剔除了重复的模块(好比上报和原数据汇总等模块)。并且有利于各司其职,专业化纵深发展。目前开源组件还比较缺少的有这么几块:数据库
- 指标库须要海量存储海量聚合能力,开源的有 Druid.io Elasticsearch Crate.io 等
- 异常检测,缺少真正实用的。算法其实不用很复杂
- 故障定位和收敛,缺少真正实用的。Flapjack的实现太简单了,Riemann又过小众了
- 实时统计,缺少成熟的解决方案。Storm就是一个底层的执行引擎,而Spark还缺乏时间窗口等抽象。
- 日志自动分类,尚未开源工具能够作到 summo logic 那样的效果
- 自定义曲线和仪表盘:相似kibana的工具仍是太少
我厂的监控告警平台固然是把这些都实现了。不少创业公司(好比刚冒出来的jut.io)也整合出了不错的彻底解决方案。可是更多的小厂仍是在用Nagios和Zabbix等传统的工具,再加上个ELK看日志。开源社区在方面仍是大有可为的。说实话,这个东西卖钱很差卖。更多的公司仍是会选择拿开源工具本身搭一个凑合用的。安全