本文介绍了如何使用成熟的经典架构ELK(即Elastic search,Logstash和Kibana)构建分布式日志监控系统,不少公司采用该架构构建分布式日志系统,包括新浪微博,freewheel,畅捷通等。服务器
背景
日志,对每一个系统来讲,都是很重要,又很容易被忽视的部分。日志里记录了程序执行的关键信息,ERROR和WARNING信息等等。咱们能够根据日志作不少事情,作数据分析,系统监控,排查问题等等 。可是,任何一个中大型系统都不多是单台Server,日志文件散落在几十台甚至成千上万台Server上,这给基于日志的数据分析、问题排查都带来了很大困难。架构
Centralized Logging框架
ELK
集中式日志存储(Centralized Logging)的概念应运而生,将产生在各台Server上的日志统一收集到一个日志平台中。ELK就是专门作这个事情的。ELK是Elasticsearch(如下简写为ES)+Logstash+Kibana的简称。ES负责数据的存储和索引,Logstash负责数据的调整、过滤、传输,Kibana负责数据的展现。分布式
Ealsticsearch
首先说ES,它是一个基于Lucene的优秀的存储引擎,咱们也能够把它看作一个PB级别的NoSQL DB。支持CRUD,多字段查询,Aggreagation,全文检索,能够说涵盖了各类各样的查询需求。 它自带了Replication和Sharding的功能,经过简单的配置就能够作数据复制和分片。而且,ES在NRT(Near Real Time)方面作了一些优化,使得应用在实时性方面有很好的表现。工具
Logstash
Logstash是一个很是灵活的数据处理和传输工具。咱们能够再也不须要本身写一堆wget, scp, Socket代码,来传输咱们的数据。Logstash统一实现了每一环节的数据传输,咱们只须要关注数据处理的逻辑。 咱们也再也不须要去学习各类各样的API,去发现如何获得数据(例如tail -f),如何写入数据(例如写入ES或MongoDB)。Logstash预置了一堆input & output plugin,经过配置就能够实现实时增量数据的流出和流入。例如咱们用到的file input 和ES output 都已经有了。oop
Kibana
Kibana是一个强大的数据展现工具。大多数状况下,不须要开发任何代码,就能够获得一个Dashboard。
须要作的是:
(1)把数据放到ES中
(2)是在Kibana页面上配置报表模版,或按照规则写一套报表模版。性能
Architecture学习
FreeWheel - UI - Log Platform Architecture优化
上图是日志系统的架构图。咱们的数据源是四个模块的日志文件,经过Logstash将数据实时导入到MQ中,再从MQ把数据实时导入到ES中。
使用MQ的目的是:
(1)减少峰值压力
(2)对实时数据作处理,避免这个处理放在应用Server,形成对应用的负担。
同时,根据MQ中的数据作规则匹配,会触发相应的Alert。其中若是发现是Error信息,会存到Jira中,用于问题记录、派发和追踪。Error如何存到Jira中有一些策略来控制,包括Error判重,已修复Bug又再次Alert,等等 。小时级、天级别的Alert经过一个后台调度的任务框架直接和ES交互。
ES结合了Hadoop Plugin,经过Hadoop2作Map Reduce的计算。日志
FreeWheel - UI - Dashboard of Throughput & Response time
(Hidden Y-axis data and query criteria)
最后就是Kibana,经过读取ES数据,来提供报表展现。咱们如今是Kibana3&4混用,主要是使用Kibana3,并在Kibana3基础之上开发了一些Plugin。例如Menu,可选时区的Datepicker等。Kibana4刚刚发布没多久,并非十分完善,因此咱们尚未彻底切换到4上。目前有一个报表是使用Kibana4开发的,用到了4提供的新功能,例如Percentile的Aggregation,多级Aggregation等。
日志平台应用
FreeWheel - Application on Log Platform
在前边咱们也提到一些了,有了这个日志平台的数据以后,咱们能够作不少事情。
(1)日志查询、问题排查、上线检查
(2)服务器监控,应用监控,错误报警,Bug管理
(3)性能分析,用户行为分析
总结日志平台上线后,解决了不少原有的问题,它的重要性愈来愈强,将来咱们的计划以下:(1)更灵活的报表。Kibana解决了基础的报表需求,但不能实现逻辑复杂的报表。考虑扩展Kibana,支持定制化图表+Kibana混合而成的Dashboard。(2)更强大的报警。参考或结合Watcher,Zabbix等,实现更强大更易用的报警配置。