用于结构化地编写promql语句。
有的时候我们想按照某种规律生成一些promql语句,然而常规的字符串操作(比如替换、拼接等)无法很好地满足需求,那么这个小程序也许能帮上忙。
go get -u github.com/chenlujjj/promql
例如想生成这条promql:
sum by (job, mode) (rate(node_cpu_seconds_total[1m])) / on(job) group_left sum by (job) (rate(node_cpu_seconds_total[1m]))
package main
import (
"fmt"
"github.com/chenlujjj/promql"
)
func main() {
q := promql.NewBinaryOp("/").
Matcher(promql.NewOnVectorMatcher("job").GroupLeft()).
Operands(
promql.NewAggregationOp("sum").
By("job", "mode").
Operand(promql.NewFunc("rate").Parameters(promql.NewTSSelector("node_cpu_seconds_total").Duration("1m"))),
promql.NewAggregationOp("sum").
By("job").
Operand(promql.NewFunc("rate").Parameters(promql.NewTSSelector("node_cpu_seconds_total").Duration("1m"))),
)
fmt.Println(q.String())
}
通过链式调用,整个生成过程还是比较清晰的。
主要参考了prometheus的官方文档 QUERYING PROMETHEUS。
并受到了PromLens的启发。