Prometheus PromQL查询语言指南

这篇具有很好参考价值的文章主要介绍了Prometheus PromQL查询语言指南。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


^
│     . . . . . . . . . .   node_load1{host="host01",zone="bj"}│     . . . . . . . . . .   node_load1{host="host02",zone="sh"}│     . . . . . . . . . .   node_load1{host="host11",zone="sh"}v<------- 时间 ---------->


每个点为: 一个样本(sample),样本由三部分组成

  • 指标 (metric): 描述当前样本特征的 labelsets

  • 时间戳 (timestamp): 一个精确到毫秒的时间戳

  • 值 (value): 该时间样本的值

过滤

过滤选择,两个需求 :

-- 查询上海所有机器 1 分钟的负载node_load1{zone="sh"}-- 查询所有以 host0 为前缀的机器 1 分钟的负载node_load1{host=~"host0.*"}


标签过滤的操作符 :

  • 不等于 !=

  • 正则非 !~

对 metric 名metric 过滤

{__name__=~"node_load.*", zone="sh"}


3 条 PromQL 都是即时查询(Instant Query),返回即时向量( Instant Vector)

  • 返回当前时间内的最新值

Prometheus 控制当前时间内的最长时间

  • 默认: 5 分钟

  • 建议调短为 1 分钟 --query.lookback-delta=1m

--query.lookback-delta


范围查询(Range Query),返回 Range Vector

  • 多加了时间范围 1 分钟,会返回多个点

  • 当数据 10 秒钟采集一次,1 分钟有 6 个点,都会返回

{__name__=~"node_load.*", zone="sh"}[1m]


运算符

算术

-- 计算内存可用率: 内存可用量/内存总量,就 * 100 (百分比呈现)mem_available{app="clickhouse"} / mem_total{app="clickhouse"} * 100-- 计算北京区网口出向的速率,原始数据的单位: byte,网络流量单位用bit,就 * 8irate(net_sent_bytes_total{zone="beijing"}[1m]) * 8


比较

比较运算符: 大于、小于、等于、不等于

  • 一般用来配置告警规则

mem_available{app="clickhouse"} / mem_total{app="clickhouse"} * 100 < 20irate(net_sent_bytes_total{zone="beijing"}[1m]) * 8 / 1024 / 1024 > 700


  • expr: 指定查询 PromQL, 当查到几条,就触发几条告警

  • for: 1m: 连续 1 分钟都查询才会告警

groups:- name: host  rules:
  - alert: MemUtil    expr: mem_available{app="clickhouse"} / mem_total{app="clickhouse"} * 100 < 20    for: 1m    labels:
      severity: warn    annotations:
      summary: Mem available less than 20%, host:{{ $labels.ident }}


逻辑

逻辑运算符有 3 个,用于 instant-vector 运算

  • and : 求交集

  • or : 求并集

  • unless : 求差集

只有< 200G 的硬盘, 并使用率超过 70% :

disk_used_percent{app="clickhouse"} > 70 and disk_total{app="clickhouse"}/1024/1024/1024 < 200


向量匹配

该 MySQL 实例是个 slave (master_server_id>0) ,就检查 slave_sql_running 值

  • slave_sql_running==0 : slave sql 线程没有运行

mysql_slave_status_slave_sql_running == 0and ON (instance)mysql_slave_status_master_server_id > 0


## example seriesmethod_code:http_errors:rate5m{method="get", code="500"}  24method_code:http_errors:rate5m{method="get", code="404"}  30method_code:http_errors:rate5m{method="put", code="501"}  3method_code:http_errors:rate5m{method="post", code="500"} 6method_code:http_errors:rate5m{method="post", code="404"} 21method:http_requests:rate5m{method="get"}  600method:http_requests:rate5m{method="del"}  34method:http_requests:rate5m{method="post"} 120## promqlmethod_code:http_errors:rate5m{code="500"}/ ignoring(code)method:http_requests:rate5m## result{method="get"}  0.04            //  24 / 600{method="post"} 0.05            //   6 / 120


sum(
  rate(http_request_count{code=~"^(?:5..)$"}[5m])) by (pod)  * on (pod) group_left(label_version) kube_pod_labels


聚合

聚合:

-- 求 clickhouse 机器的平均内存可用率avg(mem_available_percent{app="clickhouse"})-- 对 clickhouse 机器的内存可用率排序,取最小的两条记录bottomk(2, mem_available_percent{app="clickhouse"})


分别统计 clickhouse 和 canal 的机器内存可用率

-- by:分组统计的维度 (相反: without)avg(mem_available_percent{app=~"clickhouse|canal"}) by (app)


对范围时段内求聚合:

target_up[2m]: 获取该指标最近 2 分钟的所有数据点
max_over_time :求时间内所有点的最大值

max_over_time(target_up[2m])


increase

increase 函数 : 求增量,接收 range-vector

  • range-vector 会返回多个 value+timestamp 的组合

net_bytes_recv{interface="eth0"}[1m] @ 1661570908965304237246 @1661570850965307953982 @1661570860965311949925 @1661570870965315732812 @1661570880965319998347 @1661570890965323899880 @1661570900increase(net_bytes_recv{interface="eth0"}[1m]) @166157090923595160.8


计算公式 : 最后个点值 - 第一个点值 / 时间差 * 60

  • (965323899880.0−965304237246.0)÷(1661570900.0−1661570850.0)×60=23595160.8

rate

rate 函数 : 求每秒变化率

  • increase 结果 / range-vector 时间段大小

rate(net_bytes_recv{interface="eth0"}[1m]) == bool increase(net_bytes_recv{interface="eth0"}[1m])/60.0


  • rate 函数 : 求变化率,相对平滑

  • irate 函数 : 拿时间范围内的最后两个值做计算,变化更剧烈

image.png文章来源地址https://www.toymoban.com/news/detail-420044.html

到了这里,关于Prometheus PromQL查询语言指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【.NET Core】Linq查询运算符(二)

    查询运算符是组成Linq模式的方法。这些方法中的大多数都作用于序列;其中序列指其类型实现 IEnumberableT 接口或 IQueryableT 接口的对象。标准查询运算符提供包括筛选、投影、集合、排序等查询功能。 查询运算符包含两组,一组作用于类型 IEnumberableT 的对象,另一组作用于类

    2024年02月05日
    浏览(34)
  • 【云原生】Prometheus 之PromQL

    当 Prometheus 通过 Exporter 采集到相应的监控指标样本数据后,我们就可以通过PromQL 对监控样本数据进行查询,从而对相应的数据样本进行分析以及制定报警规则。 PromQL(Prometheus Query Language)是 Prometheus 内置的数据查询语言。支持用户进行实时的数据查询及聚合操作。 Prometh

    2024年02月16日
    浏览(34)
  • (十一)CSharp-LINQ-标准查询运算符(3)

    1、概念 标准查询运算符由一系列 API 方法组成,API 能让我们查询任何 .NET 数组或集合。 标准运算符的要点: 标准查询运算符使用方法语法。 一些运算符返回 Ienumerable 对象(或其他序列),而其他运算符返回标量。返回标量的运算符立即执行查询,并返回一个值,而不是一

    2024年02月11日
    浏览(34)
  • Python 的运算符和语句(条件、循环、异常)基本使用指南

    算数运算符 赋值运算符 复合赋值运算符 比较运算符 逻辑运算符 算数运算符 运算符 描述 实例 + 加 1 + 1 输出结果为 2 - 减 1 - 1 输出结果为 0 * 乘 2 * 2 输出结果为 4 / 除 10 / 2 输出结果为 5 // 整除 9 // 4 输出结果为 2 % 取余 9 % 4 输出结果为 1 ** 指数 2 ** 4 输出结果为 16, 2 * 2

    2024年02月07日
    浏览(54)
  • C语言中的运算符及算术运算符详解

    在C语言中,运算符是一种特殊的符号,用于表示数据的运算、赋值和比较等。本文将介绍C语言中的运算符,特别关注算术运算符,并提供一些示例来说明它们的用法。 C语言中的运算符可以按照其功能和操作数个数进行分类。以下是一些主要的运算符分类: 1. 按照功能分类

    2024年01月22日
    浏览(67)
  • C语言【运算符】

    1、运算符分类 按照操作个数分类: 一元运算符(一目运算符) :只有一个操作数。如 负号 -1。 二元运算符(二目运算符) :有两个操作数。如 加号 1+2。 三元运算符(三目运算符) :有三个操作数。如 ?: ab?1:2。 按功能分类: 算数运算符 :正(+)、负(-)、加(+)、

    2024年02月05日
    浏览(56)
  • Go 语言运算符

    文章目录 概要 整体架构流程 技术名词解释 技术细节 小结 🌟  欢迎来到 猫头虎的博客   — 探索技术的无限可能! 深入探索各技术领域,发现知识的交汇点。了解更多,请访问: - [ 猫头虎技术矩阵 ](https://bbs.csdn.net/topics/617720781) - [ 新矩阵备用链接 ](https://bbs.csdn.net/topi

    2024年02月05日
    浏览(39)
  • 运算符详解(c语言)

    引言: hello,大家好!我是心跳sy,今天给大家分享c语言运算符详解,我们知道,c语言的一个显著特点就是表达式的应用,表达式是表示如何计算值的公式,而运算符又是构建表达式的基本工具,c语言拥有非常丰富的运算符,包括算术运算符、关系运算符、逻辑运算符、赋

    2024年02月12日
    浏览(37)
  • C语言运算符详解

    【导言】 C语言是一门非常底层的编程语言,它支持多种运算符进行数值运算、逻辑运算等操作。C语言中的运算符主要有算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符等。本篇文章将会详细介绍C语言中的各种运算符及其使用方法。 一、算术运

    2024年02月07日
    浏览(44)
  • C 语言运算符详解

    运算符用于对变量和值进行操作。 在下面的示例中,我们使用 + 运算符将两个值相加: 虽然 + 运算符通常用于将两个值相加,就像上面的示例一样,它还可以用于将变量和值相加,或者将变量和另一个变量相加: C 将运算符分为以下几组: 算术运算符 赋值运算符 比较运算

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包