PromQL 如何查询返回标签的值?

PromQL 查询返回的是指标值而非标签值;想拿到某个标签的取值,可以用按该标签分组的聚合(sum by)、Grafana 的 label_values 变量,或 group_left 把标签"搬运"到结果里。本文给出三种做法。

最佳实践
PromQL 如何查询返回标签的值?封面

PromQL 向量样本是浮点数或原生直方图,标签是字符串维度;语言也有字符串字面量,但不能把任意标签直接投影为字符串列表,标签只是维度——想让标签值出现在结果里,正确姿势是按它分组(by)或在 Grafana 里用 label_values() 取标签值列表。

场景一:按标签过滤指标

http_requests_total{method="GET", status="200"}

这是最基础的用法:花括号里写标签匹配条件,返回满足条件的序列及其数值。支持 =、!=、=~(正则)、!~。

场景二:让标签值成为结果的一部分

sum(http_requests_total) by (method)

这里相加的是累计 Counter 当前值,不是某时段请求数。结果中每个 method 取值一行——表格视图下你就得到了所有 method 值及对应数值。

场景三:Grafana 变量取标签值列表

做仪表盘下拉框时用模板函数:

label_values(http_requests_total, method)

这是 Grafana 的变量语法,不是 PromQL 函数。返回范围取决于数据源查询与时间设置;元数据 API 可能含当前已无活跃样本的标签值,供用户选择后过滤面板。

场景四:把 A 指标的标签搬到 B 指标上

up * on(job, instance) group_left(version) app_version_info

右侧 app_version_info 在每个匹配键上必须唯一,示例假设其值为 1;group_left 把右侧 info 的 version 标签合并进左侧 up 结果——这是"查询返回标签值"最贴近的 PromQL 实现。

常见问题(FAQ)

Q:能直接查询"返回 method 这个标签的值"吗? PromQL 没有这种语义——它查询的是数值序列;要枚举标签值请用 API /api/v1/label/method/values 或 Grafana 的 label_values。

Q:group_left 和 group_right 区别? 取决于哪一侧是多对一的"多"方;group_left 表示左侧是“多”方,并从右侧唯一匹配序列复制指定标签;group_right 相反,不按标签数量判断。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台