数据查询
数据查询
查询时间序列
当
http_requests_total
http_requests_total{}
http_requests_total{code="200",handler="alerts",instance="localhost:9090",job="prometheus",method="get"}=(20889@1518096812.326)
http_requests_total{code="200",handler="graph",instance="localhost:9090",job="prometheus",method="get"}=(21287@1518096812.326)
匹配模式
- 通过使用
label=value 可以选择那些标签满足表达式定义的时间序列; - 反之使用
label!=value 则可以根据标签匹配排除时间序列;
例如,如果我们只需要查询所有
http_requests_total{instance="localhost:9090"}
# 排除掉这些时间序列
http_requests_total{instance!="localhost:9090"}
除了使用完全匹配的方式对时间序列进行过滤以外,|
进行分离:使用
http_requests_total{environment=~"staging|testing|development",method!="GET"}
范围查询
直接通过类似于
时间持续的值以数字表示,其后跟以下时间单位:
s - 秒m - 分钟h - 小时d - 天w - 周y - 年
在此示例中,我们选择在过去
prometheus_http_requests_total{job="prometheus"}[1m]

偏移修改器
偏移修改器允许更改查询中各个瞬时和范围向量的时间偏移。例如,以下表达式返回相对于当前查询时间
http_requests_total offset 5m
# 偏移修改器始终需要跟随在选择器之后
sum(http_requests_total{method="GET"} offset 5m) // GOOD.
sum(http_requests_total{method="GET"}) offset 5m // INVALID.
# 也适用于范围向量
rate(http_requests_total[5m] offset 1w)
聚合操作
一般来说,如果描述样本特征的标签
# 查询系统所有http请求的总量
sum(http_request_total)
# 按照mode计算主机 CPU 的平均使用时间
avg(node_cpu_seconds_total) by (mode)
# 按照主机查询各个主机的 CPU 使用率
sum(sum(irate(node_cpu_seconds_total{mode!='idle'}[5m])) / sum(irate(node_cpu_seconds_total[5m]))) by (instance)
标量和字符串
除了使用瞬时向量表达式和区间向量表达式以外,
标量
标量只有一个数字,没有时序。例如:
10
需要注意的是,当使用表达式
字符串
直接使用字符串,作为
"this is a string"
'these are unescaped: \n \\ \t'
`these are not unescaped: \n ' " \t`
子查询
子查询允许您在给定范围和分辨率内运行瞬时查询。子查询的结果是范围向量。
语法<instant_query> '[' <range> ':' [<resolution>] ']' [ offset <duration> ]
,<resolution>
可缺省。
查询优化
陈旧性
运行查询时,选择采样数据(独立于实际当前时间序列)的时间戳。这主要是为了支持聚合(总和,平均等)这样的情况,其中多个聚合时间序列在时间上不完全对齐。由于它们的独立性,
如果目标抓取或规则评估不再返回先前存在的时间序列的样本,则该时间序列将被标记为陈旧。如果目标被移除,之前很快就会将其先前返回的时间序列标记为陈旧。如果在时间序列标记为过时后在采样时间戳处计算查询,则不会为该时间系列返回任何值。如果随后在该时间序列中摄取新样本,它们将照常返回。
如果在采样时间戳前
避免慢查询和重载
如果查询需要对大量数据进行操作,则绘制图表可能会超时或使服务器或浏览器过载。因此,在构建对未知数据的查询时,始终在
这与