#prometheus #parser #promql

已删除 simple-test

将 PromQL 查询解析为抽象语法树 (AST)

1 个不稳定版本

0.3.1 2024 年 5 月 7 日

#6#promql

Apache-2.0

315KB
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 兼容性

此软件包声称为与 prometheus v2.45.0 兼容,该版本于 2023 年 6 月 23 日发布。此后对 PromQL 的任何修订均不可保证。

社区扩展

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

语言绑定

已知用途

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

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

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

贡献

鼓励贡献!

经审查后,可能会接受添加 PromQL 功能支持或修复功能中 bug 的 pull request。

许可

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

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

依赖项

~5–14MB
~160K SLoC