减去利率和利率之和
Subtract rate and a sum of rates
具有网络传输指标,例如node_network_transmit_bytes_total
来自 nodeexporter
我想得到一个接口的传输速率(在我的例子中是 enp3s0
)和所有桥接接口传输速率的总和之间的差异。
我有这样的东西:
irate(node_network_transmit_bytes_total{device="enp3s0"}[1m]) - irate(node_network_transmit_bytes_total{device=~"br.*"}[1m])
但这没有给我任何数据点。
编辑
我已经尝试了 的建议,但我的情况有点不同,因为在右侧我有不止 1 个系列。
所以这个:
node_network_transmit_bytes_total{device="enp3s0"} - ignoring(device) node_network_transmit_bytes_total{device=~"br.*"}
产量:
Error executing query: found duplicate series for the match group {instance="192.168.X.Z:9100", job="nodeexporter"} on the right hand-side of the operation: [{name="node_network_transmit_bytes_total", device="br-XXXX", instance="192.168.X.Z:9100", job="nodeexporter"}, {name="node_network_transmit_bytes_total", device="br-5d6dce95c2b0", instance="192.168.X.Z:9100", job="nodeexporter"}];many-to-many matching not allowed: matching labels must be unique on one side
我试过使用 sum()
:
node_network_transmit_bytes_total{device="enp3s0"} - ignoring(device) sum(node_network_transmit_bytes_total{device=~"br.*"})
但这又没有结果。
EDIT2
我已经设法弄清楚如何通过
sum(node_network_transmit_bytes_total{device="enp3s0"}) by (instance) - sum (node_network_transmit_bytes_total{device=~"br.*"}) by (instance)
但我不能在上面使用 irate
:
irate(sum(node_network_transmit_bytes_total{device="enp3s0"}) by (instance) - sum (node_network_transmit_bytes_total{device=~"br.*"}) by (instance))[5m]
Error executing query: 1:149: parse error: ranges only allowed for vector selectors
好的,这似乎是解决方案:
(sum(irate(node_network_receive_bytes_total{device="enp3s0"}[1m])) by (instance))
-
(sum(irate(node_network_receive_bytes_total{device=~"br.*"}[1m])) by (instance))
首先推荐使用rate() instead of irate(), since irate()
tends to return jumpy results - see this article详细
如果要计算名称以 br
开头的设备的每 instance
个网络传输速率总和,则必须使用以下查询:
sum(rate(node_network_transmit_bytes_total{device=~"br.*"}[1m])) by (instance)
有关详细信息,请参阅 sum() 文档。
enp3s0
设备的 rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])
returns 每个 instance
网络传输速率。返回的时间序列可能包含 instance
标签以外的其他标签。因此以下查询 returns 为空结果,因为 time series matching rules for binary operators in Prometheus:
rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])
-
sum(rate(node_network_transmit_bytes_total{device=~"br.*"}[1m])) by (instance)
这可以通过两种方式解决:
- 将
rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])
换成sum(...) by (instance)
。这有效地从结果中删除了 instance
以外的所有标签,并允许在 -
: 的左侧和右侧找到具有相同标签集的时间序列对
sum(rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])) by (instance)
-
sum(rate(node_network_transmit_bytes_total{device=~"br.*"}[1m])) by (instance)
- 在
-
运算符后添加on (instance)
修饰符:
rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])
- on (instance)
sum(rate(node_network_transmit_bytes_total{device=~"br.*"}[1m])) by (instance)
这将保留 node_network_transmit_bytes_total
时间序列的所有原始标签。有关 on()
修饰符的详细信息,请参阅 these docs。
具有网络传输指标,例如node_network_transmit_bytes_total
来自 nodeexporter
我想得到一个接口的传输速率(在我的例子中是 enp3s0
)和所有桥接接口传输速率的总和之间的差异。
我有这样的东西:
irate(node_network_transmit_bytes_total{device="enp3s0"}[1m]) - irate(node_network_transmit_bytes_total{device=~"br.*"}[1m])
但这没有给我任何数据点。
编辑
我已经尝试了
所以这个:
node_network_transmit_bytes_total{device="enp3s0"} - ignoring(device) node_network_transmit_bytes_total{device=~"br.*"}
产量:
Error executing query: found duplicate series for the match group {instance="192.168.X.Z:9100", job="nodeexporter"} on the right hand-side of the operation: [{name="node_network_transmit_bytes_total", device="br-XXXX", instance="192.168.X.Z:9100", job="nodeexporter"}, {name="node_network_transmit_bytes_total", device="br-5d6dce95c2b0", instance="192.168.X.Z:9100", job="nodeexporter"}];many-to-many matching not allowed: matching labels must be unique on one side
我试过使用 sum()
:
node_network_transmit_bytes_total{device="enp3s0"} - ignoring(device) sum(node_network_transmit_bytes_total{device=~"br.*"})
但这又没有结果。
EDIT2
我已经设法弄清楚如何通过
sum(node_network_transmit_bytes_total{device="enp3s0"}) by (instance) - sum (node_network_transmit_bytes_total{device=~"br.*"}) by (instance)
但我不能在上面使用 irate
:
irate(sum(node_network_transmit_bytes_total{device="enp3s0"}) by (instance) - sum (node_network_transmit_bytes_total{device=~"br.*"}) by (instance))[5m]
Error executing query: 1:149: parse error: ranges only allowed for vector selectors
好的,这似乎是解决方案:
(sum(irate(node_network_receive_bytes_total{device="enp3s0"}[1m])) by (instance))
-
(sum(irate(node_network_receive_bytes_total{device=~"br.*"}[1m])) by (instance))
首先推荐使用rate() instead of irate(), since irate()
tends to return jumpy results - see this article详细
如果要计算名称以 br
开头的设备的每 instance
个网络传输速率总和,则必须使用以下查询:
sum(rate(node_network_transmit_bytes_total{device=~"br.*"}[1m])) by (instance)
有关详细信息,请参阅 sum() 文档。
enp3s0
设备的 rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])
returns 每个 instance
网络传输速率。返回的时间序列可能包含 instance
标签以外的其他标签。因此以下查询 returns 为空结果,因为 time series matching rules for binary operators in Prometheus:
rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])
-
sum(rate(node_network_transmit_bytes_total{device=~"br.*"}[1m])) by (instance)
这可以通过两种方式解决:
- 将
rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])
换成sum(...) by (instance)
。这有效地从结果中删除了instance
以外的所有标签,并允许在-
: 的左侧和右侧找到具有相同标签集的时间序列对
sum(rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])) by (instance)
-
sum(rate(node_network_transmit_bytes_total{device=~"br.*"}[1m])) by (instance)
- 在
-
运算符后添加on (instance)
修饰符:
rate(node_network_transmit_bytes_total{device="enp3s0"}[1m])
- on (instance)
sum(rate(node_network_transmit_bytes_total{device=~"br.*"}[1m])) by (instance)
这将保留 node_network_transmit_bytes_total
时间序列的所有原始标签。有关 on()
修饰符的详细信息,请参阅 these docs。