Prometheus

55479
下载
Prometheus 是一个开源的监控和告警系统,专注于时间序列数据的采集与存储。由 SoundCloud 开发,配备高级查询语言PromQL,便于数据挖掘与分析,并无缝对接多种可视化平台。

查询示例


简单的时间序列选择

返回所有带有http_requests_total元素的时间序列:

http_requests_total

返回所有带有http_requests_total元素和给定jobhandler标签的时间序列:

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

返回从查询时间前5分钟到当前查询时间的整个时间范围内的同一向量,使其成为范围向量选择器

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

请注意,产生范围向量的表达式不能直接绘图,需要在表达式浏览器的表格(“Console”)视图中进行查看。

使用正则表达式,可以选择只匹配特定模式名称的所有工作负载的时间序列,在这种情况下,所有以server结尾的工作负载:

http_requests_total{job=~".*server"}

在 Prometheus 中使用的所有正则表达式都遵循 RE2语法

为了选择除了4xx状态码之外的所有 HTTP 状态码,可以运行以下命令:

http_requests_total{status!~"4.."}## 子查询

返回过去30分钟内http_requests_total指标的5分钟滚动率(rate),解析度设置为1分钟。

rate(http_requests_total[5m])[30m:1m]

这是一个嵌套子查询的示例。deriv函数的子查询使用了默认解析度。请注意,无谓地使用子查询是不明智的。

max_over_time(deriv(rate(distance_covered_total[5s])[30s:5s])[10m:])## 使用函数、运算符等

计算所有名为http_requests_total的时间序列在过去5分钟内的每秒变化率:

rate(http_requests_total[5m])

假设http_requests_total时间序列都带有job(按服务名分组)和instance(按服务实例)标签,我们可能希望对所有实例的每秒率求和,以减少输出的时间序列数量,但同时保持job维度:

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

如果有两个具有相同维度标签的不同指标,我们可以对它们应用二元运算符,并在两边具有相同标签集的元素之间进行匹配和传递。例如,这个表达式返回每个实例的未使用内存(单位:MB):

(instance_memory_limit_bytes - instance_memory_usage_bytes) / 1024 / 1024

同样的表达式,但按应用进行求和,可以这样写:

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

如果同一个虚构集群调度器以每个实例的形式暴露了 CPU 使用量指标,如下所示:

instance_cpu_time_ns{app="lion", proc="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"}
instance_cpu_time_ns{app="fox", proc="widget", rev="4d3a513", env="prod", job="cluster-manager"}
...

我们可以得到按应用(app)和进程类型(proc)分组的前三个 CPU 使用者:

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

假设此指标包含每个运行实例的一个时间序列,可以按应用计数运行实例的数量如下:

count by (app) (instance_cpu_time_ns)

如果我们正在探索某些指标的标签,以便能够对其中的一些进行聚合,可以使用以下方式:

limitk(10, app_foo_metric_bar)

或者,如果我们想要返回的时间序列样本更均匀,可以使用以下方式获取大约 10% 的数据:

limit_ratio(0.1, app_foo_metric_bar)

该文档基于 Prometheus 官方文档翻译而成。


observability.cn Authors 2024 | Documentation Distributed under CC-BY-4.0
Copyright © 2017-2024, Alibaba. All rights reserved. Alibaba has registered trademarks and uses trademarks.
浙ICP备2021005855号-32