开源日志分析平台实践一、开源利器大比拼一、日志采集Logstash:是一款轻量级的日志采集处理框架,可以方便的把分散的、多样化的日志采集起来,并进行自定义的处理,然后传输到指定的位置。logstash是用的最多的采集端。Beats:分为Filebeat用来采集日志,Topbeat用来采集系统基础设置数据如cpu、内存、每个进程的统计信息,Packetbeat用来统计采集网络信息,Winlogbeat,采集windows日志,Libbeat用来开发其他beatsFlume:Flume是Cloudera开源的分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于采集数据;笔者对这三种工具做了个简单对比代理实现语言诞生时间总体评价FlumeJAVA2010年安装复杂,侧重数据传输持久化数据,可做集群,可靠性强Logstashruby2009年安装简单,侧重数据处理,有众多插件,可预处理数据。不持久化数据,存在丢数据风险Beatsgolang2014年相比Flume和Logstash更加轻量,但功能略少笔者架构中采用的是Logstash,针对Logstash不持久化数据丢数据的风险笔者加入kafka+zookper组件进行了解决。实际使用发现在windows下运行很不稳定,时常会hung住,在linux下运行很不错。关于日志采集还有facebook的scribe,apache的chukwa,Mozilla的Heka等,感兴趣的伙伴可以研究下。二、消息传送Kafka:Kafka是LinkedIn2010年12月份开源的一个消息发布订阅系统,采用scala语言编写,使用了多种效率优化机制,整体架构比较新颖(push/pull),更适合异构集群。高吞吐率,在普通的服务器上每秒也能处理几十万条消息。producer向某个topic发布消息,而consumer订阅某个topic的消息,进而一旦有新的关于某个topic的消息,broker会传递给订阅它的所有consumer。在kafka中,消息是按topic组织的,而每个topic又会分为多个partition,这样便于管理数据和进行负载均衡。同时,它也使用了zookeeper进行负载均衡。Zookeeper:分布式系统的可靠协调系统,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。kafka,需要依赖zookeeper,你可以使用已有的zookeeper集群或者利用kafka提供的脚本启动一个zookeeper实例,笔者另行搭了一套的zookeeper集群。三、检索ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。Solr(读作“solar”)是ApacheLucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,Solr4还增加了NoSQL支持。1、当单纯的对已有数据进行搜索时,Solr更快。2、当实时建立索引时,Solr会产生io阻塞,查询性能较差,Elasticsearch具有明显的优势。3、随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。综上所述,Elasticsearch更适合实时搜索的应用,我们针对日志的检索选择了ElasticSearch,正好搭配Kibana可以实时检索日志,简单好用,历史数据存储在HDFS上,通过hive查询。四、日志清洗、存储Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。SparkStreaming是一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。stormspark(streamimg)开发成本写拓扑写job学习成本高,非开发人员无法使用高,非开发人员无法使用部署成本集群模式集群模式性能高高可靠性高,ack保证高,directapi+checkpoint数据聚合,如TOPN拓扑方式可以做到时间窗扩展性增加worker/命令行调整并发增加executor监控/指标有有比较下来发现logstash跟Storm/Spark相比,稍逊一筹,不过可取之处是开发和学习成本,毕竟针对日志清洗这块,人力成本占大部分比重,时间主要耗费在与业务线核对格式,类型,做数据关联等等步骤上。可是我们就3个人,无法支撑这么多日志格式的清洗工作,选择的重心就倾向于logstash,并开发相应的debug工具,由业务线的开发或QA来完成数据清理工作,从编码向配置过度,按需解析,这样不但释放了我们的精力,解析结果还100%匹配业务线的需求。Hadoop:是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架构。Hive:是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。五、可视化Kibana:基于Elasticsearch的数据可视化组件遇到的坑和坎⼉1、Windows环境下logstash工作不稳定因为我们有商用的splunk,所以把windows机器都纳入进了splunk平台。2、filebeat在windows下不工作可能是笔者环境问题,还需要后续测试3、Kibana没有⽤用户的概念,不同⽤用户的数据无法隔离我们计划在Kibana之外包一层,改层进行认证并传参给kibana查询4、与⽤用户沟通成本⾼5、开源产品小版本众多,不同产品间只有特定版本才能很好地兼容建议去elastic网站下载组件,按官方推荐版本搭建6、开源均是外部源,测试环境无法连接互联网不能进行yum安装,只能下载源包本地安装7、交互访问复杂,涉及端口众多,因防火墙问题导致多次调试不成功8、日志丢失问题在采集阶段尽量不对日志进行过滤和处理,把原始日志丢给kafka,然后由logstashmaster统一过滤9、集群维护问题