ELK stack权威指南
上QQ阅读APP看书,第一时间看更新

前言

操作系统、应用服务和业务逻辑,都在不停地产生日志数据。过去,日志数据基本都存在单机磁盘上,只能用来做临时的事后分析和审计;有Hadoop以后,大家渐渐习惯将日志收集到HDFS中,然后每天运行MapReduce任务做统计报表。但是,面对诸如“新上线的版本过去几分钟在各地反馈如何”“昨天23:40左右这个投诉用户有没有异常”这种即时的开放性问题,传统的日志处理方案显得非常笨拙和低效,因为解答没有唯一套路,需要尝试下钻挖掘才能得出答案。复杂多变的实时数据分析需求,需要的是灵活快捷的响应处理。Splunk公司正是凭借着自己在这个大数据细分领域的一枝独秀,成为百亿美元级的明星公司。但是Splunk每GB高达4500美元的报价,又让人望而却步。直到ELK stack出现后,大家才有了可选择的开源产品。

ELK stack是以Elasticsearch、Logstash、Kibana三个开源软件为主的数据处理工具链,在实时数据检索和分析场合,三者通常是配合使用,而且又先后归于Elastic.co公司名下,故有此简称。

ELK stack具有如下几个优点:

处理方式灵活。Elasticsearch是实时全文索引,不需要像Storm那样预先编程才能使用。

配置简易上手。Elasticsearch全部采用JSON接口,Logstash是Ruby DSL设计,都是目前业界最通用的配置语法设计。

检索性能高效。虽然每次查询都是实时计算,但是优秀的设计和实现基本可以达到百亿级数据查询的秒级响应。

集群线性扩展。不管是Elasticsearch集群还是Logstash集群都是可以线性扩展的。

前端操作炫丽。Kibana界面上,只需点击鼠标,就可以完成搜索、聚合功能,生成炫丽的仪表盘。

当然,ELK stack并不是实时数据分析的灵丹妙药,使用不恰当,反而会事倍功半。我自2014年年初开QQ群交流ELK stack,发现网友们对ELK stack的原理常有误解误用,对实现的效果也多有不能理解或者因过多期望而失望之处。更令我惊奇的是,网友们分布之广,遍及传统企业和互联网公司、开发和运维领域、Linux和Windows平台,大家对非专精领域的知识,一般都缺乏了解,这也成为使用ELK stack的一个障碍。

为此,我决定写一本ELK stack技术指南,帮助大家厘清技术细节,分享一些实战案例。本书并不会逐一介绍ELK stack的全部聚合语法或者分词特性,而是从日志数据处理的角度介绍数据的解析、导入、可视化方式,讲解集群的稳定性和性能优化原理,剖析代码要点并提供ELK stack二次开发实例。

本书包括三大部分共19章,各部分可以独立阅读。但对于还没有大规模应用经验的新手,建议按顺序阅读全文。

第一部分 Logstash

第1章:入门示例。该章介绍Logstash及其插件的配置安装方法,自定义配置语言的设计用途,并为不熟悉Linux系统管理的开发人员介绍了多种后台运行方式。

第2章:插件配置。该章列举Logstash最常用的几十种插件,通过实际示例和效果,讲解各插件的配置细节和用途。

第3章:场景示例。该章以最常见的运维、网络、开发和数据库场景,介绍Logstash处理Nginx、Postfix、Ossec、Log4J、MySQL、Docker等日志的最佳实践。

第4章:性能与监控。了解Logstash的性能情况一直是个难题,该章从Logstash设计原理和JVM平台本质出发,介绍几种行之有效的检测和监控方案。

第5章:扩展方案。该章介绍采用Redis和Kafka完成Logstash水平扩展的方案,同时也介绍其他几种日志收集系统与Logstash的配合方式。

第6章:Logstash源码解析。该章解析Logstash源码中最重要的Pipeline设计,以及Logstash::Event的来龙去脉。

第7章:插件开发。该章以最常见的用户登录记录和地址库解析、Consul数据更新等需求,实际演示Logstash的自定义Filter、Input和Output插件的编写,同时还涉及了插件打包的RubyGems规范共有HttpClient功能项等细节。

第二部分 Elasticsearch

第8章:架构原理。该章从更高级的架构层面,介绍Elasticsearch分布式设计中涉及稳定性和高性能的部分原理,并由此引发相关的优化配置介绍。另外,还提供了一种针对时序数据索引的读写分离方案,适用于拥有少部分SSD设备的用户。

第9章:数据接口用例。该章介绍Elasticsearch的RESTful接口的基础知识,并针对常见的重建索引需求提供两种快速实现方案,为有Spark经验的读者介绍通过Spark Streaming接口读写Elasticsearch的方法。

第10章:性能优化。该章介绍Elasticsearch在日志处理场景下的读写优化知识和官方推荐的curator工具,其中重点介绍了Elasticsearch中几种不同的cache的区别和有效场景。

第11章:测试和扩展方案。该章介绍Elasticsearch在生产环境中需要的一些周边工具,比如Puppet配置管理、Shield权限管理、版本升级操作、别名切换流程设计等。

第12章:映射与模板的定制。该章详细介绍Elasticsearch中的核心类型及其对应的常见映射设置,以及如何通过动态模板简化映射定制操作的复杂度。

第13章:监控方案。Elasticsearch作为一个分布式系统,也是有一定的运维难度的,因此其本身的监控也相当重要。该章介绍Elasticsearch自带的一系列监控接口,以及由此衍生的多种实时或长期的监控方案。

第14章:Elasticsearch在运维监控领域的其他应用。该章介绍Elasticsearch在运维方面的其他运用方式,包括实时过滤接口、定时报警系统设计、时序数据存储和相关性排序等。

第三部分 Kibana

第15章:Kibana的产品对比。该章介绍Kibana 3与Kibana 4之间,以及它们与Hadoop、Splunk之间的差异,方便读者在不同场景需求下选择更正确的工具。

第16章:Kibana 3。该章介绍Kibana 3的界面操作方式、面板的配置细节及其效果、动态仪表盘的高级用法,并提供了几种额外权限控制的部署方案。

第17章:Kibana 3源码解析。该章以index.html为入口,介绍Kibana 3如何利用angular.js、elastic.js和jquery.flot.js三大框架实现单页应用。重点解析面板的实现过程,并分别演示了采用facet和agg接口开发一个Kibana 3面板的过程。

第18章:Kibana 4。该章介绍Kibana 4的安装部署和界面操作方式,重点介绍Kibana 4提供的几种可视化图表的配置细节和效果,并以几种场景的日志分析需求演示了Kibana 4全新的子聚合功能的效果。最后还介绍了一种采用phantom.js截图方式记录长期报表数据的方案。

第19章:Kibana 4源码解析。该章介绍Kibana 4的界面实现,重点包括其内部ORM实现的Counrier类、可视化绘图的Vislib类等。

致谢

我本人虽然接触ELK stack较早,但本身专于Web和App应用数据方面,动笔以来得到诸多朋友的帮助,详见后面“贡献者名单”。此外,还要特别感谢Elastic.co公司的曾勇(medcl)和吴晓刚(Wood),曾勇完成Elasticsearch在国内的启蒙式分享,并主办Elasticsearch中国用户大会,吴晓刚积极帮助新用户,并最早分享了携程的ELK stack日亿级规模的实例。

贡献者名单

□ 感谢crazw完成collectd插件介绍章节。

□ 感谢松涛完成nxlog场景介绍章节。

□ 感谢LeiTu完成logstash-forwarder介绍章节。

□ 感谢jingbli完成kafka插件介绍章节。

□ 感谢林鹏完成ossec场景介绍章节。

□ 感谢cameluo完成shield介绍章节。

□ 感谢tuxknight指出hdfs章节笔误。

□ 感谢lemontree完成marvel介绍章节。

□ 感谢childe完成Kibana的CAS认证介绍、Elasticsearch的读写分离和别名应用章节。

□ 感谢gnuhpc完善logstash-output-elasticsearch配置细节和logstash-forwarder-java在AIX系统上的介绍。