为什么选择 GreptimeDB
团队开始评估新的可观测后端,往往是因为多套信号存储、存储扩容或长期分析的运维成本已经难以忽略。GreptimeDB 用同一个列式引擎处理 metrics、logs 和 traces,同时保留清晰的数据模型和部署边界。
GreptimeDB 是什么
GreptimeDB 是开源的可观测性数据库。它用同一个列式引擎存储和查询 metrics、logs、traces,并提供统一的 SQL 查询层。GreptimeDB 既可以使用本地存储以单机模式运行,也可以组成以对象存储为持久化存储的分布式集群。
GreptimeDB 不是通用事务数据库。它的存储、索引、留存和查询路径面向以追加写入为主的时间索引数据,例如可观测数据和 IoT 数据。
为什么用一个引擎处理三种信号
metrics、logs 和 traces 分散在不同数据库时,每套系统都有自己的容量模型、生命周期策略、查询方式和故障边界。故障排查要么搬运数据,要么在几套系统之间来回查询。
GreptimeDB 用同一个列式引擎处理三类信号,并采用共同的 Tag、Timestamp、Field 列语义:
- metrics、logs、traces 共用一套存储和生命周期管理机制;
- 所有信号都可以使用 SQL 查询,metrics 还可以使用 PromQL;
- Flow用于持续聚合,并把派生结果物化到 sink table;
- instrumentation 记录了共同标识时,可以通过 SQL 关联不同信号。
这里的“统一”指引擎、存储和查询层,不要求 metrics、logs、traces 使用同一张表、同一套 schema,也不要求采用宽事件模型。
一个列式引擎,不同的表
减少系统数量,不等于把不同信号硬塞进同一种 schema。指标点、日志、span 和宽事件,其访问方式和留存要求并不相同。
GreptimeDB 允许每类 workload 使用适合自己的表:
- metrics 通常用主键列保存 labels,并使用 PromQL 查询;
- logs 常用 append-only 表,并根据查询方式选择全文索引或倒排索引;
- traces 保留 trace 和 span 标识,可以使用 SQL 或 Jaeger 兼容接口查询;
- 事后分析需要更多上下文时,可以采用宽事件,并承担相应的存储成本。
这些表可以分别配置 schema、索引、TTL、compaction 选项和存储后端。具体机制参见数据模型和存储位置。
实时监控与历史分析,共用一套系统
故障处置需要快速查询近期数据,趋势分析、容量评估和事后排查则可能扫描几周甚至几个月的数据。如果分别使用监控后端和分析数据库,就要多维护一条写入链路、一份数据副本和一套系统。
在使用对象存储的分布式部署中,GreptimeDB 用同一个引擎、同一套存储与查询基础处理这两类 workload。近期数据可以通过内存和本地 cache 加速,持久化数据则保存在对象存储中,供更长时间范围的查询使用。长期分析不需要另建分析数据库和数据复制链路。