Я строю структуру, чтобы показать метрики различных целей, которые хранятся в Prometheus. У меня есть generi c 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
Я делаю вызов API для Prometheus и получаю все данные для вышеуказанных запросов. Теперь я должен отфильтровать результат для конкретного c экземпляра. Поэтому я добавил и ({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"})
Но это не работает для запросов, в которых используются агрегаты, и для них нет данных. Есть ли способ, где я могу отфильтровать результаты запроса на основе указанных c меток для разных запросов.