基于hbase+flume的日志云服务平台

一、整体设计

1. 用户定时scp日志数据到指定目录,解压并将日志数据进行分类。

2. flume以spooldir方式监控各类型的日志文件,异步导入到hbase中。

3. 以web形式将用户搜索的数据进行展现。


二、实现细节

(一) hbase表

        将所有日志分成5类,每类日志对应一张hbase表,包含一个列族。为什么要存储于多个表呢?原因在于每种类型的日志搜索条件都不一样,设计成一个表的话,会导致hbase表RowKey设计过于复杂。


(二)RowKey设计

        前缀:日志时间戳+后缀:其他查询字段...

        备注:

                前缀:用于区分不同业务系统,如01、02等。

                日志时间戳+后缀:时间戳是(Long.maxValue - 日志打印时间),这样能保证最新的日志排在前面;后缀(000000-999999),保证相同日志打印时间不被覆盖,以999999开始,相同日志打印时间的日志记录依次减1。

                其他查询字段:按照不同日志类型提供不同查询条件。


(三)flume设计

        1. 监控日志的agent对每一类日志配置一个source,以avro协议传输到collector集群,集群配置负载均衡。

        2. 监控日志的source扩展拦截器,实现将多个event合并成一个event。因为spooldir以LINE作为一个event,而日志有可能会打印多行,此拦截器的作用即合并多个原始event为一个。

        3. 扩展deserializer,将每一类日志分成多个字段,写入对应hbase表。

        4. collector的channal采用file形式,memory会出现数据丢失现象。


三、后续改进

        1. 构建hbase二级索引。目前由于没有二级索引导致了很多问题:

                 a) 必须对每一种类型的日志创建一张表,而不同类型的日志数据量不一,会有资源的浪费;

                 b) RowKey设计优先考虑日志时间戳,并按时间戳倒序排序,会导致Region热点问题,Region在分裂的时候会导致左子Region一半空间的浪费(很严重的问题);

                 c) 不能支持多条件查询。

        2. collector生产者和消费者两端速率不对等,原因在于hbase入库的效率,后续要持续优化。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值