Я хочу создать панель инструментов Grafana, показывающую свободную память, сгруппированную по размерам блоков друзей Linux.Node_exporter собирает информацию о buddy из ядра:
node_buddyinfo_blocks{node="0",size="0",zone="Normal"} 2474
node_buddyinfo_blocks{node="0",size="1",zone="Normal"} 2934
node_buddyinfo_blocks{node="0",size="2",zone="Normal"} 2743
node_buddyinfo_blocks{node="0",size="3",zone="Normal"} 1191
node_buddyinfo_blocks{node="0",size="4",zone="Normal"} 811
node_buddyinfo_blocks{node="0",size="5",zone="Normal"} 289
node_buddyinfo_blocks{node="0",size="6",zone="Normal"} 127
node_buddyinfo_blocks{node="0",size="7",zone="Normal"} 67
node_buddyinfo_blocks{node="0",size="8",zone="Normal"} 28
node_buddyinfo_blocks{node="0",size="9",zone="Normal"} 39
node_buddyinfo_blocks{node="0",size="10",zone="Normal"} 43474
Вместо того, чтобы отображать количество свободных блоков, количество блоков должно быть преобразовано в размер в байтах путем умножения количества блоков (значения метрики)с размером блока (полученным из метки размера):
blocks * 2 ^ size * PAGESIZE
Для этого расчета мне нравится использовать значение метки size
и писать что-то вроде:
sum by (size) (node_buddyinfo_blocks) * (2 ^ size)
Есть ли способ реализовать этот запрос в Prometheus?
В качестве обходного пути десять запросов могут быть жестко запрограммированы для каждого размера собеседника.