CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/Prometheus/查询示例
文档目录
安装Prometheus Agent 模式存储联邦编写 HTTP 服务发现管理 APIPrometheus 3.0 迁移指南API 稳定性保证功能开关
查询基础运算符查询函数查询示例HTTP APIRemote Read API

Prometheus

查询示例

返回指标 httprequeststotal 的所有时间序列: httprequeststotal 返回指标 httprequeststotal 且具有给定 job 和 handler 标签的所有时间序列: httprequeststotal{job="apiserver", handler="/api/comments"} 返回同一向量的一整段时间范围(此例中为查询时间之前的...

简单时间序列选择

返回指标 http_requests_total 的所有时间序列:

http_requests_total

返回指标 http_requests_total 且具有给定 job 和 handler 标签的所有时间序列:

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

返回同一向量的一整段时间范围(此例中为查询时间之前的 5 分钟),使其成为范围向量:

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

注意,产生范围向量的表达式不能直接绘图,但可以在表达式浏览器的表格("Console")视图中查看。

使用正则表达式,你可以仅选择名称匹配特定模式的 job 的时间序列,此例中为所有以 server 结尾的 job:

http_requests_total{job=~".*server"}

要选择除 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])
)

如果我们有两个具有相同维度标签的不同指标,可以对它们应用二元运算符,两侧具有相同标签集的元素将被匹配并传播到输出。例如,此表达式返回每个实例未使用的内存(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)

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

limitk(10, app_foo_metric_bar)

或者,如果我们希望返回的时间序列采样更均匀,可以使用以下方法获取大约 10% 的时间序列:

limit_ratio(0.1, app_foo_metric_bar)

文章大纲