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
- 范围向量查询
[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