计算最小、最大和平均丢包率

Calculate min, max and average packet loss

我已将以下形式的指标发送给普罗米修斯:

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 随时间变化的最小、最大和平均丢包率。所有值都是计数器。

这可能吗?

如果 interface_stats 是 [=26],则以下 PromQL 查询 returns 每个 (device, host) 在过去 5 分钟内丢失数据包(参见方括号中的 5m) =]:

rate(interface_stats{type="rx_dropped"}[5m])
  / ignoring(type)
rate(interface_stats{type="rx_packets"}[5m])

您可以将 5m 增加到 1h 或任何其他 supported time duration 以获得给定持续时间内的数据包丢失。

如果你需要获取特定device and/or host的丢包,那么只需将相应的过滤器添加到花括号中即可。例如,以下查询 returns 每个 hostdevice="eth0" 的数据包丢失:

rate(interface_stats{type="rx_dropped",device="eth0"}[5m])
  / ignoring(type)
rate(interface_stats{type="rx_packets",device="eth0"}[5m])

如果您需要获取主机间的平均、最大或最小丢包率,只需将上面的查询包装成 avg()max()min() aggregate functions .例如,以下查询 returns 过去 5 分钟内 device="eth0" 所有主机的平均丢包率:

avg(
  rate(interface_stats{type="rx_dropped",device="eth0"}[5m])
    / ignoring(type)
  rate(interface_stats{type="rx_packets",device="eth0"}[5m])
)