18600329666

咨询技术专家

扫一扫
与技术专家在线沟通

Menu
分布式海量日志存储分析解决方案

1       分布式日志存储系统概述

日志存储分析系统是在xx平台下,针对业务系统产生的日志记录进行存储和分析,数据主要来源是轨迹日志,系统任务执行记录,其他环节产生的运行日志数据等。系统对上述数据进行集中统一收集,并存储在分布式关系型持久化存储中(此过程根据业务需求对数据进行ETL转化,实现数据的一致性和集中式管理),在集中管理的基础上进行数据整合分析,一方面对外提供日志检索与分析API服务,另一方面设计系统关键环节指标配置任务,通过对关键环节的日志分析输出系统预警消息。

2       技术路线

系统存储和分析的日志数据从ElasticSearch中读取到Kafka中。Kafka的消费者在侦听到数据消息进入后,以流方式获取数据写入到HBase中。存储在HBase中的数据则是为日志数据的检索与分析提供服务。Web前端通过调用后端API检索HBase中的数据,并进行透视表的可视化展现,展现后的数据支持CSV导出功能。
Hbase数据库
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
kafa消息队列
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
系统架构图
分布式日志存储
  • LogData Collector
通过Spark Streaming订阅Kafka的Topic,收集业务需要的日志数据,然后写入到HBase中。HBase搭建在HDFS的集群中。
  • LogData Searching
这是一个Spring Boot服务,通过@RestController暴露API接口给前端。其内部则集成Spark,利用Spark SQL查询HBase数据库。
  • Web UI前端
负责调用LogData Searching服务,并将数据呈现到UI上,并在前端实现显示数据的导出。

1Hbase日志存储机制优化策略

Hbase本身索引查询系统存在一定的缺陷,为了完成系统性能目标任务,实现海量日志存储和海量日志数据分析查询,最终实现集中,统一,一致性,高效管理,对Hbase做如下策略优化
rowKey的优化
rowKey在这里绝对不能像传统的RDBMS处理主键那样,简单地用UUID或自增ID来处理。HBase的rowKey是基于字典排序的,具体来说是基于key的ASCII码来排序,我们的思路是要往rowKey中加入我们想要查询的条件因子,通过多个因子相互组合,来一步步确定查找范围。如时间是应该加到rowKey里的一个查询因子,一个开始时间跟一个截止时间就形成了一个时间段范围,就能固定一个结果集范围。
rowkey里加入的查询因子越多,查询范围定位的精确度越高。但查询因子其实是从众多日志中抽象而来(比如host,level,timestamp等),这要求每条日志记录中共性的东西,系统日志大致划分为下列两大类型
(1)定格式的业务系统/框架日志(飞机飞行估计日志,任务运行日志等)
(2)不定格式的技术系统/组件/框架日志(比如nginx、redis、等中间件产生的格式化日志)
既定格式的日志采用

非既定个是日志采用

优化筛选器
在通过rowKey的范围确定对结果集的扫描范围之后,下一步就是通过内置的filter来进行更精确的筛选,HBase默认提供多种filter供使用者针对rowKey、column-family、qualifier等进行筛选。当然如果rowKey的筛选条件取值跨度比较大,还会产生接近类似于全表扫描的影响。因此需要对筛选条件做一定限制,比如:
(1)查询时间区间的跨度只能限制在一定的范围
(2)分页给出查询结果