本文选自《交易技术前沿》第二十四期 (2016年9月)。
黄寅飞
上交所技术有限责任公司,技术开发总部
Email:yfhuang@sse.com.cn
摘要:本文基于ElasticSearch软件,对运维日志进行大数据分析,以发现运维问题改进运维过程。对构成ELK软件栈的数据采集、数据存储、数据分析与展现技术做介绍并进行实例分析。通过试验,阐述了提升数据导入性能和查询性能的方法。
近年来DevOps概念兴起,通过敏捷开发和持续交付方法论,结合配置管理和自动化工具,促进开发、运维和质量保障之间的密切沟通与协作,以提高软件发布效率[1]。自服务理念推动运维自主配置部署、运行监控和优化改进软件,从而将运维职责由被动操作监控转为主动改进过程,将运维范围从系统监控拓展到应用监控。大数据技术在运维过程中的运用,可帮助运维人员在面对开放性问题时,做到灵活快捷的业务响应。
运维日志大数据分析软件非常多,比较有名的商业产品有:Splunk,比较有名的开源软件有:Flume、Scribe、Kafka、Chukwa等。本文选择ELK(Elasticsearch、Logstash、Kibana)这一开源产品组合作为主推的日志大数据支撑软件,并通过一系列试验研究进一步提升性能的方法。
不同于结构化的证券交易数据[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数据),格式非标准。这些日志分为两类,一类是在文件中包含多条记录,一类是整个文件作为单条记录。非标准日志需要做额外解析,一是要从文件名中抽取信息将记录补充完整,一是通过正则式匹配时间戳。
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]。
ELK作为一套完整的软件栈,可用于搭建从数据采集、数据存储、数据分析到数据展现的完整运维日志大数据平台。用户只需要做少量配置和界面设计,即可获得对PB级海量日志数据的监控分析能力。
使用Logstash软件进行数据采集,将来自文件、网络和其它软件的数据流进行格式化处理,实时导入到ElasticSearch进行存储。对于入门应用,只需提取出每条日志记录的时间戳,即可借助ElasticSearch的关键词检索能力获得良好的用户体验。通过定义更多字段可支持更多业务逻辑,以使得查询分析更加精准高效。
Logstash支持插件化架构,开源社区不断发布各种数据源、编解码和计算逻辑的插件,以拓展Logstash的能力范围。比如:Grok插件提供丰富的正则式匹配功能;Multiline插件提供多行记录处理能力;Elaspsed插件计算两个事件间的时间间隔;Ruby插件可嵌入Ruby程序以获得随心所欲的数据处理能力;等等。
使用ElasticSearch软件,采用倒排索引机制,按照索引-类型-文档的层次存储数据。对比传统数据库软件,ElasticSearch中的索引(index)类似于数据库,类型(type)类似于数据表,文档对应于记录。文档记录中可包含多个字段,字段分为字符串字段、数字字段、日期字段等不同类别,对应不同的查询语义。
ElasticSearch提供对数据的分布式存储,每个索引由多个分片(shard)构成,每个分片可拥有多个副本(replica)。更多的分片意味着更高的并行处理能力,更多的副本意味着更可靠的数据冗余备份。
ElasticSearch支持用JSON格式通过REST接口进行数据的导入和查询[5]。简易查询使用表达式语法,组合关键词作为查询条件,比如:AM50 AND (0083 OR 0084),表示包含关键词AM50,以及0083或0084中的一个。复杂查询使用筛选条件、查询参数和聚合分析的嵌套组合来描述更为灵活的查询语义,比如:
使用Kibana软件提供基于Web的数据分析与展现[6]。在交互发现(Discover)页面,可同时看到统计图形和记录明细,可向下钻取,可对字段排序,方便用户了解数据细节,如图1所示。
在所有页面中,均可通过改变时间区间和查询关键词来调整分析展现的数据范围。查询关键词可使用基于Lucene规范的简易语法,也可使用JSON格式的高级语法。
通过导入运维日志数据,很容易就能够通过在ELK中输入关键词来查看整体运维态势,发现运维异常事件。以主机运行日志为例,AM50是负责协调主机启动的核心进程,正常情况下AM50相关日志记录每天应出现7到8次,观察图4发现,4月22日AM50相关日志记录数暴增到15条。观察图5发现,当天各主机启动时长总和也从15000秒暴增到30000秒。发现问题后进一步跟踪定位,发现原因是当日交易集群启动完成后,凌晨1点主机0081出现当机,之后运维人员重启了整个交易集群。ELK展示出的运维态势图可帮助运维人员快速发现问题。
本节通过一系列试验对ELK性能进行评估。对于进阶用户,可在ELK基础上进行参数调优,或对部分组件进行替换,以获得更高性能。
试验环境为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万条记录。
首先试验Logstash并行导入的性能。使用opmsg数据,数据放置于服务器硬盘。启动6台ElasticSearch服务集群,启动Logstash任务进行并行导入。结果见表1。
基于ElasticSearch的REST开放接口,使用Python自主开发导入程序,以同时支持多行记录和并发导入,从而在面对复杂格式日志文件时实现高性能。导入程序的基础版本通过urllib库生成Http请求包,调用ElasticSearch的单条记录插入接口。导入程序的批量版本调用ElasticSearch的批量记录插入接口,将单个文件的所有记录一次导入。每个文件平均有7292条记录,批量导入将请求效率提高了七千倍,从而带来了数十倍的性能提升。
Kibana交互发现页面,采用增量绘制模式做数十次查询,且同时查询明细和统计分析,页面开销较大。Kibana可视化页面,只需要做一次查询,且不需要获取明细,速度很快。使用opmsg和batch数据,启用6台ElasticSearch服务集群。定义两个典型用例:关键词查询交互发现K01、关键词查询求和直方图K02。试验结果见表6。
基于ElasticSearch的REST开放接口,使用curl命令行进行直接查询,操作简便,并可组合多种查询条件。定义5个典型查询用例:随机键值Q01、关键词查询计数Q02、字段求和Q03、分类聚合计数G01、时序聚合计数G02。评估不同参数配置对于查询性能的影响。
首先是分片数试验,将分片参数分别设为:1、5、10、15,副本数固定为1。从试验结果看,分片数过大会导致数据碎片化,增加额外开销,反而降低查询性能,见表7。
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 条评论
2017-09-01 17:04