4. 聚合运算符
- 操作符
操作 | 说明 |
---|
sum | 求和 |
min | 最小值 |
max | 最大值 |
avg | 平均值 |
stddev | 标准差 |
stdvar | 方差 |
count | 统计元素个数 |
count_values | 等于某值的元素个数 |
bottomk | 最小的 k 个元素 |
topk | 最大的 k 个元素 |
quantile | 分位数 |
- 示例(sum)
| sum(system_disk_bytes_total{ ident="10.10.239.52"})/1024/1024/1024 |
有图有真相

- 示例(min/max)
| max(system_disk_bytes_total{ ident="10.10.239.52"}) |
有图有真相

- 示例(count_values)
| count_values("value",system_mem_total) |
有图有真相

- 示例(bottomk | topk)
| bottomk(5,system_mem_used) |
有图有真相

5. 内置函数
5.1 取整
- ceil() 向上取整
| ceil(system_mem_used_percent{ident="10.10.239.31"}) |
- floor() 向下取整
| floor(system_mem_used_percent{ident="10.10.239.31"}) |
- round() 四舍五入
| round(v instant-vector, to_nearest=1 scalar) |
| round(system_mem_used_percent{ident="10.10.239.31"}) |
5.2 限定范围
- clamp() 限定取值范围
说明:在范围内的值被取出,在范围外取范围边界值。
| clamp(v instant-vector, min scalar, max scalar) |
| clamp(system_mem_used_percent{ident="10.10.239.31"},4,10) |
完整示例:
| system_mem_used_percent{ident="10.10.239.31"} |
结果输出
| system_mem_used_percent{ident="10.10.239.31"} 5.226927972811279 |
| clamp(system_mem_used_percent{ident="10.10.239.31"},4,10) |
结果输出
| {ident="10.10.239.31"} 5.232399234516268 |
| clamp(system_mem_used_percent{ident="10.10.239.31"},7,10) |
结果输出
- clamp_max() 限定最大值
值小于限定值则显示原有值,值大于限定值则显示限定值。
| clamp_max(v instant-vector, max scalar) |
| clamp_max(system_mem_used_percent{ident="10.10.239.31"},7) |
- clamp_min() 限定最小值
值大于限定值则显示原有值,值小于限定值则显示限定值。
| clamp_min(v instant-vector, max scalar) |
| clamp_min(system_mem_used_percent{ident="10.10.239.31"},7) |
5.3 值变化统计
- changes() 区间内样本改变次数
| changes(system_mem_used_percent{ident="10.10.239.31"}[5m]) |
- resets() 复位统计
连续样本数值减少,视为复位
| resets(system_mem_used_percent{ident="10.10.239.31"}[5m]) |
- delta() 首尾差
计算区间第一个和最后一个值的差
| delta(system_mem_used_percent{ident="10.10.239.31"}[10m]) |
结果显示
| {ident="10.10.239.31"} -0.004406665458601161 |
- idelta() 尾首差
计算区间第一个和最后一个值的差
| idelta(system_mem_used_percent{ident="10.10.239.31"}[10m]) |
结果显示
| {ident="10.10.239.31"} -0.0011583301807851498 |
- rate() 增长率
说明:计算范围向量中时间序列的平均每秒增长率
| rate(system_mem_used_percent{ident="10.10.239.31"}[10m]) |
结果显示
| {ident="10.10.239.31"} 0.1416991173036296 |
- increase() 区间增长量
计算时间范围内的增量 = 时间范围内秒数 * rate()
| increase(system_mem_used_percent{ident="10.10.239.31"}[10m]) |
结果显示
| {ident="10.10.239.31"} 80.79502430097307 |
- irate() 增长率(最后两值计算)
通过时间范围的最后两个点来计算每秒瞬时增长率。
| irate(system_mem_used_percent{ident="10.10.239.31"}[10m]) |
5.4 日期与时间
- year() 返回年
值如果是时间戳,则返回值是几点
| year(v=vector(v instant-vector) |
| year(mongodb_instance_local_time) |
结果显示
今天是2022/10/24 10:24 星期一
| {app="mongodb", chart="mongodb-7.8.10", ……} 2022 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 2022 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 2022 |
- month() 返回月
值如果是时间戳,则返回值是几点
| month(v=vector(v instant-vector) |
| month(mongodb_instance_local_time) |
结果显示
今天是2022/10/24 10:24 星期一
| {app="mongodb", chart="mongodb-7.8.10", ……} 2 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 2 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 2 |
- day_of_month() 返回日
值如果是时间戳,则返回值是这个月的第几天
| day_of_month(v instant-vector) |
| day_of_month(mongodb_instance_local_time) |
结果显示
今天是2022/10/24 星期一
| {app="mongodb", chart="mongodb-7.8.10", ……} 24 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 24 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 24 |
- hour() 返回小时
值如果是时间戳,则返回值是几点
| hour(mongodb_instance_local_time) |
结果显示
今天是2022/10/24 10:24 星期一
| {app="mongodb", chart="mongodb-7.8.10", ……} 10 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 10 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 10 |
- minute() 返回分钟
值如果是时间戳,则返回值是几点
| minute(mongodb_instance_local_time) |
结果显示
今天是2022/10/24 10:24 星期一
| {app="mongodb", chart="mongodb-7.8.10", ……} 24 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 24 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 24 |
- day_of_week() 返回星期几
值如果是时间戳,则返回值是星期几
| day_of_week(v instant-vector) |
| day_of_week(mongodb_instance_local_time) |
结果显示
今天是2022/10/24 星期一
| {app="mongodb", chart="mongodb-7.8.10", ……} 1 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 1 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 1 |
- day_in_month() 返回该月一共几天
值如果是时间戳,则返回值是这个月一共几天
| day_in_month(v=vector(v instant-vector) |
| day_in_month(mongodb_instance_local_time) |
结果显示
今天是2022/10/24 星期一
| {app="mongodb", chart="mongodb-7.8.10", ……} 31 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 31 |
| {app="mongodb", chart="mongodb-7.8.10", ……} 31 |
- timestamp()
返回每个样本的时间戳
| timestamp(v instant-vector) |
| timestamp(system_mem_used) |
5.6 标签
- label_join() 联合标签
用于建立一个新标签,值链接多个原有标签
| label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...) |
| label_join(probe_success{group="http", instance="10.1.xxx.68:80", job="http_hq_nginx", project="xxxxx"},"new_label","://","group","instance") |
结果显示
| probe_success{group="http", instance="10.1.xxx.68:80", job="http_hq_nginx", new_label="http://10.1.xxx.68:80", project="xxxxx"} 1 |
- label_replace() 正则添加标签
用于建立一个新标签,并付给新值,并支持正则匹配原有值
| label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string) |
| label_replace(probe_success{instance="10.1.30.68:80"},"port","$1","instance",".*:(.*)") |
结果显示
可见新增加了port标签,并从instance标签处匹配到了 80端口。
| probe_success{group="http", instance="10.1.xxx.68:80", job="http_hq_nginx", port="80", project="HQ-AllInOne-PC"} 1 |
5.7 预测
- predict_linear()
| predict_linear(v range-vector, t scalar) |
| predict_linear(system_mem_used_percent{ident="10.10.xxx.31"}[2h],3600) |
通过2小时内的数据,推算3600s后的数据
5.8 判断
- absent() 判断瞬时向量存在
- 返回空的情况
job
的值没有 http_hq_nginx
- 搜索到的结果不是2
- 返回值为1
| absent(probe_success{job="http_hq_nginx" } == 2 ) |
| probe_success{job="http_hq_nginx" } |
结果显示
所有端口都是存活的,因此返回值都是1
| probe_success{group="http", instance="10.1.xxx.68:80", job="http_hq_nginx", project="HQ-AllInOne-PC"} 1 |
| probe_success{group="http", instance="10.1.xxx.68:8080", job="http_hq_nginx", project="HQ-AllInOne-PC"} 1 |
| probe_success{group="http", instance="10.1.xxx.69:80", job="http_hq_nginx", project="HQ-AllInOne-PC"} 1 |
| probe_success{group="http", instance="10.1.xxx.69:8080", job="http_hq_nginx", project="HQ-AllInOne-PC"} 1 |
| probe_success{group="http", instance="10.1.xxx.73:80", job="http_hq_nginx", project="HQ-AllInOne-PC"} 1 |
| probe_success{group="http", instance="10.1.xxx.73:8080", job="http_hq_nginx", project="HQ-AllInOne-PC"} 1 |
| absent(probe_success{job="http_hq_nginx" } == 1 ) |
| absent(probe_success{job="liubei" } == 1 ) |
结果
| absent(probe_success{job="http_hq_nginx" } == 2 ) |
结果
- absent_over_time() 判断区间值存在
| absent_over_time(v range-vector) |
| absent_over_time(probe_success{job="hello"}[1m]) |
结果显示
job标签没有 “hello”这个值,因此返回 1
- scalar() 判断是否一个向量
| scalar(system_mem_used_percent{ident="10.10.239.31"}) |
返回结果
| scalar(system_mem_used_percent{ident="10.10.239.31"}) |
返回结果
- vector(s scalar)
将标量作为没有标签的向量返回
| vector(scalar(system_mem_used_percent{ident="10.10.239.31"})) |
结果显示
可以回翻一下刚才的scalar
的结果,是带scalar
的
- sgn() 判断正负
说明:
- 如果 v 为正,则为 1
- 如果 v 为负,则为 -1
- 如果 v 等于 0,则为 0。
| sgn(system_mem_used_percent{ident="10.10.239.31"}) |
5.9 排序和最值
- sort() 升序排列
| sort(system_mem_used_percent) |
- sort_desc() 降序排列
| sort_desc(v instant-vector) |
| sort_desc(system_mem_used_percent) |
- avg_over_time() 区间内取平均
| avg_over_time(range-vector) |
- min_over_time() 区间内最小值
| min_over_time(range-vector) |
- max_over_time() 区间内最大值
| max_over_time(range-vector) |
- sum_over_time() 区间求和
| sum_over_time(range-vector) |
- count_over_time() 区间值统计
统计单位时间内取到指标个数
| count_over_time(range-vector) |
| count_over_time(system_mem_used_percent{ident="10.10.239.31"}[3m]) |
结果显示
验证:system_mem_used_percent{ident="10.10.239.31"}[3m]
取到的数据确实是 9 条
- quantile_over_time() 区间分位数
说明:区间向量内每个度量指标的样本数据值分位数,φ-quantile (0 ≤ φ ≤ 1)
| quantile_over_time(scalar, range-vector) |
- stddev_over_time() 区间标准偏差
说明:区间向量内每个度量指标的总体标准偏差
| stddev_over_time(range-vector) |
- stdvar_over_time() 区间标准方差
说明:区间向量内每个度量指标的总体标准方差
| stdvar_over_time(range-vector) |
5.10 数学计算
- abs() 绝对值
- sqrt() 平方根
- deriv() 导数
- exp() 指数函数
- ln()、log2()、log10() 对数
| ln|log2|log10(v instant-vector) |
5.11 三角函数、弧度
- acos(v instant-vector)
- acosh(v instant-vector)
- asin(v instant-vector)
- asinh(v instant-vector)
- atan(v instant-vector)
- atanh(v instant-vector)
- cos(v instant-vector)
- cosh(v instant-vector)
- sin(v instant-vector)
- sinh(v instant-vector)
- tan(v instant-vector)
- tanh(v instant-vector)
- deg(v instant-vector)
- pi()
- rad(v instant-vector)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App