15 分钟上手 openobserve 源码:一条日志从写入到省 140 倍存储的三个关键点

15 分钟上手 openobserve 源码:一条日志从写入到省 140 倍存储的三个关键点 15 分钟上手 openobserve 源码一条日志从写入到省 140 倍存储的三个关键点【免费下载链接】openobserveOpen source observability platform for logs, metrics, traces, frontend monitoring, pipelines and LLM observability. A sophisticated, simple and highly performant alternative to Datadog, Splunk, and Elasticsearch with 140x lower storage costs and single binary deployment.项目地址: https://gitcode.com/GitHub_Trending/op/openobserve你可能遇到过这种情况自己搭的日志平台存储费用越滚越大查“近 7 天”还慢出了性能问题都不知道从哪查起。openobserve 给出的答案是单二进制部署、Parquet 列存加 S3 原生官方口径存储成本降 140 倍。这篇文章帮你把仓库里最值得看的三处决策走一遍数据写进来之后去了哪、后台合并怎么把体量压下去、查询时靠什么快速跳过文件。五分钟过一遍仓库结构模块分工与阅读顺序这是一个 Rust 工作区根目录 Cargo.toml 列了几十个成员 crate。不用全记住先认这五个入口看哪里解决什么问题什么时候看src/api/对外协议HTTP/gRPC 写入、检索、管理接口想知道请求长什么样时src/ingester/写入到落盘的内存缓冲想搞清崩溃为何不丢数时src/compaction/后台合并、布隆索引、保留期清理想理解存储体量怎么压下去时src/search_service/检索的调度与执行想知道一次查询怎么跑时web/Vue 3 前端想在页面上对照后端行为时跟一条日志的写入路径HTTP 请求如何变成 S3 上的文件你观察到的现象POST 一批日志立刻能查到进程中途被杀掉重启数据不丢。底层发生了什么WAL 你可以先理解成“先记流水账、再进总账”的机制Go 之外它更贴切的定义是——数据进内存表之前先按序追加到本地文件崩溃后靠重放补账。内存表相当于内存里的“暂存桌”攒够条件后压缩成一个 parquet 文件落盘。从 src/ingester/entry.rs 看一次写入的入口怎么分流到 WAL 和内存表src/ingester/wal.rs追加写哪些文件、怎么确认落盘src/ingester/memtable.rs刷盘条件和分区策略在哪定后台合并与布隆过滤压存储体量与查询速度的两板斧你观察到的现象打开存储目录先是大量小文件跑一阵子后变成少而大的文件。底层发生了什么合并 worker 从任务队列里领“小文件组”归并成大文件写回每个文件同时建布隆索引——布隆过滤器可以类比成“查花名册的快捷窗”它说“没有”就一定没有查询时就能直接跳过整份文件不用真的打开读。src/compaction/worker.rs合并任务怎么调度分发src/compaction/bloom/索引怎么建、存哪src/search/bloom_pruner.rs查询命中文件列表后具体的剔除逻辑src/compaction/retention.rs过期数据按什么周期清找到 SQL 查询的执行位置DataFusion 与 tantivy 的分工你观察到的现象同一股日志SQL 聚合和全文关键字检索走的是两条不同的执行链路。底层发生了什么SQL 交给 DataFusion 执行指标侧另有一套 PromQL 方言解析全文关键字走 tantivy 索引。两条线并行src/search_service/ 负责判断这次查询该走哪条。src/search/datafusion/SQL 怎么翻译成执行计划src/search/tantivy/全文索引的构建与检索src/promql/指标查询的解析入口读源码容易踩的四个误区把 main.rs 当全部逻辑的入口你会怎么写坏只读 src/main.rs结论“这程序就是个启动壳”。cargo run // 服务起来了却找不到告警代码在哪为什么坏main.rs 只做 bootstrap 和运行时装配真正逻辑在 core、db、infra 等成员 crate。一行话怎么改先读根 Cargo.toml 的 workspace 成员清单再定阅读顺序。以为数据存在关系数据库里你会怎么写坏在 src/db/ 里找日志存放的表。-- 误区在 db 目录里找 stream_name 字段为什么坏db 只存业务元数据用户、组织、告警规则数据本体是以 parquet 文件形式放在 S3 或本地盘。一行话怎么改改看 src/infra/file_list/ 的文件列表与存储抽象。以为检索只有一条引擎链路你会怎么写坏只读 src/search/datafusion/以为覆盖所有查询。// 误区全文关键字检索也走 SQL 链路为什么坏全文检索走 tantivy 索引两条链路并行存在。一行话怎么改从 src/search_service/ 的调度入口往下看分派。以为企业版特性在本仓库你会怎么写坏全局搜enterprise关键字期待搜到实现。#[cfg(feature enterprise)] // 本地是占位 stub为什么坏真实现放在私有仓库src/enterprise/ 只有接口占位。一行话怎么改先看 CLAUDE.md 里企业版的说明别在这上面耗时间。三步动手路线图从跑起来到跟住一次查询阶段一30 分钟先跑起来读根 Cargo.toml 和 src/main.rs然后直接用 Docker 拉镜像启动。git clone https://gitcode.com/GitHub_Trending/op/openobserve可验证结果服务 2 分钟内起来浏览器打开 UI首页能看到事故概览与服务健康卡片。阶段二1~2 小时跟一条写入打开 src/ingester/entry.rs顺着调用链走到 WAL 和内存表。可验证结果能指出 wal.rs 里哪一行在追加日志、memtable.rs 里刷盘的触发条件。阶段三半天跟一次查询在 UI 里跑一条 SQL对照 src/search_service/ 的文件列表扫描和 src/search/bloom_pruner.rs。可验证结果能说出“这次查询扫了 N 个文件、M 个被布隆索引剔除”并与运行日志对得上。 这个仓库的价值在于它不是文档站每个模块都是带真实取舍的决策记录单二进制、列存、布隆剔除背后都有工程权衡。下一步就一句话把仓库克隆下来打开 src/main.rs按上面的路线图走完三个阶段。【免费下载链接】openobserveOpen source observability platform for logs, metrics, traces, frontend monitoring, pipelines and LLM observability. A sophisticated, simple and highly performant alternative to Datadog, Splunk, and Elasticsearch with 140x lower storage costs and single binary deployment.项目地址: https://gitcode.com/GitHub_Trending/op/openobserve创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考