From 77188d2422b600ae25c2a46d28d217ddd6d79a50 Mon Sep 17 00:00:00 2001 From: Nick Hainke Date: Mon, 7 Dec 2020 12:43:55 +0100 Subject: [PATCH] prometheus-node-exporter-lua: add snmp6 exporter If you want statistics about IPv6 you can use snmpv6 exporter. Currently, the "/proc/net/snmp6" is existing but all values are just "0". To use this plugin you have to set CONFIG_PROC_STRIPPED=n I will find a way to enable the important ipv6 statistics by default. Signed-off-by: Nick Hainke --- utils/prometheus-node-exporter-lua/Makefile | 14 ++++++- .../lib/lua/prometheus-collectors/snmp6.lua | 39 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/snmp6.lua diff --git a/utils/prometheus-node-exporter-lua/Makefile b/utils/prometheus-node-exporter-lua/Makefile index 877ec234b3..d02351bbcb 100644 --- a/utils/prometheus-node-exporter-lua/Makefile +++ b/utils/prometheus-node-exporter-lua/Makefile @@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=prometheus-node-exporter-lua -PKG_VERSION:=2020.10.29 +PKG_VERSION:=2020.12.07 PKG_RELEASE:=1 PKG_MAINTAINER:=Etienne CHAMPETIER @@ -199,6 +199,17 @@ define Package/prometheus-node-exporter-lua-wifi_stations/install $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/wifi_stations.lua $(1)/usr/lib/lua/prometheus-collectors/ endef +define Package/prometheus-node-exporter-lua-snmp6 + $(call Package/prometheus-node-exporter-lua/Default) + TITLE+= (snmp6 collector) + DEPENDS:=prometheus-node-exporter-lua +libubus-lua +endef + +define Package/prometheus-node-exporter-lua-snmp6/install + $(INSTALL_DIR) $(1)/usr/lib/lua/prometheus-collectors + $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/snmp6.lua $(1)/usr/lib/lua/prometheus-collectors/ +endef + $(eval $(call BuildPackage,prometheus-node-exporter-lua)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-bmx6)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-bmx7)) @@ -213,3 +224,4 @@ $(eval $(call BuildPackage,prometheus-node-exporter-lua-textfile)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-uci_dhcp_host)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-wifi)) $(eval $(call BuildPackage,prometheus-node-exporter-lua-wifi_stations)) +$(eval $(call BuildPackage,prometheus-node-exporter-lua-snmp6)) diff --git a/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/snmp6.lua b/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/snmp6.lua new file mode 100644 index 0000000000..663d1b5f43 --- /dev/null +++ b/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/snmp6.lua @@ -0,0 +1,39 @@ +local ubus = require "ubus" + +local function get_devices() -- based on hostapd_stations.lua + local u = ubus.connect() + local status = u:call("network.device", "status", {}) + local devices = {} + + for dev, dev_table in pairs(status) do + table.insert(devices, dev) + end + return devices +end + +local function get_metric(device) + local label = { + device = device + } + + if device == "all" then + for e in io.lines("/proc/net/snmp6") do + local snmp6 = space_split(e) + metric("snmp6_" .. snmp6[1], "counter", label, tonumber(snmp6[2])) + end + else + for e in io.lines("/proc/net/dev_snmp6/" .. device) do + local snmp6 = space_split(e) + metric("snmp6_" .. snmp6[1], "counter", label, tonumber(snmp6[2])) + end + end +end + +local function scrape() + get_metric("all") + for _, devicename in ipairs(get_devices()) do + get_metric(devicename) + end +end + +return { scrape = scrape }