背景:之前做过渲染日志的记录工作,做过一些日志采集、日志分析及系统实时状况监控方面的工作,简单的学习过一些ElasticSearch的知识,而最近又有在学习大数据方面Hadoop和Storm方面的简介,就自己对这三个开源框架的了解和自己在日志记录分析方面的体验谈谈自己的想法,其中ElasticSearch、Hadoop、Storm等开源框架的学习体会也会在后续的JAVA学习开源框架中跟大家做分享,由于本人对这几个开源框架也属于入门阶段,如果有什么地方说的不对还请大家多多指正。
分析:公司的日志系统的主要功能我个人理解是两大块:其一是做监控端监控各个系统模块当前的运行状况,其二是根据日志进行分析为公司决策提供数据参考,下面就这两个大方向结合我所了解的ElasticSearch、Hadoop、Storm的特点跟大家谈谈我的想法。
首先,就实时监控方面的需求可能是需要统计当前的系统运行参数然后根据分析结果给出报告甚至是短信通知预警之类。公司现行的日志系统统计功能是用的ElasticSearch,它的运作机制是将各个系统的运行参数写入日志,然后将日志采集到ElasticSearch中,然后再通过Kibana进行统计分析呈现,这其中的过程是先存再读再统计,所有的统计结果都是来自已经保存到硬盘的数据。
而这里要提到的另外一个软件是Storm,它是一个流式数据处理框架,它可以通过读取数据流然后对数据流的内容进行统计分析然后就可以给出统计结果提供报告,它的逻辑是先算后根据需要进行存储,这里的存储内容是处理后的数据,当然完全可以是存储原始数据。
从这两个开源框架的特点可以看出在实时处理和统计方面Storm要比ElasticSearch更高效,Storm的统计是基于数据流拿网络传输过来的内存中的数据,而ElasticSearch则需要通过网络将内容存到硬盘,然后再从硬盘读到内存,从效率上来说就Storm更有优势;另一方面,在做渲染日志监控时出现一个尴尬就是渲染监控日志容量太大存储是个问题,但是如果采用Storm只存储统计处理后的数据这个就不是大问题了,所以在实时监控方面Storm要优于ElasticSearch。
其次,就日志分析方面的比较,ElasticSearch的查询:Elasticsearch提供全文搜索和集成功能,这些功能对于基本的网络应用分析足够了,比如404错误数量、浏览量或者简单的用户分布信息。它欠缺的是SQL中的窗体函数功能,而这些才能帮助回答些更有意义的问题。Elasticsearch也不支持将查询结果输入到临时数据集和数据集变形。利用Elasticsearch能实现的功能也就差不多是搜索工具的功能:根据过滤条件把数据集合成较小的数据集。此外Elasticsearch没法实现联合查询这样的复杂操作。为了弥补这些特性的欠缺,Elasticsearch允许用户在文件中设置别名字段和文件嵌套来避免联合查询。这些都要求对数据进行更多的预处理而且必须指明数据将如何进行操作。
而这里要提及的另一个软件是Hadoop,Hadoop强大的MapReduce查询框架足以应付任何数据集成和变形操作,MapReduce操作学习起来比较困难要有JAVA基础,但可以用HiveQL、Pig Latin或者Facebook的Presto引擎部署一个查询引擎层。这样分析人员就可以用熟悉的SQL来操作数据集了。所以我们可以用类似SQL查询的方法获取简单的数据,又可以通过编程方式MapReduce进行任何复杂的操作,而且这些复杂的操作结果还可以作为其他操作的输入数据,因此在数据分析方面Hadoop要优于ElasticSearch。
所以综合以上两个方面的比较,个人觉得如果主要考虑实时监控可以考虑采用Storm,如果长远考虑做进一步数据分析挖掘可以考虑Hadoop,Elasticsearch是进行文件索引和全文搜索的有力工具,它基于JSON的查询语句简洁而高效,而公司采用的是ElasticSearch做日志系统感觉就没有发挥它的最大优势。如果资源允许可以考虑将ElasticSearch与Hadoop和Storm结合使用, 以上是我个人对公司日志系统的看法,如果大家有不同的意见和想法欢迎大家留言交流。