SkyWalking内置MQE语法

news/2024/12/2 19:50:30/

此文档出自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
OperatorDefinition
+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.

ExpressionExpressionYes/NoExpressionResultType
SINGLE_VALUESINGLE_VALUEYesSINGLE_VALUE
SINGLE_VALUETIME_SERIES_VALUESYesTIME_SERIES_VALUES
SINGLE_VALUESORTED_LIST/RECORD_LISTYesSORTED_LIST/RECORD_LIST
TIME_SERIES_VALUESTIME_SERIES_VALUESYesTIME_SERIES_VALUES
TIME_SERIES_VALUESSORTED_LIST/RECORD_LISTno
SORTED_LIST/RECORD_LISTSORTED_LIST/RECORD_LISTno

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
OperatorDefinition
>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)
OperatorDefinitionExpressionResultType
avgaverage the resultSINGLE_VALUE
countcount number of the resultSINGLE_VALUE
latestselect the latest non-null value from the resultSINGLE_VALUE
sumsum the resultSINGLE_VALUE
maxselect maximum from the resultSINGLE_VALUE
minselect minimum from the resultSINGLE_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)
OperatorDefinitionparametersExpressionResultType
absreturns the absolute value of the resultfollow the input expression
ceilreturns the smallest integer value that is greater or equal to the resultfollow the input expression
floorreturns the largest integer value that is greater or equal to the resultfollow the input expression
roundreturns result round to specific decimal placesplaces: a positive integer specific decimal places of the resultfollow 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)
parameterDefinitionExpressionResultType
avgcalculate avg value of a Labeled Value MetricsTIME_SERIES_VALUES
sumcalculate sum value of a Labeled Value MetricsTIME_SERIES_VALUES
maxselect the maximum value from a Labeled Value MetricsTIME_SERIES_VALUES
minselect the minimum value from a Labeled Value MetricsTIME_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}]}]}}
}

http://www.ppmy.cn/news/1116631.html

相关文章

vs2022 创建一个同时支持.net480和.net6.0的WPF项目

新建WPF项目&#xff0c;不要选.NET Framework框架的。如下图所示&#xff0c;选择第一个。&#xff08;选择.NET Framework框架改成.net6.0会报错&#xff09; 用记事本打开项目的csproj文件&#xff0c;修改TargetFrameworks标签&#xff0c;如下所示&#xff1a; <Pro…

Java多线程篇(3)——线程池

文章目录 线程池ThreadPoolExecutor源码分析1、如何提交任务2、如何执行任务3、如何停止过期的非核心线程4、如何使用拒绝策略 ScheduledThreadPoolExecutor源码分析 线程池 快速过一遍基础知识 7大参数 corePoolSize &#xff1a; 核心线程数 maximumPoolSize&#xff1a; 最…

Android SurfaceFlinger导读(01) surfaceFlinger谁写的?他还干了什么?

该系列文章总纲链接&#xff1a;Android GUI系统之SurfaceFlinger 系列文章目录 1 surfaceFlinger作者简介 surfaceFlinger是一个名为Mathias Agopian的工程师编写的。作者Mathias Agopian有着BE和PalmSource的工作经历&#xff0c;于2006年加入了Android团队。他是一个晚睡晚…

Day 00 python基础认识与软件安装

1、基础认识 首先&#xff0c;我们先来区分、了解一些知识点 编程&#xff0c;编程语言 编程&#xff1a;用代码写一个程序 编程语言&#xff1a;用那种语法规则编写程序 &#xff08;人与计算机之间进行交流的工具&#xff1a;c、c、java、python、php、go……&am…

Python类练习

文章目录 题目要求步骤 题目要求 1)创建一个 Kid 类&#xff0c;包含姓名&#xff0c;性别&#xff0c;年龄属性和 play 方法 2) 创建一个 Stu 类&#xff0c;继承 Kid 类&#xff0c;同时包含成绩属性&#xff0c;获取成绩方法&#xff0c;努力学习方法&#xff0c;play方法&…

跨平台编程开发工具Xojo 2023 Release mac中文版功能介绍

Xojo mac是一款跨平台的软件开发工具&#xff0c;它允许开发人员使用一种编程语言来创建应用程序&#xff0c;然后可以在多个操作系统上运行。Xojo 2023是Xojo开发工具的最新版本&#xff0c;它提供了许多功能和改进&#xff0c;以帮助开发人员更轻松地构建高质量的应用程序。 …

Word中的图片保存后变模糊怎么解决

目录 1.介绍 2.原因 3.解决方案 Word是由微软公司开发的一款文字处理软件&#xff0c;它是Microsoft Office套件的一部分。Word提供了丰富的功能和工具&#xff0c;使用户能够创建、编辑和格式化文档。它支持各种文本处理任务&#xff0c;包括编写信函、报告、论文、简历等。…

B树的定义和特点

1.多叉查找树的效率 策略1:m叉查找树中&#xff0c;规定除了根节点外&#xff0c;任何结点至少有[m/2]个分叉&#xff0c;即至少含有[m/2]-1个关键字。策略2:m叉查找树中&#xff0c;规定对于任何一个结点&#xff0c;其所有子树的高度都要相同。 而满足以上两种策略的树被称…