PromQL(Prometheus Query Language)是Prometheus监控系统的查询语言,专门用于处理时间序列数据。它允许用户从Prometheus中提取、操作和显示数据,通常用于生成实时监控图表或告警规则。
1. 基本数据类型
PromQL的查询结果有四种数据类型:
- 瞬时向量(Instant Vector):某一时刻的一组时间序列数据。
- 范围向量(Range Vector):一段时间内的一组时间序列数据。
- 标量(Scalar):单一的浮点数值。
- 字符串(String):用于呈现文本数据。
2. 基本查询
PromQL查询的基础是时间序列选择器,其形式如下:
http_requests_total
这条查询返回了所有名为http_requests_total
的时间序列。可以通过加标签来缩小范围:
http_requests_total{method="GET", status="200"}
这会返回仅包含标签method="GET"
和status="200"
的时间序列。
3. 操作符
PromQL支持多种操作符,主要分为两类:
- 算术操作符:如
+
,-
,*
,/
,%
,用于对时间序列执行算术运算。 - 比较操作符:如
==
,!=
,>
,<
,用于比较时间序列中的数值。
举个例子,计算每秒的HTTP请求数:
rate(http_requests_total[5m])
rate
函数计算过去5分钟的HTTP请求速率。
4. 函数
PromQL中有很多函数可以对时间序列进行复杂操作,如:
rate()
: 计算某个时间范围内的每秒增长率。avg()
,sum()
,min()
,max()
: 用于聚合时间序列数据。increase()
: 计算时间序列在某一段时间内的增加量。
例如,计算每分钟的平均CPU使用率:
avg(rate(cpu_usage_total[1m]))
5. 告警规则
PromQL也常用于定义告警规则,例如:
avg_over_time(cpu_usage_total[5m]) > 0.8
这条规则会在过去5分钟的CPU使用率超过80%时触发告警。
6. 聚合操作
PromQL允许用户通过聚合操作对数据进行汇总,比如:
sum
: 对时间序列求和。avg
: 计算时间序列的平均值。
例如,汇总所有实例的内存使用情况:
sum(memory_usage_bytes)
示例:
假设你想要查看每个实例的CPU使用率,并找出使用率超过80%的实例:
cpu_usage_total{job="app"} > 0.8
这个查询会返回所有CPU使用率超过80%的实例的时间序列数据。