🤖
BOKE
  • 😇一个博客
  • Group 1
    • 🚗ALL
      • 😁一文搞懂Yum命令:红帽系的包管理器
      • 😆到底什么是云计算
      • 😅反弹Shell大全与原理
      • 😂SHELL基础
      • 🤣iptables
      • ☺️阿里云YUM源
      • 😉CentOS系统版本升级
      • 🥲bat笔记
      • 😍ELK
      • 🥰黑马k8s
      • 😋supervisor
      • 🤨Bash 中的 ${} 和 $() 有什么区别
      • 🧐ansible+playbook
      • 👍给ELK的kibana设置密码
      • 😁prometheus
      • 😃Linux或Windows上实现端口映射
      • 😄shell脚本大全
      • 🤪linux修改网卡名
      • 😆Openvpn问题导致我掉了三根头发
      • 😅Iptables实现阿里云NAT网关效果
    • 🚕docker
      • 😇docker搭建MySQL主从
      • 😊docker命令
      • 🙂docker文件分层与数据挂载
      • 🙃dockerfile
      • 😘B站狂神-docker
    • 🚙DevOps
      • 😌DevOps(Git+Jenkins)
      • 😛python配置git
由 GitBook 提供支持
在本页
  • Prometheus 常用 PromQL 语句
  • 1、选择序列
  • 1、Counter 的增长速率
  • 多个序列聚合
  • 集合操作
  • 过滤
  • 直方图分位数
  • Gauges 的变化
  • 时间
  • 缺失数据处理
  • 标签操作
  • 关于 PromQL 更多的使用方法,可以参考 PromQL 官方文档:

这有帮助吗?

  1. Group 1
  2. ALL

prometheus

Promsql基础查询语句

Prometheus 常用 PromQL 语句

1、选择序列

选择指定指标名称的序列最新样本:

my_metric_name

选择指定指标名称序列五分钟的样本范围:

my_metric_name[5m]

筛选给定标签的序列

my_metric_name{label1="value1", label2="value2"}

更复杂的标签匹配器

my_metric_name{label1!="value1", label2=~"regex1", label3!~"regex2"}

匹配器:

  • = :等于

  • != :不等于

  • =~ :正则匹配

  • !~ :不正则匹配

1、Counter 的增长速率

过去5分钟每秒平均增长速率

rate(http_requests_total[5m])

1分钟时间窗口中最后两个样本计算的每秒增长速率

irate(http_requests_total[1m])

过去1小时增加的绝对数值:

increase(http_requests_total[1h])

多个序列聚合

所有序列进行求和:

sum(my_metric_name)

根据方法和路径标签维度进行求和:

sum by(method, path) (my_metric_name)

without 用于从计算结果中移除列举的标签,而保留其它标签,by 则正好相反,结果向量中只保留列出的标签,其余标签则移除:

sum without(method, path) (my_metric_name)

其他常用的聚合运算符:sum(), min(), max(), avg(), stddev(), stdvar(), count(), count_values(),bottomk(), topk(), quantile()。

序列间的数学计算

将两个相同标签的序列相加:

left_metric + right_metric

只将匹配 instance 和 job 标签的序列相加:

left_metric + on(instance, job) right_metric

忽略匹配 instance 和 job 标签的序列相加:

left_metric + ignoring(instance, job) right_metric

多对一匹配模式:

left_metric + on(instance, job) group_left right_metric

在结果中包括一侧(右侧)的 version 标签:

left_metric + on(instance, job) group_left(version) right_metric

集合操作

包括任何左侧或右侧的标签集合:

left_metric or right_metric

包括任何同时存在于左侧或右侧的标签集:

left_metric and right_metric

包含任何左侧的标签集合,但不包括右侧的:

left_metric unless right_metric

只在某些标签上匹配:

left_metric and on(job, instance) right_metric

过滤

只保留大于1024样本值的序列:

left_metric > 1024

只保留左边样本值大于右边样本值的序列:

left_metric > right_metric

不过滤序列,而是比较序列,然后返回0或1:

left_metric > bool right_metric

在某些匹配的标签上操作:

left_metric > on(job, instance) right_metric

其他常用的比较运算符:==、!=、>、<、>=、≤。

直方图分位数

过去5分钟内,每个标签维度请求延迟的90%分位数:

histogram_quantile(0.9, rate(my_request_durations_seconds_bucket[5m]))

只针对 method 和 path 维度的90%分位数:

histogram_quantile(
  0.9,
  sum by(le, path, method) (
    rate(my_request_durations_seconds_bucket[5m])
  )
)

Gauges 的变化

过去一小时内的绝对值变化:

delta(my_gauge[1h])

基于过去4小时的数据来预测1小时后的数据:

predict_linear(my_gauge[4h], 3600)

时间

获取 Unix 时间,以秒为单位:

time()

获取最后一次成功运行的批处理作业的年龄:

time() - my_batch_job_last_success_timestamp_seconds

查找一小时内没有成功的批处理作业:

time() - my_batch_job_last_success_timestamp_seconds > 3600

缺失数据处理

当输入向量为空时,创建一个一个输出序列:

absent(my_metric_name)

当输入的范围向量5分钟内都是空的时候,创建一个空的输出序列:

absent_over_time(my_metric_name[5m])

标签操作

用 - 分隔符连接两个标签的值:

label_join(my_metric_name, "-", "label1", "label2")

提取标签的一部分并将其存储在新标签中:

label_replace(my_metric, "dest-label", "$1", "source-label", "(.*):.*")

关于 PromQL 更多的使用方法,可以参考 PromQL 官方文档:

  • 基础:https://prometheus.io/docs/prometheus/latest/querying/basics/

  • 操作符:https://prometheus.io/docs/prometheus/latest/querying/operators/

  • 函数:https://prometheus.io/docs/prometheus/latest/querying/functions/

  • 示例:https://prometheus.io/docs/prometheus/latest/querying/examples/

上一页给ELK的kibana设置密码下一页Linux或Windows上实现端口映射

最后更新于1年前

这有帮助吗?

🚗
😁