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 的count(up{instance=~".*web.*"} == 1)计算总数
- 指标名:
- 范围向量选择器:
[durations(s/m/h/d/w/y)]up[1h]1h 内的数据up[1h:3m]1h 内的数据,每 3 分钟一个点
- 偏移量
offsetprometheus_http_requests_total offset 1h1 小时之前的数据prometheus_http_requests_total[5m] offset 1h1 小时之前的 5m 数据范围
运算
四则运算:
up + 5up - 5up * 5up / 5up % 5up ^ 3- 指标运算:前提标签需要一致
node_memory_Buffers_bytes + node_memory_Active_bytesnode_memory_Buffers_bytes + on(instance) node_memory_Active_bytes
关系运算(=,!=,=~,!~,>,<,>=,<=):
prometheus_http_requests_total > 100大于 100 的值,仅显示满足条件的prometheus_http_requests_total >= 100prometheus_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系统已经运行的时间 srate(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系统已经运行的时间 hnode_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_load1node_load5node_load15avg(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