指标、日志、链路进同一个桶:GreptimeDB 存算分离解读与 RustFS 接入配置
传统可观测性栈是三套系统起手Prometheus 收指标Loki 或 Elasticsearch 收日志Jaeger 或 Tempo 收链路。三套系统三份运维存储各管各的想关联着查还要在应用层拼。GreptimeDB 的思路是把指标、日志、链路当成同一类数据都是带时间戳的表一个用 Rust 写的列式引擎统一吃下SQL 查指标之外的一切PromQL 查指标长期数据放对象存储上。项目在 GitHub 上是 GreptimeTeam/greptimedbApache 2.0 协议2026 年 10 月 star 数在 6700 上下背后是同名的商业公司社区版功能相当完整。下面按架构、对象存储接入、部署验证的顺序展开配置细节给全。只想先把它跑起来的可以直接跳到「接 RustFS」那一节配置原样复制就能用。读这篇只需要抓住 GreptimeDB 的一个核心取舍把对象存储当默认持久层而不是把数据锁在本地盘或专用存储集群里。一个引擎吃下指标、日志、链路GreptimeDB 对三种可观测性数据用的是同一个数据模型都是表都走同一个写入管道都存在同一个列式存储引擎里。指标走 PromQL日志和链路走 SQL官方管这个定位叫 Observability 2.0。对使用者的意义是Loki 迁过来的日志、Prometheus Remote Write 推过来的指标、OpenTelemetry 上报的链路最后都落成同一套表结构关联查询就是一句 JOIN。接入协议覆盖得比较全SQLMySQL 和 PostgreSQL 线协议都能直连、PromQL、Prometheus Remote Write、OpenTelemetry OTLP、InfluxDB line protocol还有 Jaeger 兼容查询接口。对存量监控系统来说切换成本主要在数据回填和告警规则迁移客户端上报链路基本不用改。落地形态上指标就是常见的时序表日志表通常带一个 body 列配全文索引链路数据落成 span 表来源协议不同最终都走同一条 insert 路径进表。内置的运维能力是它的卖点之一数据保留策略TTL、降采样、持续聚合社区版都有TTL 到期自动清降采样和持续聚合负责把细粒度数据物化成粗粒度表派生指标不用再搭一条数据处理链路。索引侧提供倒排、跳数和全文索引分布式表还能按列值范围分区。存储引擎层面默认的 Mito 引擎之外还有一个面向高基数指标的 Metric 引擎同一份数据模型下按负载选引擎。公平地说对象存储这层 Loki 也在用chunk 本来就往 S3 放。区别不在「用不用对象存储」而在引擎统一度Loki 只管日志指标和链路还得另起系统而 GreptimeDB 把三类数据的写入、索引、TTL、降采样收进一个引擎查询面也统一成 SQL 加 PromQL。存算分离对象存储是主存储但不是唯一状态GreptimeDB 有两种跑法。Standalone 是一个进程包揽全部角色适合开发和小规模分布式模式拆成三个核心组件再加一个可选的流计算运行时。Frontend 接客户端协议、做鉴权和查询规划按元数据路由读写Metasrv 管 catalog、schema、表、Region 路由和调度元数据Datanode 承载 Region、执行读写、跑 compaction把小文件合并重写成大文件的后台任务把不可变数据文件持久化到配置的存储后端。Flownode可选跑 Flow 任务做持续计算把派生数据物化到 sink 表源表和 sink 表各自保有独立的 schema、TTL 和存储设置。写入路径是标准的存算分离套路Frontend 按元数据把数据行拆到承载目标 Region 的 DatanodeDatanode 先写内存和 WAL写前日志重启后靠重放它恢复还没落盘的写入达到 flush 条件后把不可变数据文件写进存储后端。查询时 Frontend 规划、Datanode 执行能用本地缓存就用本地缓存最后 Frontend 汇总。这里有个值得注意的设计声明官方架构文档专门写了一句对象存储不是系统中唯一的状态。WAL 记录已接收的写入Metasrv 管集群元数据和路由本地磁盘缓存远端数据。也就是说可用性和故障转移取决于三件事的组合WAL 用哪种模式、Metasrv 怎么部署、Region 怎么放置。换成人话对象存储解决了「数据不丢」但「服务不中断」还是要自己设计 WAL 和元数据层的部署。集群部署模式下 Metasrv 需要一个 KV 后端支持 etcd、PostgreSQL 和 MySQLStandalone 则不需要。Region 是分布式模式下数据和负载的基本单元一张大表按时间或列值切出多个 Region 摊到不同 Datanode 上扩缩容和故障转移都发生在 Region 这一层。对对象存储后端来说它的写入模式算是天生友好flush 产物是不可变的列存文件parquet对象存储上没有原地更新这回事写入就是追加新文件旧文件的生命周期由 compaction 管理。这正是对象存储最擅长吃的负载——大文件、顺序读写、不可变。接 RustFS从 storage 配置到部署验证存储后端在配置文件的[storage]段里声明支持本地文件、AWS S3 及一切 S3 兼容服务官方文档点名 MinIO、腾讯云 COS、百度云 BOS 等、阿里云 OSS、Azure Blob 和 GCS。接一个 S3 兼容后端的标准写法[storage] type S3 bucket greptimedb-data root /greptimedb endpoint http://rustfs:9000 region us-east-1 access_key_id greptime-admin secret_access_key 改成强密钥两个对自托管友好的细节。第一enable_virtual_host_style默认是false也就是默认走 path-style 请求http://rustfs:9000/bucket/key这种形式RustFS、MinIO 这类自建后端直连不用任何额外配置。第二除了默认的[storage]还能用[[storage.providers]]声明多个存储 provider建表时通过STORAGE选项给不同的表指定不同的桶热表和冷表、指标表和日志表分开存放一个实例就能管多个桶。缓存是对象存储后端的重头。官方给的读缓存配置是 mito 引擎里的两项[[region_engine]] [region_engine.mito] write_cache_size 10GiB enable_refill_cache_on_read truewrite_cache_size是写缓存的容量上限enable_refill_cache_on_read开着时查询遇到缓存未命中会自动把对象存储上的文件拉回本地缓存后续访问就不再回源。官方文档的建议是默认行为已经合理想省网络流量和存储成本再关。和这类存算分离架构的普遍现象一致读体验高度取决于缓存命中率热数据落在本地磁盘冷数据访问则需要回源对象存储。请求费用侧也可以按这个访问模式估对桶的写入主要是 flush 时批量上传不可变文件读取主要是查询时按需 Get 回源命中本地缓存的部分不出网。时序负载写入吞吐大flush 频率和对象数量随写入量线性走compaction 会带来额外的读和写容量规划时把对象数和请求量都按吞吐口径算别只看存储字节数。存储侧的配置和请求费用口径都清楚了接下来把它部署起来实际验证一遍。standalone 模式下两容器就能跑通一条 composeservices:rustfs:image:rustfs/rustfs:latestrestart:unless-stoppedports:-9000:9000-9001:9001volumes:-rustfs-data:/dataenvironment:RUSTFS_ACCESS_KEY:greptime-adminRUSTFS_SECRET_KEY:改成强密钥RUSTFS_ADDRESS::9000RUSTFS_CONSOLE_ADDRESS::9001greptimedb:image:greptime/greptimedb:latestrestart:unless-stoppeddepends_on:-rustfsports:-4000:4000-4002:4002volumes:-./greptimedb-standalone.toml:/etc/greptimedb/config.toml:rocommand:standalone start--config-file /etc/greptimedb/config.toml--http-addr 0.0.0.0:4000--rpc-addr 0.0.0.0:4001--mysql-addr 0.0.0.0:4002volumes:rustfs-data:greptimedb-standalone.toml就是上一节的[storage]配置。depends_on只管启动顺序不等就绪GreptimeDB 先起来连不上 RustFS 会靠restart: unless-stopped自动重试。端口上 4000 是 HTTP 和仪表盘4001 是 gRPC4002 是 MySQL 协议4003 是 PostgreSQL 协议上面只映射了常用的两个。这套 compose 只为本地验证上生产还要补凭证管理、TLS、监控和分布式模式下 Metasrv 加 etcd 的部署。验证数据真的落在 RustFS 上很简单用任意 MySQL 客户端连 4002 端口建表写入然后到 RustFS 控制台9001 端口看桶里有没有greptimedb/前缀下的 parquet 文件mysql-h127.0.0.1-P4002CREATETABLEdemo_host(host STRING,cpuDOUBLE,tsTIMESTAMPTIMEINDEX);INSERTINTOdemo_hostVALUES(node-1,0.42,2026-10-11 12:00:00);SELECT*FROMdemo_host;GreptimeDB 的建表语法要求显式声明TIME INDEX列这是它和普通 MySQL 库在 DDL 上的主要区别其余 SQL 习惯基本平移。成本口径与版本边界第一官方页面上的成本数字要按口径听官网宣称对象存储加压缩能把存储成本降到原来的 1/50还给了 OceanBase Cloud 从 Loki 迁移后 300TB 日志存储成本下降 60% 的案例这些是官方口径和客户陈述不是第三方 benchmark自己的账要自己算。第二standalone 模式进程挂掉时写路径的恢复靠 WAL 重放所以即便数据文件在对象存储上WAL 放哪本地盘还是远端决定了重启后能不能把内存里没 flush 的写入捞回来别把 WAL 和数据文件混为一谈。第三开源版和企业版有条能力分界线读副本、工作负载隔离、自动重分区、Region 负载均衡在企业版开源版跑大规模集群时Region 的均衡和隔离要自己操心。第四WAL 有本地、远端、Noop 三种模式选型直接决定可用性和故障转移行为上对象存储后端不等于可以随便关 WAL这块要按官方 WAL 文档对场景过一遍。第五分布式模式多一个 etcd或 Postgres/MySQL依赖元数据层的运维复杂度是实打实的小规模场景用 standalone 模式更省事。什么团队适合适合的场景要把 Prometheus、Loki、Jaeger 三件套合并成一栈的团队指标保留周期长、希望长期数据躺对象存储上的监控平台已经在用 RustFS 或 MinIO 做数据湖、想让可观测性数据也进同一个桶的架构。采集侧不用另建管道OpenTelemetry Collector 把 OTLP 直接指过来就行Prometheus 的 Remote Write 也是原生接口。不合适的纯实时告警对亚秒级写入延迟极其敏感的极端场景先用自己工作负载压测再说以及没有精力运维 etcd 和分布式元数据层的小团队standalone 加对象存储是更务实的起点。把它和 HelixDB 这类新一代数据系统放在一起看趋势已经非常清楚新一代数据系统不再自带存储集群列存文件往对象存储一放本地盘只做缓存。对象存储在这一代架构里的角色从「归档层」变成了「主存储」。底座选一个 S3 协议实现扎实、Apache 2.0 开源的对象存储上面跑什么引擎都有的换RustFS 在这类组合里就是干这个的。源码在 github.com/GreptimeTeam/greptimedb中文文档在 docs.greptime.cn。RustFS 的 Docker 部署见 docs.rustfs.com仓库在 github.com/rustfs/rustfs。

相关新闻

AI Agent 工程化开发实战(一):Agent 开发的四个层次——积木、运行时、薄壳、套件

AI Agent 工程化开发实战(一):Agent 开发的四个层次——积木、运行时、薄壳、套件

目录前言一、从一个困惑说起二、官方分三类产品,依赖上却是四层三、四个层次逐层拆第 1 层:积木(langchain-core)第 2 层:运行时(LangGraph)第 3 层:薄壳(create_agent …

2026/10/15 3:58:45 阅读更多 →
Python 技术报告:从 C 语言结构体到 Python 复合数据建模

Python 技术报告:从 C 语言结构体到 Python 复合数据建模

在 C 语言中,struct 是一种自定义复合数据类型,用于把多个不同类型的数据组合成一个整体。结构体变量可以通过 . 访问成员,结构体指针则通过 -> 访问成员。Python 虽然没有与 C 语言完全相同的 struct 关键字,但它提供了更丰富…

2026/10/15 3:58:45 阅读更多 →
51单片机电子秤系列weight

51单片机电子秤系列weight

1. 引言 这是一套基于 STC89C52(REGX52.H) 的智能称重分拣系统,核心硬件包括: HX711:24 位高精度 A/D 转换芯片,负责读取称重传感器(电阻应变式)的原始数据;DS1302&#…

2026/10/15 3:58:45 阅读更多 →

最新新闻

UDP广播实战:从原理到跨平台稳定收发的完整指南

UDP广播实战:从原理到跨平台稳定收发的完整指南

1. 项目概述:为什么一个“UDP广播demo”值得花一整天认真写透UDP广播这个概念,听起来像教科书里被翻旧了的一页纸——很多刚学网络编程的人,第一反应是:“不就是发个包,让局域网里所有机器都收到吗?”但真当…

2026/10/15 6:14:42 阅读更多 →
Spring事件机制实战:用ApplicationEventPublisher实现业务解耦

Spring事件机制实战:用ApplicationEventPublisher实现业务解耦

做后端开发的人应该都有过这种经历:一个下单接口,业务代码越堆越多。一开始只是保存订单,后面要扣库存、发短信、发优惠券、加积分、通知财务……新需求一个接一个,每次都要打开核心 Service 往里面塞代码。改到后面,下…

2026/10/15 6:14:42 阅读更多 →
Java工程师24周转型Agent工程师:从LLM基础到多Agent协作实战

Java工程师24周转型Agent工程师:从LLM基础到多Agent协作实战

1. 为什么Java老手转Agent工程师反而有优势这两年Agent Engineer这个岗位火得有点不讲道理。招聘网站上挂出来的JD,薪资区间普遍比同级别的后端开发高出30%到50%,而且很多岗位明确写着“有后端经验者优先”。我身边不少写了五六年Java的朋友都在问同一个…

2026/10/15 6:14:42 阅读更多 →
IDEA+Maven+Tomcat:从零创建JSP Web项目完整实战指南

IDEA+Maven+Tomcat:从零创建JSP Web项目完整实战指南

1. 项目概述:为什么现在还要学JSP,以及你将从这篇文章里得到什么先别急着划走。我知道很多人一看到JSP这仨字母,第一反应是"这不是上个时代的东西了吗?现在不都是前后端分离、Vue/React一把梭吗?"——这话没…

2026/10/15 6:14:42 阅读更多 →
机房UPS备用电源监控实战:电池巡检与告警配置全解析

机房UPS备用电源监控实战:电池巡检与告警配置全解析

说起来有点丢人,我们这套机房UPS备用电源监控系统,是被一次本可以避免的机房掉电事故逼出来的。那会儿机房规模不大,两台某品牌的200kVA主机做11冗余,带大约60多路机柜,负载不算重,约40%左右。当时我们对UP…

2026/10/15 6:14:42 阅读更多 →
对抗样本攻击方法全解析:从FGSM到物理世界攻击

对抗样本攻击方法全解析:从FGSM到物理世界攻击

1. 对抗样本攻击的底层逻辑与整体分类框架搞机器学习安全这块的人,迟早会碰到对抗样本这个绕不开的坎。我第一次接触这个概念是在做一个图像分类的小项目时,模型在测试集上准确率跑到98%以上,结果把一张熊猫照片加上一层肉眼几乎看不出来的噪…

2026/10/15 6:13:42 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →