做最好的整站模板下载网站,精美动态ppt模板免费下载,网站开发所需资料,wordpress带商城golang解析victoriametrics的metricsql
场景#xff1a;
需要拆解metricsql中的部分元素#xff0c;比如#xff1a;rollup function#xff0c;label filter等需要对语法合法性进行判断#xff0c;同时拒绝某些查询函数我们需要拆解metricsql并进行改造
使用victoriam…golang解析victoriametrics的metricsql
场景
需要拆解metricsql中的部分元素比如rollup functionlabel filter等需要对语法合法性进行判断同时拒绝某些查询函数我们需要拆解metricsql并进行改造
使用victoriametrics的metricsql项目来解析metricsql
example
package mainimport (fmtloggithub.com/VictoriaMetrics/metricsql
)func ExampleParse() {expr, err : metricsql.Parse(sum(rate(foo{barbaz}[5m])) by (x,y))if err ! nil {log.Fatalf(parse error: %s, err)}fmt.Printf(parsed expr: %s\n, expr.AppendString(nil))ae : expr.(*metricsql.AggrFuncExpr)fmt.Printf(aggr func: name%s, arg%s, modifier%s\n, ae.Name, ae.Args[0].AppendString(nil), ae.Modifier.AppendString(nil))fe : ae.Args[0].(*metricsql.FuncExpr)fmt.Printf(func: name%s, arg%s\n, fe.Name, fe.Args[0].AppendString(nil))re : fe.Args[0].(*metricsql.RollupExpr)fmt.Printf(rollup: expr%s, window%s\n, re.Expr.AppendString(nil), re.Window.AppendString(nil))me : re.Expr.(*metricsql.MetricExpr)fmt.Printf(metric: labelFilter1%s, labelFilter2%s, me.LabelFilterss[0][0].AppendString(nil), me.LabelFilterss[0][1].AppendString(nil))// Output:// parsed expr: sum(rate(foo{barbaz}[5m])) by(x,y)// aggr func: namesum, argrate(foo{barbaz}[5m]), modifierby(x,y)// func: namerate, argfoo{barbaz}[5m]// rollup: exprfoo{barbaz}, window5m// metric: labelFilter1__name__foo, labelFilter2barbaz
}func ExampleExpandWithExprs() {// mql can contain arbitrary MetricsQL extensions - see https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/MetricsQLmql : WITH (commonFilters {job$job, instance$instance},f(a, b) 100*(a/b),)f(disk_free_bytes{commonFilters}, disk_total_bytes{commonFilters})// Convert mql to PromQLpql, err : metricsql.ExpandWithExprs(mql)if err ! nil {log.Fatalf(cannot expand with expressions: %s, err)}fmt.Printf(%s\n, pql)// Output:// 100 * (disk_free_bytes{job$job,instance$instance} / disk_total_bytes{job$job,instance$instance})
}func main() {ExampleParse()ExampleExpandWithExprs()
}result
go run main.go
parsed expr: sum(rate(foo{barbaz}[5m])) by(x,y)
aggr func: namesum, argrate(foo{barbaz}[5m]), modifierby(x,y)
func: namerate, argfoo{barbaz}[5m]
rollup: exprfoo{barbaz}, window5m
metric: labelFilter1__name__foo, labelFilter2barbaz100 * (disk_free_bytes{job$job,instance$instance} / disk_total_bytes{job$job,instance$instance})