HBase学习笔记——基于HBase的日志系统的性能优化

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 我之前参与过一个日志系统的开发,存储用HBase。我简单罗列下用到的HBase优化,备忘。以后把它整理成更友好的介绍性文章。 # 系统简介 * 有一张大的日志数据表,保存所有日志。row key是 hash + app id + log-severity + timestamp + host等,cell保存日志正文数据。 * 可以看到row key的hash保证日志散列在各

我之前参与过一个日志系统的开发,存储用HBase。我简单罗列下用到的HBase优化,备忘。以后把它整理成更友好的介绍性文章。

系统简介

  • 有一张大的日志数据表,保存所有日志。row key是 hash + app id + log-severity + timestamp + host等,cell保存日志正文数据。

    • 可以看到row key的hash保证日志散列在各个region中,写入、查询的负载均衡。但是无法通过它进行范围查询,所以为不同查询模式,建立了多张索引表。
  • 为不同的日志级别(DEBUG, INFO, WARN, ERROR, FATAL)分别建立了一张索引表。在每张索引表中,row key是 app id + timestamp + host等。也就是说,用于通常选择一个应用,加上时间范围,也可以进一步选择一台应用服务器,来查询日志。

表结构相关优化

  • 多条日志打包,压缩保存。

    • 我们发现,如果简单地将一条日志保存为HBase表中的一行,会导致HBase表记录数很大,row key数量很大,region数量很多,HBase元数据开销很大。这会造成HBase集群不稳定。
    • 于是,我们决定将多条日志打成一个包(chunk)。一个包作为HBase表中的一行保存,大大减少了HBase表的记录数,减轻了HBase元数据的开销。打包是通过写入日志时,在应用服务器的内存中收集日志直到字节数超出一定阈值来实现的。
    • 除了打包,压缩也是在应用服务器端完成的,而不是依靠HBase (column family的compression配置)完成。因为我们希望压缩不仅能节省HBase存储空间,还要能节省应用服务器和HBase之间的网络流量。
    • 打包时,根据row key的语义,正确设置row key。比如开始时间是第一条日志的开始时间,结束时间是最后一条日志的结束时间。
    • 时间上相邻的日志,其正文内容往往很相似。因此,将多条日志打包压缩,比一条一条日志分开压缩,能获得更高的压缩率,节省网络传输带宽和存储。
    • 打包意味着查询时的解包。为此我们部署了coprocessor在HBase集群中,充分利用HBase集群的CPU解包。
  • fuzzy row filter

    • 通常来说,只有查询条件是row key的前缀,这个row key才能被用于查询。例如如果某张表的row key是 app id + host,则它能被用于根据某个应用id 的日志查询, 和 根据应用id + host的查询。
    • 如果要根据host查询,上述row key就不行了,不符合前缀匹配。我们得遍历整个表中所有的row key,对每个row key检查它是否以查询条件中给定的host结尾——十分低效。假如有10个应用,每一个应用有100个host,我们只能遍历10*100=1000条记录,找到给定host的记录。
    • 但是,应用FuzzyRowFilter后,我们仍然可以部分利用这个row key,只根据host查询。

      • 虽然row key的首部是app id,导致我们必须遍历所有app id,但是在扫描一个app id下的所有row key时,通过fuzzy row filter,可以利用row key的全局分布式索引树(-ROOT-, .META, region ) 直接跳转到查询条件给定的host开始处进行扫描。因此,我们只需要为每个app id,从查询条件的host处开始扫描,共100次扫描。

系统配置类优化

  • HBase客户端优化——牺牲可靠性,提高日志写入的吞吐量

    • 关闭WAL,直接写入日志。
    • 适当增加writer buffer大小。
    • 批量Put,传入List;关闭autoFlush。
  • 压缩算法改用snappy,牺牲压缩率,降低CPU消耗,提高吞吐量。
  • 调整HFile data block大小。data block越大,索引粒度越粗,顺序访问吞吐量越高。

    • 在一个data block内部,通常只能顺序遍历,看我们搜索的Key是否存在。但是,也可以启用bloom filter,很快地告诉我们,一个Key是否一定不在这个data block中。
  • 关闭某些column family的block cache缓存。

    • 查询时,只有重复性的、随机的访问,才能命中block cache。如果某一个列只是用于海浪数据的顺序访问,那么对它缓存没有意义,相反,它能冲掉block cache本应该缓存的其他列的数据。对于这样的列, 应该关闭block cache缓存。
  • 日志归档
      * 写入HBase的日志,TTL设为7天。HBase用于实时的web查询,只能看这7天的日志。

    • 这个系统有另外一路,实时写日志进HDFS,供HIVE分析。这是用于离线查询7天以前的历史日志的。
  • HBase默认存三个版本的cell,对日志来说没有必要,只需要存一个版本。

顺便提下与HBase无关的其他优化

  • 通常我们会用先进先出的队列保存临时积压的日志。但是,在日志系统的场景中,当日志积压时,让用户看到最新写入的日志,比让用户看到历史日志更重要。所以我们用先进后出的栈,保存临时积压的日志。
目录
相关文章
|
1月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
244 122
基于docker搭建监控系统&日志收集
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
4月前
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
220 1
|
20天前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
76 2
|
3月前
|
存储
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
8月前
|
存储 前端开发 数据可视化
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
2577 70
Grafana Loki,轻量级日志系统
|
7月前
|
存储 消息中间件 缓存
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
275 1
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
|
7月前
|
存储 JSON Go
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
118 10
|
存储 监控 安全
5款 Syslog集中系统日志常用工具对比推荐
集中管理Syslog有助于持续监控网络中的恶意活动,确保日志的搜索和分析更为便捷。常用工具包括Rsyslog、Syslog-ng、Logstash和Fluentd,它们各有优劣。Rsyslog通过多种协议确保日志传输的安全性;Syslog-ng支持高效收集和转发日志;Logstash能解析多源日志并索引;Fluentd将日志转换为JSON格式。卓豪EventLog Analyzer则提供一体化的日志管理,支持日志分析、报表生成、用户行为分析及实时告警,是全面的日志管理解决方案。
|
9月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
573 8

热门文章

最新文章