sjk000
作者sjk000·2017-07-13 09:37
其它·456

【交易技术前沿】基于ElasticSearch的运维大数据研究 / 黄寅飞

字数 6026阅读 4451评论 1赞 4

本文选自《交易技术前沿》第二十四期 (2016年9月)。
黄寅飞
上交所技术有限责任公司,技术开发总部
Email:yfhuang@sse.com.cn

摘要:本文基于ElasticSearch软件,对运维日志进行大数据分析,以发现运维问题改进运维过程。对构成ELK软件栈的数据采集、数据存储、数据分析与展现技术做介绍并进行实例分析。通过试验,阐述了提升数据导入性能和查询性能的方法。

1 概述

近年来DevOps概念兴起,通过敏捷开发和持续交付方法论,结合配置管理和自动化工具,促进开发、运维和质量保障之间的密切沟通与协作,以提高软件发布效率[1]。自服务理念推动运维自主配置部署、运行监控和优化改进软件,从而将运维职责由被动操作监控转为主动改进过程,将运维范围从系统监控拓展到应用监控。大数据技术在运维过程中的运用,可帮助运维人员在面对开放性问题时,做到灵活快捷的业务响应。

运维日志大数据分析软件非常多,比较有名的商业产品有:Splunk,比较有名的开源软件有:Flume、Scribe、Kafka、Chukwa等。本文选择ELK(Elasticsearch、Logstash、Kibana)这一开源产品组合作为主推的日志大数据支撑软件,并通过一系列试验研究进一步提升性能的方法。

1.1 数据格式

不同于结构化的证券交易数据[2],日志数据属于非结构化数据。标准日志为流式数据格式,每一行对应一条包含时间戳的完整记录。标准日志数据格式良好容易拆分,适合并行程序处理。以Linux系统syslog日志格式为例:
Oct 8 15:09:00 hifi-VirtualBox AptDaemon.Worker: INFO: Updating cache
Oct 8 15:09:00 hifi-VirtualBox org.debian.apt[549]: 15:09:00 AptDaemon.Worker [INFO]: Updating cache
Oct 8 15:09:14 hifi-VirtualBox com.canonical.Unity.Scope.Applications[1428]: Error loading package indexes: Couldn't stat '/var/cache/software-center/xapian'
Oct 8 15:09:14 hifi-VirtualBox com.canonical.Unity.Scope.Applications[1428]: (unity-scope-loader:2243): unity-applications-daemon-CRITICAL **: daemon.vala:144: Failed to load Software Center index. 'Apps Available for Download' will not be listed

本文处理的运维数据来自上交所系统运行总部和信息中心,包括主机运行日志(称为opmsg数据)、批处理日志(称为batch数据)和转换入库日志(称为dwlog数据),格式非标准。这些日志分为两类,一类是在文件中包含多条记录,一类是整个文件作为单条记录。非标准日志需要做额外解析,一是要从文件名中抽取信息将记录补充完整,一是通过正则式匹配时间戳。

1.2 产品概述

ElasticSearch发布于2010年,是一个基于Java开发、符合Lucene规范的全文搜索引擎。ElasticSearch由Elastic公司提供商业支持,该公司前后已募集总计1亿美金投资。ElasticSearch特点是支持分布式集群存储,支持多租户,能够达到实时检索,并支持基于REST的JSON搜索接口。ElasticSearch的著名用户有:Github、Wikipedia、Facebook、Netflix、新浪等。根据DB-Engine统计,2016年1月份Elasticsearch排名搜索引擎类应用第一名[3]。

Logstash是基于ElasticSearch的数据采集工具,Kibana是基于ElasticSearch的可视化网页展现工具,二者于2013年前后被Elastic公司收购,统称为ELK[4]。

2 基础平台

ELK作为一套完整的软件栈,可用于搭建从数据采集、数据存储、数据分析到数据展现的完整运维日志大数据平台。用户只需要做少量配置和界面设计,即可获得对PB级海量日志数据的监控分析能力。

2.1 数据采集

使用Logstash软件进行数据采集,将来自文件、网络和其它软件的数据流进行格式化处理,实时导入到ElasticSearch进行存储。对于入门应用,只需提取出每条日志记录的时间戳,即可借助ElasticSearch的关键词检索能力获得良好的用户体验。通过定义更多字段可支持更多业务逻辑,以使得查询分析更加精准高效。

Logstash支持插件化架构,开源社区不断发布各种数据源、编解码和计算逻辑的插件,以拓展Logstash的能力范围。比如:Grok插件提供丰富的正则式匹配功能;Multiline插件提供多行记录处理能力;Elaspsed插件计算两个事件间的时间间隔;Ruby插件可嵌入Ruby程序以获得随心所欲的数据处理能力;等等。

2.2 数据存储

使用ElasticSearch软件,采用倒排索引机制,按照索引-类型-文档的层次存储数据。对比传统数据库软件,ElasticSearch中的索引(index)类似于数据库,类型(type)类似于数据表,文档对应于记录。文档记录中可包含多个字段,字段分为字符串字段、数字字段、日期字段等不同类别,对应不同的查询语义。

ElasticSearch提供对数据的分布式存储,每个索引由多个分片(shard)构成,每个分片可拥有多个副本(replica)。更多的分片意味着更高的并行处理能力,更多的副本意味着更可靠的数据冗余备份。

ElasticSearch支持用JSON格式通过REST接口进行数据的导入和查询[5]。简易查询使用表达式语法,组合关键词作为查询条件,比如:AM50 AND (0083 OR 0084),表示包含关键词AM50,以及0083或0084中的一个。复杂查询使用筛选条件、查询参数和聚合分析的嵌套组合来描述更为灵活的查询语义,比如:
QQ截图20170710174109.png

QQ截图20170710174109.png

ElasticSearch最为强大的一点是实时查询能力,可实时导入数据并实时展现出来,在不到一秒的时间内同时完成分析汇总和记录查询。ElasticSearch通过分片存储实现并行处理,通过内存缓存实现高性能,通过主备同步保证数据一致性。

2.3 数据分析与展现

使用Kibana软件提供基于Web的数据分析与展现[6]。在交互发现(Discover)页面,可同时看到统计图形和记录明细,可向下钻取,可对字段排序,方便用户了解数据细节,如图1所示。
QQ截图20170710174251.png

QQ截图20170710174251.png

在可视化(Visualize)页面,通过设置坐标轴对应的字段或聚合算子,可以快速绘制各种线状图、直方图、饼图、区域图和地图,并提供丰富的图形风格和效果,方便用户了解数据全貌,如图2所示。
QQ截图20170710174317.png
QQ截图20170710174317.png

在看板(Dashboard)页面,可以摆放之前存好的可视化图,并通过鼠标拖放调整各个图的位置和大小,形成固化的展示效果,如图3所示。
微信截图_20170710174346.png
微信截图_20170710174346.png

图3 看板页面:时间跨度为一年;左上图:批步骤78521时长趋势图;右上图:AM50启动时长趋势图;左下图:批类型饼状图;右下图:按批类型纵向堆叠的批处理记录数趋势图

在所有页面中,均可通过改变时间区间和查询关键词来调整分析展现的数据范围。查询关键词可使用基于Lucene规范的简易语法,也可使用JSON格式的高级语法。

2.4 运维案例

通过导入运维日志数据,很容易就能够通过在ELK中输入关键词来查看整体运维态势,发现运维异常事件。以主机运行日志为例,AM50是负责协调主机启动的核心进程,正常情况下AM50相关日志记录每天应出现7到8次,观察图4发现,4月22日AM50相关日志记录数暴增到15条。观察图5发现,当天各主机启动时长总和也从15000秒暴增到30000秒。发现问题后进一步跟踪定位,发现原因是当日交易集群启动完成后,凌晨1点主机0081出现当机,之后运维人员重启了整个交易集群。ELK展示出的运维态势图可帮助运维人员快速发现问题。
QQ截图20170710174510.png

QQ截图20170710174510.png

QQ截图20170710174535.png
QQ截图20170710174535.png

3 试验调优

本节通过一系列试验对ELK性能进行评估。对于进阶用户,可在ELK基础上进行参数调优,或对部分组件进行替换,以获得更高性能。

3.1 环境与数据准备

试验环境为6台PC服务器(DL380,32核,128GB内存,1TB本地硬盘)构成的千兆网络集群。操作系统为64位RHEL 6.3,所使用软件版本为ElasticSearch 2.3.3、Logstash 2.3.2和Kibana 4.5.1。页面展现使用浏览器Chrome 51。

运维日志数据来自交易集群、中央集群、外部接口集群和各消息接口机,覆盖竞价撮合业务、综合业务和衍生品业务。其中主机运行日志周期为半年,批处理日志周期为一年,共40.4万个文件,大小为17.3GB。数据导入后共计408万条记录。

3.2 导入性能试验

3.2.1 Logstash导入

首先试验Logstash并行导入的性能。使用opmsg数据,数据放置于服务器硬盘。启动6台ElasticSearch服务集群,启动Logstash任务进行并行导入。结果见表1。
QQ截图20170710174830.png

QQ截图20170710174830.png

可以看到,随着Logstash并行数的增加,加载性能从每秒一千条增长到两千余条,说明并行导入相比单机导入性能更优。 使用multiline插件时,导入过程中不能使用多线程,对导入性能有较大影响。对使用和不使用multiline插件这两种情况进行比较,结果见表2。
QQ截图20170710174854.png
QQ截图20170710174854.png

<tb>对同一批数据,不使用multiline插件处理的场景,导入时间可缩短18%。如果按照记录条数口径计算加载速度的话, 单行记录文件加载速度要比多行记录文件快近4倍。

3.2.2 自主开发导入

基于ElasticSearch的REST开放接口,使用Python自主开发导入程序,以同时支持多行记录和并发导入,从而在面对复杂格式日志文件时实现高性能。导入程序的基础版本通过urllib库生成Http请求包,调用ElasticSearch的单条记录插入接口。导入程序的批量版本调用ElasticSearch的批量记录插入接口,将单个文件的所有记录一次导入。每个文件平均有7292条记录,批量导入将请求效率提高了七千倍,从而带来了数十倍的性能提升。
QQ截图20170710174939.png

QQ截图20170710174939.png

导入程序的并发版本通过multiprocessing库实现多个进程并发导入,进一步提升导入效率。可以看到,随着并发数的增加,导入性能线性增长,但在接近单机总核数(32核)时收益递减。
QQ截图20170710175003.png
QQ截图20170710175003.png

自主开发导入程序可以在多机并行加载,加载性能可进一步提升到每秒十六万。6主机并行性能反倒低于4主机并行,判断此时可能已经达到ElasticSearch集群处理能力的瓶颈。
QQ截图20170710175029.png
QQ截图20170710175029.png

3.3查询性能试验

3.2.1 Kibana查询性能

Kibana交互发现页面,采用增量绘制模式做数十次查询,且同时查询明细和统计分析,页面开销较大。Kibana可视化页面,只需要做一次查询,且不需要获取明细,速度很快。使用opmsg和batch数据,启用6台ElasticSearch服务集群。定义两个典型用例:关键词查询交互发现K01、关键词查询求和直方图K02。试验结果见表6。
QQ截图20170710175656.png

QQ截图20170710175656.png

3.2.2 直接查询性能

基于ElasticSearch的REST开放接口,使用curl命令行进行直接查询,操作简便,并可组合多种查询条件。定义5个典型查询用例:随机键值Q01、关键词查询计数Q02、字段求和Q03、分类聚合计数G01、时序聚合计数G02。评估不同参数配置对于查询性能的影响。
首先是分片数试验,将分片参数分别设为:1、5、10、15,副本数固定为1。从试验结果看,分片数过大会导致数据碎片化,增加额外开销,反而降低查询性能,见表7。
QQ截图20170710175751.png

QQ截图20170710175751.png

其次是副本数试验,将副本参数分别设为:1、2、3,分片数固定为5。试验结果表明副本数对查询性能影响不大,见表8。
QQ截图20170710175814.png
QQ截图20170710175814.png

最后是索引个数试验,建索引方式分为:按日(共294个索引)、按旬(共61个索引)、按月(共25个索引)。分片数固定为5,副本数固定为1。从试验结果看,索引个数过多会导致数据碎片化,增加额外开销,反而降低查询性能,见表9。
QQ截图20170710175837.png
QQ截图20170710175837.png

4 小结

ElasticSearch作为一个非结构化数据存储分析工具,非常友好易于上手,并提供诸多专家选项和查询组合,同时提供自主开发的开放接口。ElasticSearch适合于自服务运维需要,可以快捷高效地从海量运维日志中获取有价值的业务信息,促进运维发现问题和改进过程。

参考文献

[1] K. Daniels, J. Davis. Effective DevOps: Building a Culture of Collaboration, Affinity and Tooling at Scale. O’Reilly Media, Inc. 2016.6
[2] 黄寅飞. 基于Hadoop和Spark的证券交易数据分析. 交易技术前沿. 2015:第4期.
[3] 高凯 等. 大数据搜索与日志挖掘及可视化方案. 第2版. 北京:清华大学出版社. 2016.6
[4] 饶琛琳. ELK Stack权威指南. 北京:机械工业出版社. 2015.10
[5] Clinton Gormley, Zachary Tong. ElasticSearch: The Definitive Guide. O’Reilly Media, Inc. 2015.1
[6] Yuvraj Gupta. Kibana Essentials. Packt Publishing Ltd. 2015.10

本文转自微信公众号:上交所技术服务
文章内容仅供参考!

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

4

添加新评论1 条评论

wuwenpinwuwenpin软件开发工程师南京
2017-09-01 17:04
非常不错。
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广