11

在 Grafana 文档中,我发现我应该能够查询我的 Prometheus 服务器,以获取使用该label_values查询提供监控数据的所有实例。

我在 Grafana 中使用的查询是:

label_values(up, instance)

不幸的是,Prometheus 告诉我它不知道 label_values:

Error executing query: parse error at char 13: unknown function with name "label_values"

我正在使用 Prometheus 2.0.0 和 Grafana 5。

我究竟做错了什么?

4

3 回答 3

23

label_values()只是模板中的一个有效函数。您可以使用它来填充模板下拉列表,例如可用实例或可用指标的列表,但您不能在仪表板中或直接查询 Prometheus 时使用它。

于 2018-03-19T16:28:45.620 回答
5

通过在grafana/public/app/plugins/datasource/prometheus/metric_find_query.ts中查看Grafana 的 Prometheus 模板代码,您可以看到它们不使用 PromQL,而是访问某些端点来获取标签值,因此对于label_values(instance)URL是这样的:

http://localhost:9090/api/v1/label/instance/values

然而,这个返回instance从 TSDB 中的每个指标调用的所有标签。如果标签对于某个特定指标是唯一的,那么您就有了答案。否则,类似它的模板代码label_values(up, instance)会稍微复杂一些,看起来它实际上从以下位置下载了度量的整个系列:

http://localhost:9090/api/v1/series?match[]=up

还添加了时间范围参数startend为清楚起见我省略了,然后通过解析 JSON 输出找到标签值。

我也想在 PromQL 中做同样的事情,但我还没有弄清楚这是否可能。

于 2020-06-16T13:01:46.633 回答
0

labels(pg_up,instances)这是正确的语法

于 2021-06-10T10:46:29.537 回答