9 个版本

0.4.0 2024 年 5 月 20 日
0.3.1 2023 年 11 月 10 日
0.3.0 2023 年 8 月 12 日
0.2.0 2023 年 7 月 21 日
0.1.0 2023 年 2 月 14 日

#166解析器实现

Download history 679/week @ 2024-04-15 729/week @ 2024-04-22 546/week @ 2024-04-29 1634/week @ 2024-05-06 1347/week @ 2024-05-13 1958/week @ 2024-05-20 1843/week @ 2024-05-27 1765/week @ 2024-06-03 1769/week @ 2024-06-10 1482/week @ 2024-06-17 2710/week @ 2024-06-24 1672/week @ 2024-07-01 1897/week @ 2024-07-08 1498/week @ 2024-07-15 1390/week @ 2024-07-22 1448/week @ 2024-07-29

每月 6,407 次下载

Apache-2.0

320KB
8K 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 特性支持或修复 PromQL 中错误的 pull requests。

许可

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

除非您明确声明,否则您有意提交并包含在作品中的任何贡献,根据 Apache-2.0 许可,应按照上述条款和条件许可,不附加任何额外条款或条件。

依赖项

~5–14MB
~156K SLoC