查询示例

简单的时间序列选择器

返回数据指标名称为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]

请注意,无法直接绘制范围向量的表达式结果,而是在表达式浏览器的表格视图("控制台")中查看。

使用正则表达式,您可以只选择job标签值与特定模式匹配的时间序列,在本例子中,所有job标签以server结尾的向量:

http_requests_total{job=~".*server"}

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

想要选择除了 4xx 以外的所有 HTTP 状态码,你可以执行:

http_requests_total{status!~"4.."}

子查询

返回过去 30 分钟的 http_requests_total 指标的 5 分钟内的平均速率,分辨率为 1 分钟.

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

这是一个嵌套子查询的示例。deriv函数的子查询使用默认分辨率。请注意,不必要地使用子查询是不明智的。

max_over_time(deriv(rate(distance_covered_total[5s])[30s:5s])[10m:])

使用函数、操作符等

返回最近 5 分钟内指标名称为http_requests_total的所有时间序列的每秒速率:

rate(http_requests_total[5m])

假设http_requests_total时间序列都有job(按作业名称进行划分)和instance(按作业的实例进行划分),我们可能希望得到的输出时间序列较少,所以对所有实例的速率进行求和,但仍然保留job维度:

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

如果我们有具有两个相同维度标签的不同数据指标,则可以对它们进行二元运算,并且具有相同标签集的两侧的元素都将匹配并传播到输出。例如:此实例表达式为每个实例以 MiB 返回未使用的内存(在虚构的集群上暴露了有关其运行实例的这些指标):

(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)分组,排名前 3 位的 CPU 用户是这样的:

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

假设此指标每个运行实例包含一个时间序列,则可以像这样计算每个应用程序的运行实例数:

count by (app) (instance_cpu_time_ns)

最后更新于