【博客641】Prometheus Subqueries in VictoriaMetrics

news/2024/5/19 1:58:13 标签: prometheus, java, 开发语言

Prometheus Subqueries in VictoriaMetrics

没有PromQL Subqueries时

以前不支持Subqueries时,类似以下这种联合查询是不被允许的:

max_over_time(rate(my_counter_total[5m])[1h])
predict_linear(rate(my_counter_total[5m])[1d], 3600)

以前执行联合查询的方式:把内部子查询先用rule record实现,再引用rule record

instance:my_counter:rate5m = rate(my_counter_total{job="myjob"}[5m])

# You can use this new metric now in rules, alerts or graphs.
instance:my_counter:predict_linear1d_1h_rate5m = 
predict_linear(instance:my_counter:rate5m{job="myjob"})[1d], 3600)

PromQL Subqueries

  • 过去一小时每秒错误超过 10 次的时间百分比:
    avg_over_time((rate(errors_total[5m]) > bool 10)[1h:1m])

  • 过去一小时的网络带宽的第 95 个百分位数:
    quantile_over_time(0.95, rate(node_network_receive_bytes_total[5m])[1h:1m])

  • 最近 30 分钟每秒的最小请求数:
    min_over_time(rate(requests_total[5m])[30m:])

  • 最后一小时的最大汽车加速度:
    max_over_time(deriv(rate(traveled_meters_total[1m])[5m:])[1h:])

Extending Prometheus subqueries(VictoriaMetrics supports Prometheus subqueries and extends them)

VictoriaMetrics 提供以下扩展:

  • 可以在查询的任何地方添加Offsets

    以下查询返回前一天的缓存请求数:
    (rate(hits_total[5m]) + rate(miss_total[5m])) offset 1d

    这等效于以下 PromQL 查询:
    rate(hits_total[5m] offset 1d) + rate(miss_total[5m] offset 1d)

    这在构建具有不同偏移量的多个图形时特别有用。例如,以下查询返回“今天”、“昨天”和“一周前”的 rps 图,因此 rps 是随时间增加还是减少变得很明:

    with (
    rps = rate(requests_total[5m]),
    )
    union(
    label_set(rps, “graph”, “today”),
    label_set(rps offset 1d, “graph”, “yesterday”),
    label_set(rps offset 7d, “graph”, “week_ago”),
    )

  • 外部查询中的 [range:] 可以写成没有尾随冒号的 [range] :

    min_over_time(rate(requests_total[5m])[1h])

  • 外部和内部查询都可以省略方括号:

    deriv(rate(requests_total))

    它等效于以下具有从 query_range API 获取的步长值的 PromQL 查询:

    deriv(rate(requests_total[step])[step:step])

    该步长也称为interval,等于 Grafana 中图形上两个相邻点之间的duration时间

如果 VictoriaMetrics 变得小于两个时间序列点之间的间隔,它会自动调整太小的范围,因此图表在小缩放级别或大刮擦间隔上保持可见(和可用)。

Prometheus subquery pitfalls

虽然子查询很强大,但它们很容易被滥用。例如,以下查询将返回不正确的结果:

rate(sum(requests_total)[5m:])

查询对所有requests_total计数器求和,然后计算总和的速率。问题在于查询处理计数器重置的错误——如果某些requests_total时间序列被重置(例如,由于微服务重启),那么总和可能会下降一点,因此将返回rate不正确的结果。Prometheus 不提供修复此类查询的功能。唯一的方法是sum交换rate:

sum(rate(requests_total[5m]))

VictoriaMetrics 提供了remove_resets函数,可用于修复原始查询:

rate(sum(remove_resets(requests_total))[5m])

remove_resets函数从 中删除计数器重置requests_total,返回始终增加的时间序列,可以安全地求和并传递给rate.


http://www.niftyadmin.cn/n/404240.html

相关文章

STM32 实现简单定时任务调度器,动态创建任务,两种思路实现跑马灯

代码实现和硬件没关系,所以并不限于STM32,Arduino 之类的其他地方也能用,只要有一个能获取时间的函数就行,或者说,只要有一个会随着时间自动增加的变量就行,时间单位无所谓,所以确实想的话&…

SpringBoot+MyBatisplus搭建校园新闻平台——已开源

概述 开发背景 校园新闻平台是以新闻宣传机构的在线信息发布需求为基础,随着数字化和信息化的快速发展,校园新闻在校园内的传播和沟通中变得越来越重要。学校需要一个有效的管理系统来整合、发布和传播校园新闻,以满足师生、校友和其他利益…

mac m1/m2 安装 ps 2023 插件无法显示扩展界面

碎碎念:一直在踩坑的路上,甚至想休息时间玩一会儿 ps 都能踩坑 问题描述 新的 m2 芯片 mac 安装了色环插件后,在窗口界面中没有找到扩展,且在首选项->增效工具的旧版扩展也是灰色的 题外话:记录一下 mac 的 photo…

web自动化测试入门篇02——selenium安装教程

1. 目的 web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”,通常都会作为广大测试从业者的首选学习对象,相较于C/S架构的自动化来说,B/S有着其无法忽视的诸多优势,从行业发展趋、研发模式特点、测试工具支持&#x…

Golang:Go语言结构

Go 语言结构 在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go Hello World 实例 Go 语言的基础组成有以下几个部分: 包声明引入包函数变量语句 & 表达式注释 接下来让我们来看下简单的代码&#xff0c…

文心一言 VS 讯飞星火 VS chatgpt (33)-- 算法导论5.2 5题

五、设A[1…n]是由n个不同数构成的数列。如果i<j且A[i]>A[j]&#xff0c;则称(i&#xff0c;j)对为A的一个逆序对(inversion)。(参看思考题2-4 中更多关于逆序对的例子。)假设A的元素构成(1&#xff0c;2&#xff0c;… &#xff0c;n)上的一个均匀随机排列。请用指示器随…

CVE漏洞复现-CVE-2023-32233 NetFilter权限提升

CVE-2023-32233 NetFilter权限提升 Netfilter是Linux 内核中的网络数据包处理框架&#xff08;iptables&#xff09;通过各种规则和过滤器&#xff0c;基于数据包的来源、目标地址、协议类型、端口号等信息&#xff0c;控制网络流量和数据包的转发和处理具体&#xff0c;详情请…

RK1126 C++ yolov5 6.2

基于 rk npu &#xff0c; 实现 yolov5 6.2 模型推理 实现过程 ⚡️​ 编译 opencv 需根据自己路径修改. cmake -D CMAKE_BUILD_TYPERELEASE \-D CMAKE_C_COMPILER./gcc-arm-8.3-2019.02-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \-D CMAKE_CXX_COMPILER./gc…