PromQL 介绍

发布时间: 更新时间: 总字数:943 阅读时间:2m 作者: IP属地: 分享 复制网址

Prometheus提供PromQL(Prometheus Queue language)用于时序数据的查询和统计

介绍

PromQl 支持处理两种向量(vector,序列称为向量):

  • 即时/瞬时向量(instant vector):最近一次时间戳上的指标数据
  • 范围向量(range vector),matrix:指定时间范围内的所有的时间戳上的指标数据,如 up[10m]
  • 标量(scalar):一个浮点型的数据值
  • 字符串(string)

通过 F12 查看API返回值区分

基本使用

  • 瞬时向量查询
    • 指标名:metric name/key
    • 标签:{labels name:key,...}
    • 正则获取
      • prometheus_http_requests_total{code!="200"}
      • prometheus_http_requests_total{code=~"40.*"} 正则获取 40x 的
      • prometheus_http_requests_total{code!~"40.*"} 正则获取非 40x 的
  • 范围向量选择器:[durations(s/m/h/d/w/y)]
    • up[1h] 1h 内的数据
    • up[1h:3m] 1h 内的数据,每3分钟一个点
  • 偏移量 offset
    • prometheus_http_requests_total offset 1h 1小时之前的数据
    • prometheus_http_requests_total[5m] offset 1h 1小时之前的5m数据范围

运算

四则运算:

  • up + 5
  • up - 5
  • up * 5
  • up / 5
  • up % 5
  • up ^ 3
  • 指标运算:前提标签需要一致
    • node_memory_Buffers_bytes + node_memory_Active_bytes
    • node_memory_Buffers_bytes + on(instance) node_memory_Active_bytes

关系运算(=,!=,=~,!~,>,<,>=,<=):

  • prometheus_http_requests_total > 100 大于100的值,仅显示满足条件的
  • prometheus_http_requests_total >= 100
  • prometheus_http_requests_total > bool 100 是否大于 100,1: true; 0: false

逻辑运算:必须是瞬时向量

  • node_memory_Buffers_bytes and node_memory_Active_bytes,and tag 取相同的,值为左侧标签的
  • or 标签去重后的 tag
  • unless

集合运行:

  • avg 求平均值
  • count 数量统计
  • sum 求和
  • min 最小值
  • max 最大值
  • topk(n, <metric-name>) 最大的前 k 个值,如:topk(5, prometheus_http_requests_total)
  • bottomk(n, <metric-name>) 最小的前 k 个值
  • quantile 分位数

函数:

  • abs()
  • time() - node_boot_time_seconds 系统已经运行的时间s
  • rate(node_cpu_seconds_total{mode="idle"}[5m]) 获取2h内该指标个时间序列的增长速度
  • irate(node_cpu_seconds_total{mode="idle"}[5m]) 瞬时速度,适合短时间范围内的变化速率分析
  • changes(up[1h]) 1h内变化次数
  • delta 计算范围向量中,每个时间序列值与之后一个值的差

其他

  • without 从结构序列中删除 without 指定的标签
  • by 通过 by 指定的标签聚合

示例

  • up 查看运行的 Element (即被采集的节点)
  • up == 0 挂掉的节点
  • up{instance="100.80.0.128:9100",job="node"}[10m] 最近10的值,可以在 Console 中看到
  • (time() - node_boot_time_seconds)/60/60 系统已经运行的时间h
  • node_cpu_seconds_total{mode="system"}
  • node_cpu_seconds_total{mode="system", instance="100.80.0.128:9100"}
  • count(node_cpu_seconds_total{mode="system", instance="100.80.0.128:9100"})
  • count(node_cpu_seconds_total{mode="system"}) by (instance) 查每个主机的CPU数量
  • avg by(instance, job) (1 - irate(node_cpu_seconds_total{mode="idle"}[5m]))
  • node_load1
  • node_load5
  • node_load15
  • avg(irate(node_cpu_seconds_total{mode="idle"}[10m])) by(instance) 最近10分钟的平均空闲率
  • 1 - avg(irate(node_cpu_seconds_total{mode="idle"}[10m])) by(instance) * 100 最近10分钟的平均使用率
  • ALERTS 告警信息
  • ALERTS_FOR_STATE 告警信息

API

查询

  • 瞬时向量查询 [GET|POST] /api/v1/query
    • query=&time=&timeout
  • 范围向量查询 [GET|POST] /api/v1/query_range
    • query=&start=&end=&step=&timeout
  • 指标 [GET|POST] /api/v1/series
  • 标签 [GET|POST] /api/v1/labels
  • [GET|POST] /api/v1/targets
  • [GET|POST] /api/v1/targets/metadata
  • [GET|POST] /api/v1/rules
  • [GET|POST] /api/v1/alerts

声明周期管理,需要在命令行添加 --web.enable-lifecycle 参数

  • 健康状态 GET /-/healthy
  • 就绪状态 GET /-/ready
  • 重新加载配置 [PUT|POST] /-/reload
  • 退出 [PUT|POST] /-/quit

管理员管理,要在命令行添加 --web.enable-admin-api 参数

  • 快照 [PUT|POST] /api/v1/admin/tsdb/snapshot
  • 删除 [PUT|POST] /api/v1/admin/tsdb/delete_series 压缩时清理
  • 清理磁盘数据 [PUT|POST] /api/v1/admin/tsdb/clean_tombstones
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数