我使用 sflow-rt-exporter ( https://github.com/sflow-rt/prometheus ) 收集交换机上的流量。
然后,我创建了一个 Grafana 表,在其中可以看到流量分为“源”、“目的地”和“流量”。
现在我想创建一个表,其中“源”和“目标”列位于一列中。因此,流量是否来自或流向该服务器并不重要。
示例:
Source | Destination | Traffic
123.4.5.6 | 234.5.6.7 | 200B
234.5.6.7 | 123.4.5.6 | 500B
should become
IP | Traffic
123.4.5.6 | 700B
经过一周的尝试,我终于放弃了,希望你们中的一个人可以帮助我:)
提前致谢。
问候 L1nk27
最佳答案
您请求的关键是您希望聚合不同的维度(标签),而 Prometheus 无法实现这一点。
因此,您必须创建另一个维度(我们称之为IP
)来收集边(源
和目的地)
。这可以使用 label_replace 来完成功能:
这会将
source
标签复制到IP
中:label_replace(traffic, "IP", "$1", "source", "(.*)")
这会将
destination
标签复制到IP
中:label_replace(traffic, "IP", "$1", "destination", "(.*)")
请注意,您不能有重复项,因为保留了原始值(这一点很重要)。然后您可以使用OR二元运算符将它们连接起来,然后通过 IP
标签求和:
sum by(IP) (
label_replace(traffic, "IP", "$1", "source", "(.*)")
OR
label_replace(traffic, "IP", "$1", "destination", "(.*)"))
关于merge - Grafana Prometheus 合并两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70464034/