日志平台系统应用研究
2018-07-04四川中电启明星信息技术有限公司
四川中电启明星信息技术有限公司 隆 振 张 捷
0.引言
日志平台系统在这样的背景下孕育而生,它是一个集日志采集、结构化、索引、分析、展现于一体的平台系统,极大简化运维人员的日常工作,提高工作效率,使得相关人员能够很快的定位故障点并进行问题处理。同时,通过日志平台定制日志分析规则、利用定时任务对系统定时分析统计,生成报表和告警信息。实现对应用系统及相关设备的自动化监控与预警。
1.系统概述
日志平台系统由采集层、处理层、存储层、服务层及展示层5部分构成构成。
1.1 采集层
采集层支持多种Agent采集,支持Filebeat、JDBC、 RPC、Syslog等方式的数据采集。
(1)Filebeat
Filebeat 是一个日志文件托运工具,其十分轻量,并且十分稳定。Filebeat会监控日志目录或者制定的日志文件,追踪读取这些文件(追踪文件的变化,持续读取),并转发到指定的output。
(2)JDBC
基于Apache Flume框架实现,主要通过周期性的执行查询语句,从数据库中获取数据,并加以包装处理后,发送到指定的位置。
(3)RPC
RPC(Remote Procedure Call),即远程过程调用,实现包括服务消费者(即服务调用者)和服务提供者。一次RPC 的调用过程为:服务调用方调用RPC 请求到服务方,服务提供方根据调用方提供的参数执行请求方法,将执行结果返回给调用方。
(4)syslog
Unix/Linux系统中的大部分日志都是通过一种叫做syslog的机制产生和维护的。syslog是一种标准的协议,分为客户端和服务器端,客户端是产生日志消息的一方,而服务器端负责接收客户端发送来的日志消息,并做出保存到特定的日志文件中或者其他方式的处理。
1.2 处理层
处理层利用Nginx反向代理实现不信任数据过滤,并将多个收集器组合在一起,统一收集采集端发送来的数据,收集的数据被送至Kafka,Kafka是一种高吞吐量的分布式发布订阅消息系统,收集端生产的数据可以配置多个消费者,完整的消费。同时,当数据处理量不断扩大时也可以非常方便的进行横向扩展。
在日志平台系统中日志信息通过处理,可消费保存到HDFS、ElasticSearch及实时计算框架spark streaming/stome等。
1.3 存储层
日志平台系统使用HDFS和ElasticSearch来进行日志信息进行存储。HDFS上存储日志原文,用于归档。ElasticSearch则存储日志信息的索引,用于提供准实时的索引服务。随着ElasticSearch上存储的数据越来越多,也会将时间相对久远的索引信息迁移到HDFS上进行归档保存。
1.4 服务层
服务层提供日志信息的准实时检索服务、实时计算服务及离线计算服务三大服务
(1)准实时检索服务
准实时检索主要服务于技术人员对日志的分析,也适用于一些对实时性要求不太高的统计计算。检索基于ElasticSearch的全文检索及统计功能,其中全文检索提供基础语法、SQL语法、DSL语法三种方式的数据检索,方便用户定位数据,统计功能提供基于时间分段、字段统计、数值分段、时间直立方等聚合查询服务。
(2)实时计算服务
对实时性要求非常高的数据查询统计需求,采用spark streaming/stome框架,对数据进行处理,实现日志数据查询分析的秒级响应。
(3)离线计算服务
对于日志数据量特别大历史数据,采用MapReduces进行离线计算,并将计算结果存入ElasticSearch、HDFS,方便查看。
1.5 展示层
展示层包含系统配置、日志接入配置等管理用户界面和日志检索统计、告警、任务、报表功能普通用户界面。
(1)管理用户界面
实现对系统权限培训、日志接入配置、采集Agent监控、ealasticsearch索引管理、消息中间件管理等。实现日志接入配置、日志采集处理组件监控、节点扩展优化的管理功能。
在本系统中,Agent的连续通信时间间隔以曲线图的形式持续更新。计算公式为 timestamp(本次)-timestamp(临近的上一次)。理论上时间间隔应该保持为一条直线,如果出现剧烈波动,如变大,可能存在网络异常,间隔大,变小,则可能出现日志量陡增,需要考虑是否添加处理节点,平衡分担数据处理。
系统允许在没有定义解析规则的情况下,就开始介入日志。日志以原文的形式,索引到ElasticSearch中。而后针对具体的日志内容,制定具体的解析规则。日志解析的粒度跟日志的格式,及定义的解析规则密切相关。在定义解析规则后,即可将规则应用到处理端,经过一定的缓存时间后,解析规则就会生效,接下来接入的日志便可按照解析的规则提取生成字段。
(2)普通用户界面
提供日志全文检索及日志分析统计功能:其中全文检索提供三种查询语法,包括基础语法、SQL语法、DSL语法。基础语法支持模糊匹配、正则表达式、通配符、短语等查询方式;SQL语法支持基本的列表查询、聚合查询以及两个查询对象的join、union、minus三种关联查询,DSL时json格式的查询语言,基础语法与SQL语法最终在进行数据检索时也会由相关程序转换为DSL语法进行查询,所以用户可以直接编写json格式的dsl查询语言检索ealasticsearch中的日志数据。日志分析统计提供日志数据聚合分析,包含事件计数、时间分段、数值分段、字段值分类、字段数值、时间值立方等统计方式,用户可以根据实际需要灵活选择统计方式、统计字段、展示方式等,并可以将统计信息保存为定时任务或者图表。
为实现日志信息的自动化查询统计与监控高级,实现定时任务、告警、报表、dashboard等功能,其中定时任务根据用户设置的检索条件、统计规则、执行计划等信息,通过启动定时任务,日志平台将定时执行任务,并将统计结果存储在ealasticsearch中,方便查阅与二次分析;告警根据用户设置的检索条件、统计规则、执行计划、触发条件、告警信息等,通过启动告警,日志平台将定时执行告警,并将统计结果存储在ealasticsearch中,如果查询统计触发了告警规则,系统自动将告警信息以邮件或消息的形式发送给指定用户,方便用户及时发现并解决问题;报表将系统中已保存的通过组合起来,通过定时任务生成pdf格式的报表文件,并将文件存储在系统中提供下载,同时将报表文件直接发送到指定的用户邮箱中;dashboard用于将中的已存图表、告警信息、已存搜索、字段TOP值、日志事件计数等组合到一个页面中,方便实时数据查阅。
2.系统建设应用关键点
2.1 日志采集和汇聚工具选择
不同格式的日志文件分布在成百上千的服务器上,服务器可能是Linux,也可能是Windows。因此,在选择的日志采集工具应该具备以下特点:
跨平台:服务器大部分是Linux,但Windows服务器又有很多。在不同平台间切换最好能做到无缝。
可扩展:能够根据需求方便的增加功能,类似插件式,工具提供框架和基础功能,其他的功能可以通过编写插件的形式提供。
可监控:提供接口能实时监控到工具的运行状态,因为工具的错戳、挂起,就意味着日志的丢失。
容错性:程序内部出现异常时,要能做到日志的回滚。
文档齐全:开发人员持续更新,使得我们能够快速的入手,持续更新说明开发人员关注用户的反馈,并且积极修正Bug。
开源:有问题能够从代码级别分析问题,并且有社区支持。
部署简单:最好能做到“粘贴-运行”,便于运维自动化工具部署。
在比较了Filebeat、Flume和Scribe。它们三者大体功能一致,都扮演了一个数据传输者的角色,可以自定定义数据从哪里来(例如日志,文中称Source),日志到哪里去(例如存到Elastic-Search,文中称Target),同时可以对通过他的日志做一次预处理。除此之外,Flume和Scribe中间还有一层换成,可以简单的理解为一个消息队列。
2.2 日志处理解决方案
多种多样的数据来源的日志数据,按照用户设置的解析规则进行数据解析,如果解析规则有变化,需要暂停数据处理端agent,待更新规则后再次启动处理端agent。为保障日志处理的高效稳定,可以启动多个处理实例,并且可以动态添加处理实例,各处理实例间是对等关系,共同参与日志数据处理。
2.3 日志可视化展现
日志进入索引文件后,用户可以像使用搜索引擎一样使用本系统进行日志搜索,查找满足特定条件的日志。
如果用户对sqlSQL语言和DSLdsl语言有使用经验,可以使用类SQL查询语法、DSLdsl查询语法进行更为灵活的查询统计搜索框编程,达到更为灵活,高效的复杂逻辑处理更为快速的定位问题、解决问题,即搜即得。直达问题本质。
对特定事件、固定阈值等多种方式的定时监控告警。
使用电子邮件、远端接口等多种方式发送自定义告警内容。
以PDF、PNG等形式发送时日报、周报、月报。
3 系统应用展望
3.1 日志、大数据分析
通过Agent、API实时收集系统产生的事件,例如访问、点击等。
通过Spark Stream接口进行流计算,例如分析用户使用使用app的习惯,什么时候是高峰期,主要使用的功能等,便于引导产品的方向和精准运营。
对日志进行数据仓库离线归档。
使用领域:流媒体、电子商务、移动分析、游戏运营等。
3.2 日志审计
通过Agent实时手机日志到日志服务,从此不再担心误删、或被黑客删除。
通过日志查询功能,快速分析访问行为,例如查询某个账户、某个对象、某个操作的操作记录。
通过大数据计算服务队日志进行长时间存储,满足符合规定的审计需求。
适用领域:电子商务、政府平台、网站等。
3.3 问题诊断
开发过程中,对客户端、移动设备、服务端、模块等加入日志,并通过ID进行关联。
收集各个模块日志,通过云监控、流计算等实时获取访问情况。
当请求或订单发生错误是,开发无需登录服务器,直接通过日志查询功能对错误关键字、次数、关联影响等进行查询,快速定位问题,减少影响覆盖面。
适用领域:交易系统、订单系统、移动网络等。
4.结束语
采用基于分布式搜索引擎的实时日志采集与处理技术,实现自动化的系统监控,减少故障排查时间和业务中断时间,提高系统的服务响应能力和服务水平,将系统运维人员充枯燥繁琐的例行工作中解放出来,将精力投入到系统的优化与提升当中去。
同时采用多任务分布式技术对海量日志进行分析挖掘,可以建立科学的分析模型,使得对日志的分析深度与事件的识别准确度得到进一步的提升。通过日志分析预警,能提前对潜在的风险定性或定量的评估,从而采取应对措施来降低风险。这对提高应用系统的安全性、稳定性及其服务能力,保障企业生产正常开展具有重大的意义。
[1](美)拉斐尔.酷奇(Rafal Kue)等著,张世武等译.深入理解ElasticSearch(原书第2版)[M].北京:机械工业出版社,2017,5.
[2]分布式多用户能力的全文搜索引擎ElasticSearach https://www.elastic.co/.
[3]分布式式日志收集系统Apache Flume http://flume.apache.org/.
[4]高吞吐量的分布式发布订阅消息系统Apache Kafka http://kafka.apache.org/.