У меня есть метрики, отправленные в prometheus в виде:
interface_stats{type = "rx_dropped", device = "eth0", host = "host0.my.net"} 5
interface_stats{type = "rx_packets", device = "eth0", host = "host0.my.net"} 1000
interface_stats{type = "rx_dropped", device = "eth0", host = "host1.my.net"} 3
interface_stats{type = "rx_packets", device = "eth0", host = "host1.my.net"} 2000
interface_stats{type = "rx_dropped", device = "eth0", host = "host2.my.net"} 9
interface_stats{type = "rx_packets", device = "eth0", host = "host2.my.net"} 1000
.
.
.
interface_stats{type = "rx_dropped", device = "eth0", host = "host325.my.net"} 12
interface_stats{type = "rx_packets", device = "eth0", host = "host235.my.net"} 1000
Я хотел бы рассчитать и отобразить минимальную, максимальную и среднюю потерю пакетов для eth0 с течением времени для всех моих хостов. Все значения являются счетчиками.
Это возможно?
Следующий запрос PromQL возвращает потерю пакетов за последние 5 минут (см. 5m
в квадратных скобках) для каждого (device, host)
, если interface_stats
является прилавок:
rate(interface_stats{type = "rx_dropped"}[5m])
/ ignoring(type)
rate(interface_stats{type = "rx_packets"}[5m])
Вы можете увеличить 5m
до 1h
или до любого другого поддерживаемая продолжительность времени, чтобы получить потерю пакетов за заданный период времени.
Если вам нужно получить потерю пакетов для определенного device
и/или host
, то просто добавьте соответствующий фильтр в фигурные скобки. Например, следующий запрос возвращает потерю пакетов только для device = "eth0"
на каждый host
:
rate(interface_stats{type = "rx_dropped",device = "eth0"}[5m])
/ ignoring(type)
rate(interface_stats{type = "rx_packets",device = "eth0"}[5m])
Если вам нужно получить среднюю, максимальную или минимальную потерю пакетов на хостах, просто оберните приведенный выше запрос в avg()
, max()
или min()
агрегатные функции. Например, следующий запрос возвращает среднюю потерю пакетов на всех хостах для device = "eth0"
за последние 5 минут:
avg(
rate(interface_stats{type = "rx_dropped",device = "eth0"}[5m])
/ ignoring(type)
rate(interface_stats{type = "rx_packets",device = "eth0"}[5m])
)