Prometheus常用查询PromQL表达式
Prometheus 是一款强大的开源监控工具,通过自带的 PromQL 查询语言,可以实现丰富的数据查询和分析。本文将介绍一些常用的 Prometheus 查询表达式,帮助大家在日常的运维监控中更好地使用 Prometheus。
1. 基础查询
1.1 查询指标值
Prometheus 中存储的每一个指标都可以通过其名称直接查询,例如:
up
指标表示目标服务的运行状态。值为 1
表示服务正常,0
表示服务不可用。
1.2 查询指定标签的指标
使用 {}
可以过滤指定的标签。例如,查询所有 job
为 api-server
的 http_requests_total
指标:
http_requests_total{job="api-server"}
可以结合多个标签使用,如:
http_requests_total{job="api-server", status="500"}
2. 聚合查询
Prometheus 提供了多种聚合函数,用于对数据进行求和、求平均值、最大值等操作。
2.1 sum
计算某个指标的总和。例如,计算所有实例的 http_requests_total
请求总数:
sum(http_requests_total)
计算 job
为 api-server
的请求总数:
sum(http_requests_total{job="api-server"})
2.2 avg
计算平均值,例如:
avg(http_requests_total{job="api-server"})
2.3 max
和 min
分别计算最大值和最小值。例如:
max(http_requests_total{job="api-server"})
min(http_requests_total{job="api-server"})
2.4 count
统计样本数量,例如:
count(http_requests_total{job="api-server"})
2.5 按标签分组聚合
计算每个 job
的请求总数:
sum by (job)(http_requests_total)
3. 时间序列查询
3.1 查询指定时间范围的平均值
Prometheus 支持通过 [时间区间]
来查询时间窗口内的指标。例如,查询过去 5 分钟内的平均 CPU 使用率:
avg(rate(node_cpu_seconds_total[5m]))
3.2 rate
和 irate
rate
函数用于计算每秒的平均增长速率,适用于较长时间窗口:
rate(http_requests_total[5m])
irate
用于计算瞬时增长速率,适用于监控短期的变化趋势:
irate(http_requests_total[1m])
4. 计算操作符
Prometheus 支持基本的算术操作符(+
、-
、*
、/
)和布尔操作符(==
、!=
、>
、<
)。
4.1 指标计算
计算两个指标的比值,例如计算错误请求占比:
http_requests_total{status="500"} / http_requests_total
4.2 条件过滤
过滤 CPU 使用率超过 80% 的实例:
node_cpu_seconds_total{mode="idle"} < 0.2
5. 常用监控表达式
以下是一些常用的 Prometheus 查询表达式,用于监控系统健康状况。
5.1 CPU 使用率
计算 CPU 使用率:
100 * (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance))
5.2 内存使用率
查询内存使用率:
100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))
5.3 磁盘使用率
查询根目录的磁盘使用率:
100 * (1 - node_filesystem_free_bytes{mountpoint="/"} /
node_filesystem_size_bytes{mountpoint="/"})
5.4 QPS 查询
计算某服务的 QPS(Queries Per Second):
rate(http_requests_total{job="api-server"}[5m])
5.5 错误率
计算 HTTP 错误率(例如 5xx 错误):
sum(rate(http_requests_total{status=~"5.."}[5m])) /
sum(rate(http_requests_total[5m]))
6. 告警表达式示例
Prometheus 常与 Alertmanager 配合使用,通过规则文件定义告警表达式。例如,当 CPU 使用率超过 90% 持续 5 分钟时触发告警:
- alert: HighCPULoad
expr: avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) < 0.1
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage detected"
description: "Instance {{ $labels.instance }} has high CPU load"
7. 结论
Prometheus 提供了强大的查询功能,帮助我们实时监控系统状态并进行数据分析。本文介绍了 PromQL 的常用查询表达式,希望能为大家在日常的监控和运维工作中提供一些帮助。掌握 PromQL 的用法,可以更高效地利用 Prometheus 进行故障排查和性能分析。