使用 metric 值查询 prometheus 标签值

Posted

技术标签:

【中文标题】使用 metric 值查询 prometheus 标签值【英文标题】:Querying prometheus label values with metric values 【发布时间】:2020-05-14 19:56:44 【问题描述】:

有没有办法将标签值作为普罗米修斯查询的值。 例如,我需要过滤掉 CPU 使用率超过 80% 的实例。我需要 ip 地址列表作为输出。值列是否可能或将只是指标值。

预期输出:

Value
10.21.123.21
72.34.128.31

【问题讨论】:

【参考方案1】:

使用 HTTP API

您可以运行以下命令获取 CPU 使用率超过 80% 的实例:

curl --silent --globoff --request GET "http://PROMETHEUS-SERVER/api/v1/query?query=100-100*avg%20by%20(instance)(irate(node_cpu_seconds_totalmode=\"idle\"[5m]))>80" | jq --raw-output '.data.result[].metric.instance'

使用 Grafana

如果您使用的是 Grafana,您可以在“仪表板设置”>“变量”>“新建”中添加变量

查询选项:

Data source: Prometheus

Query: query_result(100 - 100 * avg by (instance) (irate(node_cpu_seconds_totalmode="idle"[5m])) > 80)

Regex: /.*\"(.*)\".*/

【讨论】:

我没有使用 grafana 进行可视化。我需要使用 prometheus 公开的 Http API 来完成它。如果我使用 /label/instance/values,我将获得标签值。但是如何获取查询结果中存在的值。 我添加了 HTTP API 信息。

以上是关于使用 metric 值查询 prometheus 标签值的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus Metric Type详解

如何查询 Prometheus 中所有具有特定标签值的时间序列?

Prometheus学习系列之Prometheus 数据模型和metric类型

Prometheus 删除指定 Metric

Prometheus 查询一个时间间隔下的总体平均值

在单个 promql 查询中需要两个 Prometheus 指标值