#查询解析器 #查询语言 #解析器 #Prometheus #PromQL #AST

bk-promql-parser

将 PromQL 查询解析成 AST(fork自 promql-parser)

5 个稳定版本

1.0.5 2024年5月22日
1.0.3 2024年5月14日
1.0.2 2024年5月11日
1.0.0 2024年5月7日

#882 in 解析器实现

Apache-2.0

320KB
7.5K SLoC

License Build Status Version codecov

PromQL 词法和解析器

本项目的目标是构建一个能够解析符合 Prometheus 查询 的 PromQL 词法和解析器。

示例

解析一个简单的即时向量选择器表达式

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:?}"),
}

或者您可以直接运行此仓库下的示例

cargo run --example parser

这将输出

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 v2.45.0 兼容,该版本于 2023-06-23 发布。此提交之后的任何 PromQL 修订版都不保证兼容。

社区扩展

有多个社区项目扩展了 promql-parser 或提供了与其他系统的集成。

语言绑定

已知用途

以下是一些已知使用 promql-parser 的项目

  • GreptimeDB 开源 & 云原生分布式时序数据库

如果您的项目正在使用 promql-parser,请随时提交 PR 将其添加到此列表。

贡献

非常欢迎贡献!

经过审查后,可能接受添加对 PromQL 功能支持或修复其错误的 pull request。

许可

本仓库中的所有代码均根据 Apache License 2.0 许可。

除非您明确表示,否则您有意提交以包含在本工作中的任何贡献,根据 Apache-2.0 许可,应按上述方式许可,不附加任何其他条款或条件。

依赖关系

~5–14MB
~160K SLoC