GreptimeDB v0.9 重磅发布|引入日志存储引擎,支持日志指标数据联合分析!
2024 下半年伊始,根据最新的 GreptimeDB Roadmap,今天,我们很高兴地宣布支持日志存储和查询的 GreptimeDB 全新版本正式上线!
在这个版本中,我们引入了一个专门为日志存储和查询优化的存储引擎——Log Engine,不仅提升了日志数据的分析和存储效率,还为用户提供了更强大的日志数据处理和查询能力。
(图 1 :2024 GreptimeDB Roadmap)
从 v0.8 到 v0.9,Greptime 团队取得了显著的进展:共合并了 167 次代码提交,修改了 705 个文件,其中包括 85 项功能增强, 29 项错误修复, 21 项代码重构,以及大量的测试工作。在此期间,共有 5 位来自社区的个人贡献者提交了 11 次代码贡献。
非常感谢团队和各位个人贡献者的努力,也欢迎更多对技术感兴趣的同学加入我们!
Log Engine
Log Engine 是一个专门为日志存储和查询优化设计的存储引擎,包含全文索引。
为什么需要 Log Engine?
日志数据通常是非结构化或半结构化的数据,包括文本、时间戳、错误信息、事件描述等,更详细、更丰富,记录了系统的各类事件和操作。在此之前,GreptimeDB 主要支持基于 Metrics 进行指标数据分析。然而,在物联网、可观测等场景中,日志分析对故障诊断与排除、性能、安全监控以及用户行为等方面都有重要意义。
日志 (Log) 作为一种事件,由于包含非结构化消息,通常需要复杂的搜索机制来提取有意义的信息,从而进一步提供数据洞察。从这个版本开始,GreptimeDB 将逐步成为一个同时支持指标和日志分析的泛时序数据库。这将显著增强不同数据源之间进行关联分析的能力,例如,根因分析将变得非常简单,因为所有相关的事件数据都在一个地方,无需在多个系统和接口之间切换。
(图 2 :统一的事件数据库)
关于监控系统中统一日志和指标所带来的优势可以详见《事件管理革命:监控系统中统一日志和指标》。
Log Engine
1. Log Pipeline
Pipeline 是 GreptimeDB 中对 log (由 JSON 格式构成的数据)数据进行转换的一种机制由一个唯一的名称和一组配置规则组成,这些规则定义了如何对日志数据进行格式化、拆分和转换。
这些配置以 YAML 格式提供,使得 Pipeline 能够在日志写入过程中,根据设定的规则对数据进行处理,并将处理后的数据存储到数据库中,便于后续的结构化查询。
Pipeline 由两部分组成:Processors 和 Transforms。一个 Pipeline 配置可以包含多个 Processor 和多个 Transform。
Processor 用于对 log 数据进行预处理,例如解析时间字段,替换字段等;
Transform 用于对 log 数据进行转换,例如将字符串类型转换为数字类型
2.全文检索(Fulltext search)全文检索能力包括:
全文索引:通过建表语句或者 Pipeline 配置指定某些列使用全文索引来加速搜索操作;
全文搜索函数
MATCHES
:允许用户通过多种词项表达式进行搜索,支持简单词项、否定词项、必需词项等多种搜索类型。
Log Engine 应用演示
1. 创建 Pipeline
2. 写入日志
3. Logs 表结构(包含自动 create table 的语句)
4. 使用 MATCHES
函数进行全文搜索
其他更新
1. Flow Engine 功能完善
Flow Engine 支持以集群方式部署;
支持 show create flow;
性能优化及 bug 修复。
2. 优化 Remote WAL,分布式 Region Failover 功能推荐默认开启
重构了 Remote WAL 写入逻辑,引入无延迟攒批;
优化了 Remote WAL 打开批量 Region 的速度;
对基于 Remote WAL 的 Region Failover 功能进行了大量的测试工作,确保该功能稳定执行和数据高可靠。
(图 3 :Region Failover 流程)
3. 支持 InfluxDB merge read
a. 新增建表参数 merge_mode 来控制 GreptimeDB 如何合并 tags 和时间戳相同的行。可选值为 last_row 和 last_non_null,默认值为 last_row。在 last_row 模式下,GreptimeDB 会选择最新的一行作为合并结果;
b. 在 last_non_null 模式下,GreptimeDB 会选择每个 field 最新的非空值作为合并结果。该模式允许用户更新一行的部分列,使得 GreptimeDB 可以兼容 InfluxDB 的语义;
c. 以下是一个例子
查询的结果如下:
d. 通过 InfluxDB line protocol 协议写入数据到 GreptimeDB 并触发自动建表时,GreptimeDB 会默认将 merge_mode
设置为 last_non_null
。
4. 支持视图
a. 用户现在可以使用直观的 SQL 语法创建和查询视图。该功能将复杂的逻辑封装成可重用的虚拟表,提供了更好的数据安全性、性能优化和数据复杂性抽象。
b. 新支持的 SQL 语法如下:
创建视图
查询视图
5. 支持 interval 表达式的缩写
该 PR 支持缩写的 interval 表达式,比如用 y 代表年(year)。其他的缩写有:
mon
代表月(month)w
代表星期(week)d
代表天(day)m
代表分钟(minute)s
代表秒(second)ms
或millis
代表毫秒(millisecond)us
代表微秒(microsecond)ns
代表纳秒(nanosecond)
在 interval 表达式中可以进行混用,例如:
转换缩写为 interval 表达式也是支持的:
6. 并行扫描优化
a. 引入分区并行扫描能力,部分条件下可以做到 Row Group 粒度的并行扫描,扫描速度最高提升 55%
b. 在扫描并发度为 4 时,部分查询的优化效果
7. gRPC 服务添加 TLS 支持
这个 PR 通过增加 TLS 支持增强了 gRPC 服务的安全性。
gRPC 服务器 TLS 配置:
8. 支持不同策略的手动 Compaction
a. 这个 PR 引入了通过 SQL 命令手动触发不同类型的 Compaction 的功能。新支持的 SQL 语法如下:
b. 目前支持的 compact_type 选项包括:
regular:触发类似于 Flush 操作的标准 Compaction。
strict_window:严格按照指定时间窗口划分 SST 文件。
c. 参数可用于具体 Compaction 策略的配置。例如,对于 strict_window
,选项指定 Compaction 窗口的秒数。
升级指南
由于新版本存在一些重大变更,本次 v0.9 发布需要停机升级,推荐使用官方升级工具,大致升级流程如下:
创建一个全新的 v0.9 集群
关闭旧集群流量入口(停写)
通过 GreptimeDB CLI 升级工具导出表结构和数据
通过 GreptimeDB CLI 升级工具导入数据到新集群
入口流量切换至新集群
详细升级指南请参考:
中文:https://docs.greptime.cn/user-guide/upgrade
英文:https://docs.greptime.com/user-guide/upgrade
未来展望
GreptimeDB 的短期目标是成为一个融合 Metrics 和 Log 的泛时序数据库。在下一个版本中,我们将继续打磨 Log Engine,降低 transform 开销,优化查询性能,并发展周边生态系统,例如实现更多 log collectors。同时,我们还可能将 Log Engine 与 Flow Engine 进行结合,例如进行日志内容的解析和抽取。
关于 Greptime
Greptime 格睿科技专注于为可观测、物联网及车联网等领域提供实时、高效的数据存储和分析服务,帮助客户挖掘数据的深层价值。目前基于云原生的时序数据库 GreptimeDB 已经衍生出多款适合不同用户的解决方案,更多信息或 demo 展示请联系下方小助手(微信号:greptime)。
欢迎对开源感兴趣的朋友们参与贡献和讨论,从带有 good first issue 标签的 issue 开始你的开源之旅吧~期待在开源社群里遇见你!添加小助手微信即可加入“技术交流群”与志同道合的朋友们面对面交流哦~
Star us on GitHub Now: https://github.com/GreptimeTeam/greptimedb
Twitter: https://twitter.com/Greptime
Slack: https://greptime.com/slack
评论