首页 > 解决方案 > 使用二元运算符过滤 prometheus 查询结果

问题描述

我正在构建一个框架来显示存储在 prometheus 中的不同目标的指标。我有一个通用 api,它接受目标(实例)数据并过滤指定目标的数据。我要获取三个指标。

1. 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) -- cpu usage
2. ((node_filesystem_avail_bytes{mountpoint="/",fstype!="rootfs"} * 100) /node_filesystem_size_bytes{mountpoint="/",fstype!="rootfs"}) -- disk usage
3. 100 * avg by (instance) ((node_memory_MemTotal_bytes - node_memory_MemFree_bytes) / node_memory_MemTotal_bytes) -- memory usage

我正在对 prometheus 进行 API 调用并获取上述查询的所有数据。现在我必须过滤掉特定实例的结果。所以我添加了 and ({instance:"xx.xx.xxx.xxx:9100"}) 来过滤掉数据。

我的 API 查询看起来像,

(100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) or ((node_filesystem_avail_bytes{mountpoint="/",fstype!="rootfs"} * 100) /node_filesystem_size_bytes{mountpoint="/",fstype!="rootfs"}) or 100 * avg by (instance) ((node_memory_MemTotal_bytes - node_memory_MemFree_bytes) / node_memory_MemTotal_bytes)) and ({instance:"xx.xx.xxx.xxx:9100"})

但这不适用于使用聚合并且没有获取数据的查询。有什么办法,我可以根据不同查询的特定标签过滤出查询结果。

标签: prometheuspromql

解决方案


推荐阅读