php mql获取结果集,promql查询表达式

Basics

即时矢量选择器

=:匹配与标签相等的内容

!=:不匹配与标签相等的内容

=~: 根据正则表达式匹配与标签符合的内容

!~:根据正则表达式不匹配与标签符合的内容

示例:

http_requests_total{environment=~"staging|testing|development",method!="GET"} #这将匹配method不等于GET,environment匹配到staging,testing或development的http_requests_total请求内容。

向量选择器必须指定一个名称或至少一个与空字符串不匹配的标签匹配器。以下表达式是非法的

{job=~".*"} # Bad!

相反,这些表达式是有效的,因为它们都有一个与空标签值不匹配的选择器。

{job=~".+"} # Good!

{job=~".*",method="get"} # Good!

范围矢量选择器

持续时间仅限于数字,接下来是以下单位之一:

s - seconds

m - minutes

h - hours

d - days

w - weeks

y - years

在此示例中,我们选择在过去5分钟内为度量标准名称为http_requests_total且标签设置为job=prometheus的所有时间序列记录的所有值:

http_requests_total{job="prometheus"}[5m]

偏移量修改器

偏移修改器允许更改查询中各个即时和范围向量的时间偏移。

例如,以下表达式相对于当前查询5分钟前的http_requests_total值:

http_requests_total offset 5m

注意,偏移修改器需要立即跟随选择器,即以下内容是正确的:

sum(http_requests_total{method="GET"} offset 5m) // GOOD.

以下内容是不正确的:

sum(http_requests_total{method="GET"}) offset 5m // INVALID.

同样适用于范围向量。这将返回http_requests_total一周前的5分钟增长率:

rate(http_requests_total[5m] offset 1w)

OPERATORS

二元运算符

算术二元运算符

Prometheus中存在以下二进制算术运算符:

+ (addition)

- (subtraction)

* (multiplication)

/ (division)

% (modulo)

^ (power/exponentiation)

比较二元运算符

== (equal)

!= (not-equal)

> (greater-than)

< (less-than)

>= (greater-or-equal)

<= (less-or-equal)

逻辑/集二进制运算符

and (intersection)

or (union)

unless (complement)

一对一矢量匹配

一对一从操作的每一侧找到唯一的条目对。在默认情况下,这是格式为vector1 vector2之后的操作。如果两个条目具有完全相同的标签集和相应的值,则它们匹配。 ignore关键字允许在匹配时忽略某些标签,而on关键字允许将所考虑的标签集减少到提供的列表:

ignoring()

on()

Example input:

method_code:http_errors:rate5m{method="get", code="500"} 24

method_code:http_errors:rate5m{method="get", code="404"} 30

method_code:http_errors:rate5m{method="put", code="501"} 3

method_code:http_errors:rate5m{method="post", code="500"} 6

method_code:http_errors:rate5m{method="post", code="404"} 21

method:http_requests:rate5m{method="get"} 600

method:http_requests:rate5m{method="del"} 34

method:http_requests:rate5m{method="post"} 120

Example query:

method_code:http_errors:rate5m{code="500"} / ignoring(code) method:http_requests:rate5m

这将返回一个结果向量,其中包含每个方法的状态代码为500的HTTP请求部分,在过去5分钟内测量。在不忽略(代码)的情况下,由于度量标准不共享同一组标签,因此不会匹配。方法put和del的条目没有匹配,并且不会显示在结果中:

{method="get"} 0.04 // 24 / 600

{method="post"} 0.05 // 6 / 120

多对一和一对多矢量匹配

多对一和一对多匹配指的是"一"侧的每个向量元素可以与"多"侧的多个元素匹配的情况。必须使用group_left或group_right修饰符明确请求,其中left/right确定哪个向量具有更高的基数。

ignoring() group_left()

ignoring() group_right()

on() group_left()

on() group_right()

Example query:

method_code:http_errors:rate5m / ignoring(code) group_left method:http_requests:rate5m

在这种情况下,左向量每个方法标签值包含多个条目。因此,我们使用group_left表明这一点。右侧的元素现在与多个元素匹配,左侧具有相同的方法标签:

{method="get", code="500"} 0.04 // 24 / 600

{method="get", code="404"} 0.05 // 30 / 600

{method="post", code="500"} 0.05 // 6 / 120

{method="post", code="404"} 0.175 // 21 / 120

多对一和一对多匹配是高级用例,应该仔细考虑。通常正确使用忽略()可提供所需的结果。

聚合运算符

Prometheus支持以下内置聚合运算符,这些运算符可用于聚合单个即时向量的元素,从而生成具有聚合值的较少元素的新向量:

sum (calculate sum over dimensions) #范围内求和

min (select minimum over dimensions) #范围内求最小值

max (select maximum over dimensions) #范围内求最大值

avg (calculate the average over dimensions) #范围内求最大值

stddev (calculate population standard deviation over dimensions) #计算标准偏差

stdvar (calculate population standard variance over dimensions) #计算标准方差

count (count number of elements in the vector) #计算向量中的元素数量

count_values (count number of elements with the same value) #计算向量中相同元素的数量

bottomk (smallest k elements by sample value)#样本中最小的元素值

topk (largest k elements by sample value)#样本中最大的元素值

quantile (calculate φ-quantile (0 ≤ φ ≤ 1) over dimensions) #计算 0-1 之间的百分比数量的样本的最大值

这些运算符可以用于聚合所有标签维度,也可以通过包含without或by子句来保留不同的维度。

([parameter,] ) [without|by ()]

parameter仅用于count_values,quantile,topk和bottomk。without从结果向量中删除列出的标签,而所有其他标签都保留输出。 by相反并删除未在by子句中列出的标签,即使它们的标签值在向量的所有元素之间是相同的

例:如果http_requests_total具有按application,instance和group标签列出的时间序列,我们可以通过以下方式计算每个应用程序和组在所有实例上看到的HTTP请求总数:

sum(http_requests_total) without (instance)

等于:

sum(http_requests_total) by (application, group)

如果我们只对我们在所有应用程序中看到的HTTP请求总数感兴趣,我们可以简单地写:

sum(http_requests_total)

要计算运行每个构建版本的二进制文件的数量,我们可以编写:

count_values("version", build_version)

要在所有实例中获取5个最大的HTTP请求计数,我们可以编写:

topk(5, http_requests_total)

FUNCTIONS

abs(v instant-vector) #返回其绝对值

absent() # 如果传递给它的向量具有该元素,则返回空向量;如果传递给它的向量没有元素,则返回传入的元素。

Example query:

nginx_server_connections

nginx_server_connections{endpoint="metrics",instance="192.168.43.5:9913",job="nginx-vts",namespace="dev",pod="nginx-vts-9fcd4d45b-sdqds",service="nginx-vts",status="accepted"} 89061

nginx_server_connections{endpoint="metrics",instance="192.168.43.5:9913",job="nginx-vts",namespace="dev",pod="nginx-vts-9fcd4d45b-sdqds",service="nginx-vts",status="handled"} 2

absent(nginx_server_connections{job="nginx-vts"}) => {}

absent(nginx_server_connections{job="nginx-vts123"}) => {job="nginx-vts123"}

ceil(v instant-vector) #返回向量中所有样本值(向上取整数)

round(v instant-vector, to_nearest=1 scalar) #返回向量中所有样本值的最接近的整数,to_nearest是可选的,默认为1,表示样本返回的是最接近1的整数倍的值, 可以指定任意的值(也可以是小数),表示样本返回的是最接近它的整数倍的值

floor(v instant-vector) #返回向量中所有样本值(向下取整数)

changes(v range-vector) #对于每个输入时间序列,返回其在时间范围内(v range-vector)更改的次数

clamp_max(v instant-vector, max scalar) #限制v中所有元素的样本值,使其上限为max

clamp_min(v instant-vector, min scalar) #限制v中所有元素的样本值,使其下限为min

year(v=vector(time()) instant-vector) #返回UTC中给定时间的年份

day_of_month(v=vector(time()) instant-vector) #返回UTC中给定时间的月中的某一天,返回值为1到31

day_of_week(v=vector(time()) instant-vector) #返回UTC中给定时间的当周中的某一天,返回值为0到6

days_in_month(v=vector(time()) instant-vector) #返回UTC中给定时间的一个月的天数,返回值28到31

hour(v=vector(time()) instant-vector) #返回UTC中给定时间的当天中的某一小时,返回值为0到23

minute(v=vector(time()) instant-vector) #返回UTC中给定时间的小时中的某分钟,返回值为0到59

delta(v range-vector) #返回一个即时向量,它计算每个time series中的第一个值和最后一个值的差别

deriv(v range-vector) #计算每个time series的每秒的导数(derivative)

exp(v instant-vector) #计算v中所有元素的指数函数

histogram_quantile(φ float, b instant-vector) #从buckets类型的向量中计算φ(0 ≤ φ ≤ 1)百分比的样本的最大值

holt_winters(v range-vector, sf scalar, tf scalar) #根据范围向量中的范围产生一个平滑的值

idelta(v range-vector) #计算最新的2个样本值之间的差别

increase(v range-vector) #计算指定范围内的增长值, 它会在单调性发生变化时(如由于目标重启引起的计数器复位)自动中断

irate(v range-vector) #计算给定时间窗口内的每秒瞬时增加速率, 基于的是最新的2个数据点

rate(v range-vector) #计算给定时间窗口内的每秒的平均值

resets(v range-vector) #对于每个 time series , 它都返回一个 counter resets的次数

sort(v instant-vector) #对向量按元素的值进行升序排序

sort_desc(v instant-vector) #对向量按元素的值进行降序排序

sqrt(v instant-vector) #返回v中所有向量的平方根

time() #返回从1970-1-1起至今的秒数,UTC时间

参考链接:https://prometheus.io/docs/prometheus/latest/querying/basics/

如何使用 Entity Framework 构造动态查询表达式

一般的程序员做上几年以后, 或多或少的都有些代码的积累, 我也不例外. 作为微软技术程序员, 自从Linq和EF出来之后, 就基本上爱不释手了, 且不说执行效率的问题, 单单就开发效率和代码的可移植性 ...

Linq查询表达式

目录 1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. ...

《C&num;本质论》读书笔记(15)使用查询表达式的LINQ

15.1 查询表达式的概念 简单的查询表达式 private static void ShowContextualKeywords1() { IEnumerable sel ...

lambda表达式和查询表达式

(1)Lambda表达式定义: Lambda是创建匿名函数的另一种形式.它比对应的匿名方法更加的简化.因此,所有的情况都推荐使用Lambda表达式.   它可以包括表达式和语句,并且用于创建委托和事件 ...

LINQ 查询表达式(C&num; 编程指南)

语言集成查询 (LINQ) 是一组技术的名称,这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic 和可能的任何其他 .NET 语言)的基础上.  借助于 LINQ,查询现在 ...

Linq专题之创建Linq查询表达式

本节我们主要介绍一下如何创建查询集合类型,关系数据库类型,DataSet对象类型和XML类型的数据源的Linq查询表达式. 下面在实例代码ReadyCollectionData()函数创建了准备的数据 ...

LinQ实战学习笔记&lpar;三&rpar; 序列&comma;查询操作符&comma;查询表达式&comma;表达式树

序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...

LINQ之路 5:LINQ查询表达式

书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询表达式(Query Expression). LINQ方法语法的本质是通过扩展方法和Lambda表达式来创建查询.C# ...

C&num; 标准查询表达式

一.标准查询运算符 1.C#提供了标准查询运算符,例如我想选择专利一系列(pantents)中以年份19开头的专利,可以用如下语句: IEnumerable pantent ...

随机推荐

nginx中error&lowbar;page没有生效(nginx&plus;passenger&plus;rails)

应用部署方式为 nginx + passenger + rails 当我想要用nginx来默认处理400以上状态时,发现在rails返回respose之后,nginx不会再次执行error_page( ...

部署&period;NET开发环境

昨晚把家里的电脑重新部署.NET开发环境.从晚上21点安装到今天凌晨3点多才完成,还算顺利,但是耗时最漫长莫过于在安装Visual Studio 2015 Update3...... 第一,全新安装W ...

ipv4理论知识3-分类编址之两级编址

两级编制 分类编址时,同一网络中的所有地址都属于统一个地址块,而每个地址块包含两部分:网络标识和主机标识.网络标识指明了网络,主机标识则指明了连接到该网络的一台特定的主机.如下图描绘了分类编址中一个I ...

Swift语言之类型方法

Swift语言有很多特性,其中之一就是类型方法,相对于其他比较流行的编程语言(C#.Java),在Swift中类型方法最大的特征在于它的可继承性,我们举个例子说明: 俗话说,龙生龙凤生凤老鼠生儿会打洞 ...

Linux 修改默认文件关联打开程序

从总体上讲 /etc/gnome/defaults.list 保存了全局的打开方式-/.local/share/applications/mimeapps.list 保存了个人的打开方式当这两个文件不 ...

Linux学习笔记12——Unix中的进程

通过调用fork和exec函数都能创建新的进程,但两者有着本质的区别:fork函数拷贝了父进程的内存映像,而exec函数用用新的映像来覆盖调用进程的进程映像的功能. 一  fork函数 #includ ...

android jar 第三方包

工程交叉了,做相互引用 1.单纯的代码jar  不引用res http://terryblog.blog.51cto.com/1764499/564558 1.2.连带源码一起打包出来 http:// ...

为什么需要DevOps

过去一年以来,一批来自欧美的.不墨守陈规的系统管理员和开发人员一直在谈论一个新概念:DevOps.DevOps 就是开发(Development) 和运维(Operations)这两个领域的合并.(如 ...

Multimodal —— 看图说话(Image Caption)任务的论文笔记(三)引入视觉哨兵的自适应attention机制

在此前的两篇博客中所介绍的两个论文,分别介绍了encoder-decoder框架以及引入attention之后在Image Caption任务上的应用. 这篇博客所介绍的文章所考虑的是生成captio ...

SQL学习之查询

查询实例: 1.创建数据库并使用: create database school; use school; 2.创建表并插入内容: create table student( Sno char(9) ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值