Prometheus查询示例

半兽人 发表于: 2019-07-23   最后更新时间: 2020-10-22 14:44:39  
{{totalSubscript}} 订阅, 3,219 游览

简单的时间序列选择

返回度量指标名称是http_requests_total的所有时间序列样本数据:

http_requests_total

返回度量指标名称是http_requests_total, 标签分别是job="apiserver, handler="/api/comments的所有时间序列样本数据:

http_requests_total{job="apiserver", hanlder="/api/comments"}

返回度量指标名称是http_requests_total, 标签分别是job="apiserver, handler="/api/comments,且是5分钟内的所有时间序列样本数据:

http_requests_total{job="apiserver", handler="/api/comments"}[5m]

注意:一个范围向量表达式结果不能直接在Graph图表中,但是可以在"console"视图中展示。

使用正则表达式,你可以通过特定模式匹配标签为job的特定任务名,获取这些任务的时间序列。在下面这个例子中, 所有任务名称以server结尾。

http_requests_total{job=~"server$"}

返回度量指标名称是http_requests_total, 且http返回码不以4开头的所有时间序列数据:

http_requests_total{status!~"^4..$"}

使用函数,操作符等

返回度量指标名称http_requests_total,且过去5分钟的所有时间序列数据值速率。

rate(http_requests_total[5m])

假设度量名称是http_requests_total,且过去5分钟的所有时间序列数据的速率和,速率的维度是job

sum(rate(http_requests_total)[5m]) by (job)

如果我们有相同维度标签,我们可以使用二元操作符计算样本数据,返回值:key: value=标签列表:计算样本值。例如,下面这个表达式返回每一个实例剩余内存,单位是M, 如果不同,则需要使用ignoring(label_lists),如果多对一,则采用group_left, 如果是一对多,则采用group_right。

(instance_memory_limit_byte - instant_memory_usage_bytes) / 1024 / 1024

相同表达式,求和可以采用下面表达式:

sum( instance_memory_limit_bytes - instance_memory_usage_bytes) by (app, proc) / 1024 / 1024

如果相同集群调度器任务,显示CPU使用率度量指标的话,如下所示:

instance_cpu_time_ns{app="lion", pro="web", rev="34d0f99", env="prod", job="cluster-manager"}
instance_cpu_time_ns{app="elephant", proc="worker", rev="34d0f99", env="prod", job="cluster-manager"}
instance_cpu_time_ns{app="turtle", proc="api", rev="4d3a513", env="prod", job="cluster-manager"}
...

我们可以获取最高的3个CPU使用率,按照标签列表appproc分组

topk(3, sum(rate(instance_cpu_time_ns[5m])) by(app, proc))

假设一个服务实例只有一个时间序列数据,那么我们通过下面表达式,可以统计出每个应用的实例数量:

count(instance_cpu_time_ns) by (app)
更新于 2020-10-22

查看Prometheus更多相关的文章或提一个关于Prometheus的问题,也可以与我们一起分享文章