已解决
【博客707】模版化拆解并获取victoriametrics的metricsql各个元素
来自网友在路上 176876提问 提问时间:2023-10-14 22:48:39阅读次数: 76
最佳答案 问答题库768位专家为你答疑解惑
golang解析victoriametrics的metricsql
场景:
- 需要拆解metricsql中的部分元素,比如:rollup function,label filter等
- 需要对语法合法性进行判断,同时拒绝某些查询函数
- 我们需要拆解metricsql并进行改造
使用victoriametrics的metricsql项目来解析metricsql
example:
package mainimport ("fmt""log""github.com/VictoriaMetrics/metricsql"
)func ExampleParse() {expr, err := metricsql.Parse(`sum(rate(foo{bar="baz"}[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{bar="baz"}[5m])) by(x,y)// aggr func: name=sum, arg=rate(foo{bar="baz"}[5m]), modifier=by(x,y)// func: name=rate, arg=foo{bar="baz"}[5m]// rollup: expr=foo{bar="baz"}, window=5m// metric: labelFilter1=__name__="foo", labelFilter2=bar="baz"
}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{bar="baz"}[5m])) by(x,y)
aggr func: name=sum, arg=rate(foo{bar="baz"}[5m]), modifier=by(x,y)
func: name=rate, arg=foo{bar="baz"}[5m]
rollup: expr=foo{bar="baz"}, window=5m
metric: labelFilter1=__name__="foo", labelFilter2=bar="baz"100 * (disk_free_bytes{job="$job",instance="$instance"} / disk_total_bytes{job="$job",instance="$instance"})
查看全文
99%的人还看了
相似问题
- YAML 深入解析:从语法到最佳实践
- 第1天:Python基础语法(四)
- 1. 基础语法
- 【Java 进阶篇】JavaScript JSON 语法入门:轻松理解数据的序列化和反序列化
- 【JavaEE初阶】 JavaScript基础语法——壹
- 物联网AI MicroPython学习之语法 TIMER硬件定时器
- JS,jQuery常用语法记录
- ModernCSS.dev - 来自微软前端工程师的 CSS 高级教程,讲解如何用新的 CSS 语法来解决旧的问题
- 【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
- mybatis动态sql语法
猜你感兴趣
版权申明
本文"【博客707】模版化拆解并获取victoriametrics的metricsql各个元素":http://eshow365.cn/6-19540-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!