【51CTO.com原创稿件】互联网及各行各业信息化的快速发展,企业和单位需要处理的数据量越来越大。日志数据是常见的一种海量数据,以京东,淘宝等拥有大量用户群体平台为例,他们可能每小时日志数量可达百亿规模,特别是在6.18,双11大促活动期间,海量的日志数据暴增,给技术团队带来严峻的挑战。
2017年12月1日,在51CTO主办的WOTD 2017全球软件开发技术峰会《技术架构遇到业务架构》分会场上,大数据架构师杨津萍进行了主题为《海量日志架构的设计及优化》的精彩演讲,他从日志系统在优化、部署、监控方向如何更适应业务的需求入手,重点从多种日志系统的架构设计对比、后续调优等实际现象与问题做了详细的解读。演讲结束,记者也在第一时间采访了他。
杨津萍从业十余年,专攻web架构及大数据架构,曾任京东大数据架构师。他是开源的热衷人员,如Hadoop、Hive、shark等有过开源贡献。根据多年的实战经验,在采访中,他与记者分享了在海量日志分析处理方面积累的丰富经验。
根据应用场景,杨津萍将日志系统的架构分为三种:一是,简单的日志处理,可能就是一个日志,能够直接通过logstash处理。二是,数据量较大的日志处理。相对来说,公司对市场环境的隔离程度并不严格,这种可以通过一些平台获取方式进行处理。三是,以大型互联网公司为代表的,对市场环境隔离程度要求严格的大型企业的海量的日志处理。这种情况下,我们需要先进行日志的采集,再进行索引等操作。
说起日志的采集、存储与分析,杨津萍表示,在日志的采集上,很多互联网公司会把采集端的性能降到偏低,比如将占用生产环境或者占用业务的服务的性能尽可能的减少,此时我们可以选择ELK日志分析系统。ELK由Elasticsearch、Logstash和Kibana三部分组件组成。Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。Logstash是一个完全开源的工具,它可以对日志进行收集、分析,并将其存储供以后使用。而kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助用户汇总、分析和搜索重要数据日志。目前,常用的日志系统有商用的日志易和splunk,以及开源的ELK。此外,在传输环节,需要加入一些转换的规则。
在日志的存储上,一般来说,很多IT人员会考虑压缩,因为日志本身是一个低频次的查询,低频次查询的特点就是可以做延时计算。但是,对于比较重要的数据,需要采用ES(ElasticSearch)这种偏昂贵的存储方式,这样可以快速地定位问题。在多数不是重要的情况下,可以采用延时计算,不一定非要采用ES。所以,在基于ELK日志分析系统本身,我们也可以采用一些其他方案做补充,从而降低成本。
在日志的分析上,因为日志的特点是非结构化,非结构化数据没有规则可寻,很难分析,也有人成为极其复杂的结构化数据,可以全文检索的方式解析数据。我们一般会基于存储介质存放数据,然后尝试提炼分析。但正常情况下,比如 ES会提供自己的查询语言DSL,可以做聚合做分析,建立的索引可以帮助技术人员快速定位到非结构化数据。实际上,可以对这些数据定义一些自己的原数据,做一些辅助的分析,类似于做结构化的一些数据分析。如果我们能够尽早规范化我们的日志格式的话,会对日志分析有很大的帮助。目前针对非结构化数据的分析主要采用分词的方式,然后尝试对这些词进行解析,我们可以根据业务实际的统计方式或者说分级方式获得自己想要的结果。而针对结构化数据目前还没有一个很好的工具能提供灵活的方式去处理,需要运维人员和大数据分析人员自己写方法解决问题,针对自己的业务对杂乱无章的语言做分析,提炼出想要的结果,然后根据业务去编写要分析的事情。
杨津萍表示,有效地规范日志,或者进行格式化有助于后期日志的分析工作。通常情况下,做日志的优化更多的是做一些数据的分治,就因为每一类日志都有一条数据链路,它们的规则可以是不同的。基于此,可以对非一级的应用尝试用延时的方式去处理。对于一级应用,面向用户的应用,如何实时快速响应用户需求十分关键,所以IT人员需要利用关键词查询定位问题,并第一时间通知客户。
当日志数据突然暴增时,系统和平台面临极大的压力。这时该如何处理呢?对此,杨津萍推荐了两种方案:第一种方案是采用降级的方式,放弃非一级应用的日志处理,只保证核心日志。第二种方案是,借调机器,临时扩增。这需要提前准备好机器,然后等日志数量激增时,临时把数据分流。如果已经采用阿里云等云计算服务,那可以在云上快速调配资源。但是此时应该注意将云上的日志及时保存,以免撤销资源后日志丢失。
采访最后,记者问及想要成为一名优秀的大数据架构师具备哪些能力,杨津萍发表了自己的看法,他认为在知识储备上,需要根据自己专注的方向不同而不同。假如是围绕偏向底层的,则要把Hadoop这些基本的底层框架原理、协议、优化的方案学习透彻;如果是偏向BI方向,则应更加注重聚合工作以及业务的建模;若是偏向数据挖掘领域,则应该学好聚类、分类,学好深度学习以及机器学习等。
来源: http://www.tuicool.com/articles/VZ7FRbB