prometheus-node-exporter-lua: remove duplicated nat samples
authorAntoine C <hi@acolombier.dev>
Wed, 5 Jun 2024 18:34:33 +0000 (19:34 +0100)
committerEtienne Champetier <champetier.etienne@gmail.com>
Sat, 15 Jun 2024 16:14:59 +0000 (12:14 -0400)
Merge duplicate src/dest samples by suming their value (bytes count)

Fixes #24166

Signed-off-by: Antoine C <hi@acolombier.dev>
[bump version number]
Signed-off-by: Etienne Champetier <champetier.etienne@gmail.com>
utils/prometheus-node-exporter-lua/Makefile
utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/nat_traffic.lua

index f40ae7a0d770d229f5809e7228ea99a7d0070158..74d4d09cd9a9f27f24d64f168fe878bb30d36421 100644 (file)
@@ -4,7 +4,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=prometheus-node-exporter-lua
-PKG_VERSION:=2024.06.03
+PKG_VERSION:=2024.06.15
 PKG_RELEASE:=1
 
 PKG_MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com>
index 0b2da7dc3d49bdfbc8670ec209d19a204d343d13..24e4ca1f93a89b875c62a0b1fe5d122deeff944e 100644 (file)
@@ -1,7 +1,20 @@
 local function scrape()
   -- documetation about nf_conntrack:
   -- https://www.frozentux.net/iptables-tutorial/chunkyhtml/x1309.html
-  nat_metric =  metric("node_nat_traffic", "gauge" )
+
+  -- two dimesional table to sum bytes for the pair (src/dest)
+  local nat = {}
+  -- default constructor to init unknow pairs
+  setmetatable(nat, {
+    __index = function (t, addr)
+      t[addr] = {}
+      setmetatable(t[addr], {
+        __index = function () return 0 end
+      })
+      return t[addr]
+    end
+  })
+
   for e in io.lines("/proc/net/nf_conntrack") do
     -- output(string.format("%s\n",e  ))
     local fields = space_split(e)
@@ -22,9 +35,16 @@ local function scrape()
     -- local src, dest, bytes = string.match(natstat[i], "src=([^ ]+) dst=([^ ]+) .- bytes=([^ ]+)");
     -- local src, dest, bytes = string.match(natstat[i], "src=([^ ]+) dst=([^ ]+) sport=[^ ]+ dport=[^ ]+ packets=[^ ]+ bytes=([^ ]+)")
 
-    local labels = { src = src, dest = dest }
     -- output(string.format("src=|%s| dest=|%s| bytes=|%s|", src, dest, bytes  ))
-    nat_metric(labels, bytes )
+    nat[src][dest] = nat[src][dest] + bytes
+  end
+
+  nat_metric =  metric("node_nat_traffic", "gauge" )
+  for src, values in next, nat do
+    for dest, bytes in next, values do
+      local labels = { src = src, dest = dest }
+      nat_metric(labels, bytes )
+    end
   end
 end