@Greptime: 我们刚刚发布了 promql-parser v0.9.0,这是一个用 Rust 编写的 PromQL 解析器。亮点:• 函数的声明式重构 • fill*…
摘要
Greptime 发布了 promql-parser 0.9.0 版本,这是一款基于 Rust 的 PromQL 解析器,具有声明式函数重构功能,并支持 limit 函数。
查看缓存全文
缓存时间: 2026/05/12 08:48
我们刚刚发布了 promql-parser v0.9.0,这是一个用 Rust 编写的 PromQL 解析器。亮点包括:• 函数的声明式重构 • fill*() 二元操作符修饰符 • 用于 AST 遍历的可变访问者 trait • 支持 limitk 和 limit_ratio 详情:https://github.com/GreptimeTeam/promql-parser/releases/tag/v0.9.0… #PromQL #Rust
GreptimeTeam/promql-parser
Source: https://github.com/GreptimeTeam/promql-parser
License (https://github.com/GreptimeTeam/promql-parser/blob/main/LICENSE) Build Status (https://github.com/GreptimeTeam/promql-parser/blob/main/.github/workflows/ci.yml) Version (https://crates.io/crates/promql-parser) codecov (https://app.codecov.io/gh/GreptimeTeam/promql-parser/tree/main)
PromQL 词法分析器和解析器
本项目的目标是构建一个 PromQL 词法分析器和解析器,能够解析符合 Prometheus 查询 规范的 PromQL。
示例
解析一个简单的瞬时向量选择器表达式:
`` rust use promql_parser::parser;
let promql = r#“ http_requests_total{ environment=~“staging|testing|development”, method!=“GET” } offset 5m “#;
match parser::parse(promql) { Ok(expr) => { println!(“Prettify:\n{}\n”, expr.prettify()); println!(“AST:\n{expr:?}”); } Err(info) => println!(“Err: {info:?}”), } ``
或者你可以直接运行本仓库下的示例:
shell cargo run --example parser
输出如下:
``rust Prettify: http_requests_total{environment=~“staging|testing|development”,method!=“GET”} offset 5m
AST: VectorSelector(VectorSelector { name: Some(“http_requests_total”), matchers: Matchers { matchers: [Matcher { op: Re(staging|testing|development), name: “environment”, value: “staging|testing|development” }, Matcher { op: NotEqual, name: “method”, value: “GET” }] }, offset: Some(Pos(300s)), at: None }) ``
PromQL 兼容性
本 crate 声明与 prometheus v3.8 兼容,该版本发布于 2025-11-28。此后对 PromQL 的任何修订均不保证兼容。
社区扩展
有许多社区项目扩展了 promql-parser 或提供了与其他系统的集成。
语言绑定
- py-promql-parser (https://github.com/messense/py-promql-parser) Python。
- lua-promql-parser (https://github.com/mtrbpr/lua-promql-parser) Lua。
已知使用情况
以下是一些已知使用 promql-parser 的项目:
- GreptimeDB (https://github.com/GreptimeTeam/greptimedb) 开源云原生分布式时序数据库
- OpenObserve (https://github.com/openobserve/openobserve) 高性能、PB 级 Elasticsearch/Splunk/Datadog 替代品,支持(日志、指标、链路追踪、RUM、错误追踪、会话回放)
如果你的项目正在使用 promql-parser,欢迎提交 PR 将其添加到列表中。
贡献
我们非常鼓励贡献!
针对 PromQL 功能增加支持或修复 bug 的 Pull Request 在审核后将很可能被接受。
许可
本仓库中的所有代码均遵循 Apache License 2.0。
除非你明确声明其他内容,否则任何有意提交以包含在本作品中的贡献(如 Apache-2.0 许可中定义),均以上述许可提供,无任何附加条款或条件。
相似文章
@Greptime: GreptimeDB v1.3.0-alpha.1 — PromQL 原生直方图,wide: 选择,rate()/delta(),向量操作符,聚合,…
GreptimeDB v1.3.0-alpha.1 引入了 PromQL 原生直方图和向量操作符,以增强可观测性,并新增了对 OTLP traces 和 RISC-V 64 构建的支持。
只改一个函数,性能提升10倍?解读一个 Rust 性能 PR
一篇深度博文,通过基准测试复现和代码分析,解读 GreptimeDB 中让 Prometheus 读取转换速度提升 10 倍的 Rust 性能 PR。
@Greptime: GreptimeDB v1.1.0 发布,PromQL rate/increase 查询速度提升高达97%,整体查询时间降低20-40%,TS… 上速度提升高达4.5倍
GreptimeDB v1.1.0 已发布,提供高达97%的PromQL查询加速,整体查询时间降低20-40%,在TSBS扫描密集型查询上性能提升高达4.5倍,并支持对现有表进行在线重分区。
@Greptime: GreptimeDB 在查询规划器中原生实现了 PromQL,而不是将其翻译成 SQL。
GreptimeDB 在其查询规划器中原生实现了 PromQL,允许使用 EXPLAIN ANALYZE 等工具直接执行和分析,无需将其翻译成 SQL。
@Greptime: GreptimeDB v1.2.0-beta.1 发布。205 项更改,259 次提交,22 位贡献者。重点内容:JSON2 作为数据类型,P…
GreptimeDB v1.2.0-beta.1 已发布,主要特性包括:JSON2 作为结构化列类型、支持原生直方图的 Prometheus Remote Write v2、字典编码的序列键以加快查询速度,以及其他加固和破坏性更改。