SkyWalking内置MQE语法
此文档出自SkyWalking官方git https://github.com/apache/skywalking
docs/en/api/metrics-query-expression.md
Metrics Query Expression(MQE) Syntax
MQE is a string that consists of one or more expressions. Each expression could be a combination of one or more operations.
The expression allows users to do simple query-stage calculation through V3 APIs.
Expression = <Operation> Expression1 <Operation> Expression2 <Operation> Expression3 ...
The following document lists the operations supported by MQE.
Metrics Expression
Metrics Expression will return a collection of time-series values.
Common Value Metrics
Expression:
<metric_name>
For example:
If we want to query the service_sla
metric, we can use the following expression:
service_sla
Result Type
The ExpressionResultType
of the expression is TIME_SERIES_VALUES
.
Labeled Value Metrics
For now, we only have a single anonymous label with multi label values in a labeled metric.
To be able to use it in expressions, define _
as the anonymous label name (key).
Expression:
<metric_name>{_='<label_value_1>,...'}
{_='<label_value_1>,...'}
is the selected label value of the metric. If is not specified, all label values of the metric will be selected.
For example:
If we want to query the service_percentile
metric with the label values 0,1,2,3,4
, we can use the following expression:
service_percentile{_='0,1,2,3,4'}
If we want to rename the label values to P50,P75,P90,P95,P99
, see Relabel Operation.
Result Type
The ExpressionResultType
of the expression is TIME_SERIES_VALUES
and with labels.
Binary Operation
The Binary Operation is an operation that takes two expressions and performs a calculation on their results.
The following table lists the binary operations supported by MQE.
Expression:
Expression1 <Binary-Operator> Expression2
Operator | Definition |
---|---|
+ | addition |
- | subtraction |
* | multiplication |
/ | division |
% | modulo |
For example:
If we want to transform the service_sla metric value to percent, we can use the following expression:
service_sla / 100
Result Type
For the result type of the expression, please refer to the following table.
Binary Operation Rules
The following table lists if the different result types of the input expressions could do this operation and the result type after the operation.
The expression could be on the left or right side of the operator.
Note: If the expressions on both sides of the operator are the TIME_SERIES_VALUES with labels
, they should have the same labels for calculation.
Expression | Expression | Yes/No | ExpressionResultType |
---|---|---|---|
SINGLE_VALUE | SINGLE_VALUE | Yes | SINGLE_VALUE |
SINGLE_VALUE | TIME_SERIES_VALUES | Yes | TIME_SERIES_VALUES |
SINGLE_VALUE | SORTED_LIST/RECORD_LIST | Yes | SORTED_LIST/RECORD_LIST |
TIME_SERIES_VALUES | TIME_SERIES_VALUES | Yes | TIME_SERIES_VALUES |
TIME_SERIES_VALUES | SORTED_LIST/RECORD_LIST | no | |
SORTED_LIST/RECORD_LIST | SORTED_LIST/RECORD_LIST | no |
Compare Operation
Compare Operation takes two expressions and compares their results.
The following table lists the compare operations supported by MQE.
Expression:
Expression1 <Compare-Operator> Expression2
Operator | Definition |
---|---|
> | greater than |
>= | greater than or equal |
< | less than |
<= | less than or equal |
== | equal |
!= | not equal |
The result of the compare operation is an int value:
- 1: true
- 0: false
For example:
Compare the service_resp_time
metric value if greater than 3000, if the service_resp_time
result is:
{"data": {"execExpression": {"type": "TIME_SERIES_VALUES","error": null,"results": [{"metric": {"labels": []},"values": [{"id": "1691658000000", "value": "2500", "traceID": null}, {"id": "1691661600000", "value": 3500, "traceID": null}]}]}}
}
we can use the following expression:
service_resp_time > 3000
and get result:
{"data": {"execExpression": {"type": "TIME_SERIES_VALUES","error": null,"results": [{"metric": {"labels": []},"values": [{"id": "1691658000000", "value": "0", "traceID": null}, {"id": "1691661600000", "value": 1, "traceID": null}]}]}}
}
Compare Operation Rules and Result Type
Same as the Binary Operation Rules.
Aggregation Operation
Aggregation Operation takes an expression and performs aggregate calculations on its results.
Expression:
<Aggregation-Operator>(Expression)
Operator | Definition | ExpressionResultType |
---|---|---|
avg | average the result | SINGLE_VALUE |
count | count number of the result | SINGLE_VALUE |
latest | select the latest non-null value from the result | SINGLE_VALUE |
sum | sum the result | SINGLE_VALUE |
max | select maximum from the result | SINGLE_VALUE |
min | select minimum from the result | SINGLE_VALUE |
For example:
If we want to query the average value of the service_cpm
metric, we can use the following expression:
avg(service_cpm)
Result Type
The different operators could impact the ExpressionResultType
, please refer to the above table.
Mathematical Operation
Mathematical Operation takes an expression and performs mathematical calculations on its results.
Expression:
<Mathematical-Operator>(Expression, parameters)
Operator | Definition | parameters | ExpressionResultType |
---|---|---|---|
abs | returns the absolute value of the result | follow the input expression | |
ceil | returns the smallest integer value that is greater or equal to the result | follow the input expression | |
floor | returns the largest integer value that is greater or equal to the result | follow the input expression | |
round | returns result round to specific decimal places | places : a positive integer specific decimal places of the result | follow the input expression |
For example:
If we want to query the average value of the service_cpm
metric in seconds,
and round the result to 2 decimal places, we can use the following expression:
round(service_cpm / 60 , 2)
Result Type
The different operators could impact the ExpressionResultType
, please refer to the above table.
TopN Operation
TopN Operation takes an expression and performs TopN calculation on its results.
Expression:
top_n(<metric_name>, <top_number>, <order>)
top_number
is the number of the top results, should be a positive integer.
order
is the order of the top results. The value of order
can be asc
or des
.
For example:
If we want to query the top 10 services with the highest service_cpm
metric value, we can use the following expression:
top_n(service_instance_cpm, 10, des)
Result Type
According to the type of the metric, the ExpressionResultType
of the expression will be SORTED_LIST
or RECORD_LIST
.
Relabel Operation
Relabel Operation takes an expression and replaces the label values with new label values on its results.
Expression:
relabel(Expression, _='<new_label_value_1>,...')
_
is the new label of the metric after the label is relabeled, the order of the new label values should be the same as the order of the label values in the input expression result.
For example:
If we want to query the service_percentile
metric with the label values 0,1,2,3,4
, and rename the label values to P50,P75,P90,P95,P99
, we can use the following expression:
relabel(service_percentile{_='0,1,2,3,4'}, _='P50,P75,P90,P95,P99')
Result Type
Follow the input expression.
AggregateLabels Operation
AggregateLabels Operation takes an expression and performs an aggregate calculation on its Labeled Value Metrics
results. It aggregates a group of TIME_SERIES_VALUES
into a single TIME_SERIES_VALUES
.
Expression:
aggregate_labels(Expression, parameter)
parameter | Definition | ExpressionResultType |
---|---|---|
avg | calculate avg value of a Labeled Value Metrics | TIME_SERIES_VALUES |
sum | calculate sum value of a Labeled Value Metrics | TIME_SERIES_VALUES |
max | select the maximum value from a Labeled Value Metrics | TIME_SERIES_VALUES |
min | select the minimum value from a Labeled Value Metrics | TIME_SERIES_VALUES |
For example:
If we want to query all Redis command total rates, we can use the following expression(total_commands_rate
is a metric which recorded every command rate in labeled value):
aggregate_labels(total_commands_rate, SUM)
Result Type
The ExpressionResultType of the aggregateLabels operation is TIME_SERIES_VALUES.
Logical Operation
ViewAsSequence Operation
ViewAsSequence operation represents the first not-null metric from the listing metrics in the given prioritized sequence(left to right). It could also be considered as a short-circuit
of given metrics for the first value existing metric.
Expression:
view_as_seq([<expression_1>, <expression_2>, ...])
For example:
if the first expression value is empty but the second one is not empty, it would return the result from the second expression.
The following example would return the content of the service_cpm metric.
view_as_seq(not_existing, service_cpm)
Result Type
The result type is determined by the type of selected not-null metric expression.
Expression Query Example
Labeled Value Metrics
service_percentile{_='0,1'}
The example result is:
{"data": {"execExpression": {"type": "TIME_SERIES_VALUES","error": null,"results": [{"metric": {"labels": [{"key": "_", "value": "0"}]},"values": [{"id": "1691658000000", "value": "1000", "traceID": null}, {"id": "1691661600000", "value": 2000, "traceID": null}]},{"metric": {"labels": [{"key": "_", "value": "1"}]},"values": [{"id": "1691658000000", "value": "2000", "traceID": null}, {"id": "1691661600000", "value": 3000, "traceID": null}]}]}}
}
If we want to transform the percentile value unit from ms
to s
the expression is:
service_percentile{_='0,1'} / 1000
{"data": {"execExpression": {"type": "TIME_SERIES_VALUES","error": null,"results": [{"metric": {"labels": [{"key": "_", "value": "0"}]},"values": [{"id": "1691658000000", "value": "1", "traceID": null}, {"id": "1691661600000", "value": 2, "traceID": null}]},{"metric": {"labels": [{"key": "_", "value": "1"}]},"values": [{"id": "1691658000000", "value": "2", "traceID": null}, {"id": "1691661600000", "value": 3, "traceID": null}]}]}}
}
Get the average value of each percentile, the expression is:
avg(service_percentile{_='0,1'})
{"data": {"execExpression": {"type": "SINGLE_VALUE","error": null,"results": [{"metric": {"labels": [{"key": "_", "value": "0"}]},"values": [{"id": null, "value": "1500", "traceID": null}]},{"metric": {"labels": [{"key": "_", "value": "1"}]},"values": [{"id": null, "value": "2500", "traceID": null}]}]}}
}
Calculate the difference between the percentile and the average value, the expression is:
service_percentile{_='0,1'} - avg(service_percentile{_='0,1'})
{"data": {"execExpression": {"type": "TIME_SERIES_VALUES","error": null,"results": [{"metric": {"labels": [{"key": "_", "value": "0"}]},"values": [{"id": "1691658000000", "value": "-500", "traceID": null}, {"id": "1691661600000", "value": 500, "traceID": null}]},{"metric": {"labels": [{"key": "_", "value": "1"}]},"values": [{"id": "1691658000000", "value": "-500", "traceID": null}, {"id": "1691661600000", "value": 500, "traceID": null}]}]}}
}
Calculate the difference between the service_resp_time
and the service_percentile
, if the service_resp_time
result is:
{"data": {"execExpression": {"type": "TIME_SERIES_VALUES","error": null,"results": [{"metric": {"labels": []},"values": [{"id": "1691658000000", "value": "2500", "traceID": null}, {"id": "1691661600000", "value": 3500, "traceID": null}]}]}}
}
The expression is:
service_resp_time - service_percentile{_='0,1'}
{"data": {"execExpression": {"type": "TIME_SERIES_VALUES","error": null,"results": [{"metric": {"labels": [{"key": "_", "value": "0"}]},"values": [{"id": "1691658000000", "value": "1500", "traceID": null}, {"id": "1691661600000", "value": "1500", "traceID": null}]},{"metric": {"labels": [{"key": "_", "value": "1"}]},"values": [{"id": "1691658000000", "value": "500", "traceID": null}, {"id": "1691661600000", "value": "500", "traceID": null}]}]}}
}
相关文章:
SkyWalking内置MQE语法
此文档出自SkyWalking官方git https://github.com/apache/skywalking docs/en/api/metrics-query-expression.md Metrics Query Expression(MQE) Syntax MQE is a string that consists of one or more expressions. Each expression could be a combination of one or more …...

Springboot2 Pandas Pyecharts 量子科技专利课程设计大作业
数据集介绍 1.背景 根据《中国科学:信息科学》期刊上的一篇文章,量子通信包括多种协议与应用类型: 基于量子隐形传态与量子存储中继等技术,可实现量子态信息传输,进而构建量子信息网络,已成为当前科研热点&…...
RabbitMQ里的几个重要概念
RabbitMQ中的一些角色: publisher:生产者consumer:消费者exchange个:交换机,负责消息路由,接受生产者发送的消息,把消息发送到一个或多个队列里queue:队列,存储消息virt…...

23. 图论 - 图的由来和构成
文章目录 图的由来图的构成Hi, 你好。我是茶桁。 从第一节课上到现在,我基本上把和人工智能相关的一些数学知识都教给大家了,终于来到我们人工智能数学的最后一个部分了,让我们从今天开始进入「图论」。 图论其实是一个比较有趣的领域,因为微积分其实更多的是对应连续型的…...

拼多多API接口解析,实现根据ID取商品详情
拼多多是一个流行的电商平台,它提供了API接口供开发者使用。要根据ID获取商品详情,您需要使用拼多多API接口并进行相应的请求。 以下是使用拼多多API接口根据ID获取商品详情的示例代码(使用Python编写): import requ…...
【JavaScript】解构
解构(Destructuring)是 JavaScript 中一种强大的语法特性,它允许你从数组或对象中提取值并赋值给变量,使代码更加简洁和易读。JavaScript 中有两种主要的解构语法:数组解构和对象解构。 数组解构 数组解构用于从数组…...
现代卷积网络实战系列2:训练函数、PyTorch构建LeNet网络
4、训练函数 4.1 调用训练函数 train(epochs, net, train_loader, device, optimizer, test_loader, true_value)因为每一个epoch训练结束后,我们需要测试一下这个网络的性能,所有会在训练函数中频繁调用测试函数,所有测试函数中所有需要的…...
rust特性
特性,也叫特质,英文是trait。 trait是一种特殊的类型,用于抽象某些方法。trait类似于其他编程语言中的接口,但又有所不同。 trait定义了一组方法,其他类型可以各自实现这个trait的方法,从而形成多态。 一、…...

TouchGFX之画布控件
TouchGFX的画布控件,在使用相对较小的存储空间的同时保持高性能,可提供平滑、抗锯齿效果良好的几何图形绘制。 TouchGFX 设计器中可用的画布控件: LineCircleShapeLine Progress圆形进度条 存储空间分配和使用 为了生成反锯齿效果良好的…...

STM32F103RCT6学习笔记2:串口通信
今日开始快速掌握这款STM32F103RCT6芯片的环境与编程开发,有关基础知识的部分不会多唠,直接实践与运用!文章贴出代码测试工程与测试效果图: 目录 串口通信实验计划: 串口通信配置代码: 测试效果图&#…...

Opencv-图像噪声(均值滤波、高斯滤波、中值滤波)
图像的噪声 图像的平滑 均值滤波 均值滤波代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [SimHei]img cv.imread("dog.png")#均值滤波cv.blur(img, (5, 5))将对图像img进行…...

MasterAlign相机参数设置-增益调节
相机参数设置-曝光时间调节操作说明 相机参数的设置对于获取清晰、准确的图像至关重要。曝光时间是其中一个关键参数,它直接影响图像的亮度和清晰度。以下是关于曝光时间调节的详细操作步骤,以帮助您轻松进行设置。 步骤一:登录系统 首先&…...
9月22日,每日信息差
今天是2023年09月22日,以下是为您准备的14条信息差 第一、亚马逊将于2024年初在Prime Video中加入广告。Prime Video内容中的广告将于2024年初在美国、英国、德国和加拿大推出,随后晚些时候在法国、意大利、西班牙、墨西哥和澳大利亚推出 第二、中国移…...

Java版本企业工程项目管理系统源码+spring cloud 系统管理+java 系统设置+二次开发
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...

Android studio中如何下载sdk
打开 file -> settings 这个页面, 在要下载的 SDK 前面勾上, 然后点 apply 在 platforms 中就可以看到下载好的 SDK: Android SDK目录结构详细介绍可以参考这篇文章: 51CTO博客- Android SDK目录结构...

STM32单片机中国象棋TFT触摸屏小游戏
实践制作DIY- GC0167-中国象棋 一、功能说明: 基于STM32单片机设计-中国象棋 二、功能介绍: 硬件组成:STM32F103RCT6最小系统2.8寸TFT电阻触摸屏24C02存储器1个按键(悔棋) 游戏规则: 1.有悔棋键&…...

【PHP图片托管】CFimagehost搭建私人图床 - 无需数据库支持
文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…...
CCITT 标准的CRC-16检验算法
/******该文件使用查表法计算CCITT 标准的CRC-16检验码,并附测试代码********/ #include #define CRC_INIT 0xffff //CCITT初始CRC为全1 #define GOOD_CRC 0xf0b8 //校验时计算出的固定结果值 /****下表是常用ccitt 16,生成式1021反转成8408后的查询表格****/ u…...
docker启动mysql服务
创建基础文件 mkdir mysql mkdir -p mysql/data获取默认的my.cnf docker run -name mysql -d -p 3306:3306 mysql:latest docker cp mysql:/etc/my.cnf ./vim mysql/my.cnf # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/8.1/en/se…...

Postman应用——Request数据导入导出
文章目录 导入请求数据导出请求数据导出Collection导出Environments 导出所有请求数据导出请求响应数据 Postman可以导入导出Request和Variable变量配置,可以通过文本方式(JOSN文本)或链接方式进行导入导出。 导入请求数据 可以通过JSON文件…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...