选择与提供的字符串完全相同的数据
例:筛选出id=“G1 Eden Space” 的数据
jvm_memory_used_bytes{id="G1 Eden Space"}
与相等匹配器相反,用来选择与提供字符串不相同的数据
例:选择 id 不为G1 Eden Space 的数据
jvm_memory_used_bytes{id!="G1 Eden Space"}
选择与提供的正则表达式相匹配的数据
例:从id 标签中筛选出 G1开头的数据
jvm_memory_used_bytes{id =~ "G1.*"}
选择与提供的正则表达式不匹配的数据
例:从id 标签中筛选出 不以G1开头的数据
jvm_memory_used_bytes{id !~ "G1.*"}
jvm_memory_used_bytes 同 {name = “jvm_memory_used_bytes”},也可以用其他匹配器
返回在指定时间戳查询到的最新样本值
最简单形式:返回包含该指标名称的所有时间序列的瞬时向量
例:筛选出了所有指标为jvm_memory_used_bytes的数据
jvm_memory_used_bytes
返回一段时间内的样本数据。通过末尾[]
进行时间定义,如1m,表示1分钟之内
例:返回一分钟内的数据
jvm_memory_used_bytes[1m]
图中每一条数据都4个样本值,表示1分钟之内采集了4次数据。
可使用的时间单位:秒(s)、分钟(m)、小时(h)、天(d)、周(w)、年(y)
可以让瞬时向量和区间向量的时间发生偏移
例:查询前1分钟的jvm_memory_used_bytes 样本值
jvm_memory_used_bytes offset 1m
注意与 jvm_memory_used_bytes1m 的区别
@ 修饰符能够修改瞬时向量和区间向量的求值时间,使用@时间戳 表示
例:查询 2023-01-18 19:08:59 的 jvm_memory_used_bytes 指标
jvm_memory_used_bytes @1674040139
例:查询2023-01-18 19:08:59 时,前 5分钟的 jvm_memory_used_bytes指标
jvm_memory_used_bytes @1674040139 offset 5m
支持6种算术运算符,加法(+)、减法(-)、乘法(*)、除法(/)、模(%)、幂(^)
例1:计算堆内存使用率
sum(jvm_memory_used_bytes{area=“heap”}) 表示已使用的堆内存
sum(jvm_memory_max_bytes{area=“heap”}) 表示堆总内存
sum(jvm_memory_used_bytes{area="heap"})*100 / sum(jvm_memory_max_bytes{area="heap"})
and(并且)、or(或者)、unless(排除)
还是用jvm_memory_used_bytes 指标来举例。
and 示例:
vector1:所有实例的堆内存数据
jvm_memory_used_bytes{area="heap"}
vector2:筛选出 instance=“192.168.0.113:9000”,area=“heap” 数据
jvm_memory_max_bytes{instance="192.168.0.113:9000",area="heap"}
and 运算符后,只保留了instance=“192.168.0.113:9000”,area=“heap” 标签相同的数据
jvm_memory_used_bytes{area="heap"} and jvm_memory_max_bytes{instance="192.168.0.113:9000",area="heap"}
发现 and 运算符并不管 指标名是否一样
or 示例:
为了更加直观,使用另外一个指标http_server_requests_seconds_count
unless 示例:
== 相等、!=不相等、>大于、<小于、>=大于等于、<=小于等于
例:在运算符之后加上bool关键字可以让结果返回0或1
99 >= bool 88
Prometheus 的向量与向量 之间进行运算操作时会基于默认的匹配规则:依次找到与左边向量元素匹配(标签完全一致)的右边向量元素进行运算,如果没有找到匹配元素,直接丢弃。向量匹配主要有:一对一,一对多,多对一。
一对一匹配:
即两遍拥有的标签完全相同,找到唯一一条条目依次进行匹配。
process_open_fds / process_max_fds
如果两边拥有的标签不一致可以用 on 或 ignoring 关键字修改标签间的匹配行为。
on:指定要匹配的标签,只匹配指定的标签。
ignoring:忽略某些标签,就是指定的这些标签不匹配,其他的都匹配。
如下示例中只对 instance 和 job 两个标签进行匹配。
sum by(instance, job) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
/ on (instance, job)
sum by(instance, job) (rate(node_cpu_seconds_total [5m] ))
两个瞬时向量进行比较时都会返回左边的表达式:
如下示例都会返回左边的表达式:可以根据需求来写表达式。
process_open_fds < process_max_fds
process_max_fds > process_open_fds
一对多或多对一匹配:
group_left: 左边有更多的子集
group_right:右边有更多的子集
用法:
<vector expr> <bin-op> ignoring(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> ignoring(<label list>) group_right(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) group_right(<label list>) <vector expr>
分组只能用于 比较和算术运算符中 作者其他文章: Grafana 系列文章,版本:OOS v9.3.1
Spring Boot Admin 系列