【博客707】模版化拆解并获取victoriametrics的metricsql各个元素

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"})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/104890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博客文档续更(二)

十五、博客前台模块-个人信息 1. 接口分析 进入个人中心的时候需要能够查看当前用户信息。请求不需要参数 请求方式 请求地址 请求头 GET /user/userInfo 需要token请求头 响应格式 {"code":200,"data":{"avatar":"头像的网络地址…

MySQL——源码安装教程

MySQL 一、MySQL的安装1、RPM2、二进制3、源码 二、源码安装方式三、安装过程1、上传源码包2、解压当前文件并安装更新依赖3、对MySQL进行编译安装 四、其他步骤 一、MySQL的安装 首先这里我来介绍下MySQL的几种安装方式: 一共三种,RPM安装包、二进制包…

将Excel表中数据导入MySQL数据库

1、准备好Excel表: 2、数据库建表case2 字段信息与表格对应建表: 3、实现代码 import pymysql import pandas as pd import openpyxl 从excel表里读取数据后,再存入到mysql数据库。 需要安装openpyxl pip install openpyxl# 读入数据&#x…

ETL数据转换方式有哪些

ETL数据转换方式有哪些 ETL(Extract, Transform, Load)是一种常用的数据处理方式,用于从源系统中提取数据,进行转换,并加载到目标系统中。 数据清洗(Data Cleaning)&am…

在一台Ubuntu服务器中部署Ceph分布式存储

环境 OS:Linux 5.15.0-82-generic #91-Ubuntu SMP Mon Aug 14 14:14:14 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux ceph version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable) 准备 #安装GPG证书 curl -fsSL http://mirrors.aliyun.com/…

中断机制-中断协商机制、中断方法

4.1 线程中断机制 4.1.1 从阿里蚂蚁金服面试题讲起 Java.lang.Thread下的三个方法: 4.1.2 什么是中断机制 首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,…

#力扣:125. 验证回文串@FDDLC

125. 验证回文串 一、Java class Solution {public boolean isPalindrome(String s) {for (int l 0, r s.length() - 1; l < r; l, r--) {while (l < r && !Character.isLetterOrDigit(s.charAt(l))) l;while (l < r && !Character.isLetterOrDig…

项目管理工具的功能与帮助一览

项目管理的概念并不新鲜&#xff0c;但是伴随着技术解决方案的出现&#xff0c;项目管理工具帮助企业建立规范科学的管理流程&#xff0c;为企业的管理工作提供助力。 Zoho Projects 是一款适合全行业的标准化项目管理工具&#xff0c;它提供了重要的功能&#xff0c;如任务列…

1488. 避免洪水泛滥

你的国家有无数个湖泊&#xff0c;所有湖泊一开始都是空的。当第 n 个湖泊下雨前是空的&#xff0c;那么它就会装满水。如果第 n 个湖泊下雨前是 满的 &#xff0c;这个湖泊会发生 洪水 。你的目标是避免任意一个湖泊发生洪水。 给你一个整数数组 rains &#xff0c;其中&…

JS标准库

学习一门编程语言不仅是掌握其语法。同等重要的是学习其标准库&#xff0c;从而熟练掌握语言本身提供的所有工具。 1 定型数组 js常规数组与C和Java等较低级语言的数组类型还是有很大区别。ES6新增了定型数组&#xff0c;与这些语言的低级数组非常接近。 定型数组严格来说并…

1.11.C++项目:仿muduo库实现并发服务器之LoopThread的设计

文章目录 一、LoopThread模块二、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&#xff08;三&#xff09;功能设计 三、代码 一、LoopThread模块 目标&#xff1a;将eventloop模块和线程整合起来&#xff01; eventloop 和 线程是一一对应的&#…

ruoyi 若依 前端vue npm install 运行vue前端

1. 安装jdk ​​​​​​​https://blog.csdn.net/torpidcat/article/details/90549551 2. nginx 3. mysql 4. redis 首次导入&#xff0c;需要先执行 npm install #进入到前端模块目录下 cd ruoyi-ui # 安装 npm install 启动后端项目 运行前端项目&#xff1a;运行成功…

时序数据库InfluxDB了解

参考&#xff1a;https://blog.csdn.net/u014265785/article/details/126951221

【Pytorch】深度学习之优化器

文章目录 Pytorch提供的优化器所有优化器的基类Optimizer 实际操作实验参考资料 优化器 根据网络反向传播的梯度信息来更新网络的参数&#xff0c;以起到降低loss函数计算值&#xff0c;使得模型输出更加接近真实标签的工具 学习目标 Pytorch提供的优化器 优化器的库torch.opt…

JVM:虚拟机类加载机制

JVM:虚拟机类加载机制 什么是JVM的类加载 众所周知&#xff0c;Java是面向对象编程的一门语言&#xff0c;每一个对象都是一个类的实例。所谓类加载&#xff0c;就是JVM虚拟机把描述类的数据从class文件加载到内存&#xff0c;并对数据进行校验&#xff0c;转换解析和初始化&a…

【yolov5】改进系列——特征图可视化(V7.0 的一个小bug)

文章目录 前言一、特征图可视化1.1 V7.0的小bug 二、可视化指定层三、合并通道可视化总结 前言 对于特征图可视化感兴趣可以参考我的另一篇记录&#xff1a;六行代码实现&#xff1a;特征图提取与特征图可视化&#xff0c;可以实现分类网络的特征图可视化 最近忙论文&#xf…

使用JAVA发送邮件

这里用java代码编写发送邮件我采用jar包&#xff0c;需要先点击这里下载三个jar包&#xff1a;这三个包分别为&#xff1a;additionnal.jar&#xff1b;activation.jar&#xff1b;mail.jar。这三个包缺一不可&#xff0c;如果少添加或未添加均会报下面这个错误&#xff1a; C…

School‘s Java test

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;第四周素数和念整数 &#…

导入Maven项目遇到的一些问题及解决

开发工具是IDEA&#xff0c; 一个Maven项目初次导入IDEA中&#xff0c;需要注意的几件事&#xff1a; 设置项目的编码格式&#xff08;或者提前设置全局的编码格式&#xff09;&#xff0c;一般是UTF-8&#xff1b;检查JDK版本和编译级别&#xff1b;检查Maven的版本&#xf…

公司要做大数据可视化看板,除了EXCEL以外有没有好用的软件可以用

当企业需要进行大数据可视化看板的设计和开发时&#xff0c;除了Excel&#xff0c;还有许多其他强大且适合大数据可视化的软件工具。以下是几种常用的好用软件&#xff0c;以及它们的特点和优势&#xff0c;供您参考。 一、Datainside 特点和优势&#xff1a; - **易于使用**…