prometheus-node-exporter-lua: add bmx6/7 scraper 5578/head
authorPaul Spooren <spooren@informatik.uni-leipzig.de>
Wed, 7 Feb 2018 00:05:04 +0000 (01:05 +0100)
committerPaul Spooren <spooren@informatik.uni-leipzig.de>
Mon, 12 Feb 2018 20:41:37 +0000 (21:41 +0100)
scrapes bmx6 status and connected links.

example output:

    bmx6_status{id="qMp-LibreMesh-1706",version="BMX6-0.1-alpha",address="fd66:66:66:a:6670:2ff:fe3e:9d28"} 1
    bmx6_link_rxRate{target="UPC-CN-C6-E104-Alix",source="qMp-LibreMesh-1706",dev="wlan0-mesh_12"} 100
    bmx6_link_txRate{target="UPC-CN-C6-E104-Alix",source="qMp-LibreMesh-1706",dev="wlan0-mesh_12"} 100
    bmx6_link_rxRate{target="UPC-CN-C6-E104-Alix-Paul",source="qMp-LibreMesh-1706",dev="wlan1-adhoc_12"} 100
    bmx6_link_txRate{target="UPC-CN-C6-E104-Alix-Paul",source="qMp-LibreMesh-1706",dev="wlan1-adhoc_12"} 100
    bmx6_link_rxRate{target="UPC-CN-C6-E104-Turoffner",source="qMp-LibreMesh-1706",dev="wlan0-mesh_12"} 97
    bmx6_link_txRate{target="UPC-CN-C6-E104-Turoffner",source="qMp-LibreMesh-1706",dev="wlan0-mesh_12"} 100
    node_scrape_collector_duration_seconds{collector="bmx6"} 0.0025260448455811
    node_scrape_collector_success{collector="bmx6"} 1
    scrapes bmx7 status and connected links.

example output:

    bmx7_status{id="C68791D2",revision="3a52f89",name="smpl-18f4ce",address="fd70:c687:91d2:8ab3:1a88:6b14:bad0:2b18"} 1
    bmx7_cpu_usage 0.7
    bmx7_mem_usage 3204000
    bmx7_link_rxRate{target="F48239CD",dev="wlan0-mesh_13",source="C68791D2",name="smpl-07889a"} 54000
    bmx7_link_txRate{target="F48239CD",dev="wlan0-mesh_13",source="C68791D2",name="smpl-07889a"} 52729
    node_scrape_collector_duration_seconds{collector="bmx7"} 0.0020999908447266
    node_scrape_collector_success{collector="bmx7"} 1

prometheus-node-exporter-lua: bmx6/7 netjson format

adds labels called source and target to links instead of only the target
previously called "id".

Retrieving all *links* from prometheus now makes it easier to create
a valid netjson(.org) graph.

It's not feasible to use *instance* as *source* as for instance likely
the name is used for dns, instead of the ID. Using the *name* instead of
*id* for netjson linking results in a bad graph when two devices have
the same (default) hostname.

Signed-off-by: Paul Spooren <spooren@informatik.uni-leipzig.de>
utils/prometheus-node-exporter-lua/Makefile
utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/bmx6.lua [new file with mode: 0644]
utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/bmx7.lua [new file with mode: 0644]

index 8f9e3ccad9b56f63d846dd57b002862b745ba29e..2d8c6814be7eed71077be83b2df3c6e0a5621111 100644 (file)
@@ -58,6 +58,18 @@ define Package/prometheus-node-exporter-lua-wifi_stations
   DEPENDS:=prometheus-node-exporter-lua +libiwinfo-lua +libubus-lua
 endef
 
+define Package/prometheus-node-exporter-lua-bmx6
+  $(call Package/prometheus-node-exporter-lua/Default)
+  TITLE+= (bmx6 links collector)
+  DEPENDS:=prometheus-node-exporter-lua bmx6 +lua-cjson +bmx6-json
+endef
+
+define Package/prometheus-node-exporter-lua-bmx7
+  $(call Package/prometheus-node-exporter-lua/Default)
+  TITLE+= (bmx7 links collector)
+  DEPENDS:=prometheus-node-exporter-lua bmx7 +lua-cjson +bmx7-json
+endef
+
 Build/Compile=
 
 define Package/prometheus-node-exporter-lua/install
@@ -97,8 +109,20 @@ 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-bmx6/install
+       $(INSTALL_DIR) $(1)/usr/lib/lua/prometheus-collectors
+       $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/bmx6.lua $(1)/usr/lib/lua/prometheus-collectors/
+endef
+
+define Package/prometheus-node-exporter-lua-bmx7/install
+       $(INSTALL_DIR) $(1)/usr/lib/lua/prometheus-collectors
+       $(INSTALL_BIN) ./files/usr/lib/lua/prometheus-collectors/bmx7.lua $(1)/usr/lib/lua/prometheus-collectors/
+endef
+
 $(eval $(call BuildPackage,prometheus-node-exporter-lua))
 $(eval $(call BuildPackage,prometheus-node-exporter-lua-nat_traffic))
 $(eval $(call BuildPackage,prometheus-node-exporter-lua-netstat))
 $(eval $(call BuildPackage,prometheus-node-exporter-lua-wifi))
 $(eval $(call BuildPackage,prometheus-node-exporter-lua-wifi_stations))
+$(eval $(call BuildPackage,prometheus-node-exporter-lua-bmx6))
+$(eval $(call BuildPackage,prometheus-node-exporter-lua-bmx7))
diff --git a/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/bmx6.lua b/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/bmx6.lua
new file mode 100644 (file)
index 0000000..6b6c118
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/lua
+
+local json = require "cjson"
+
+local function interpret_suffix(rate)
+  local value = string.sub(rate, 1, -2)
+  local suffix = string.sub(rate, -1)
+  if suffix == "K" then return tonumber(value) * 10^3 end
+  if suffix == "M" then return tonumber(value) * 10^6 end
+  if suffix == "G" then return tonumber(value) * 10^9 end
+  return rate
+end
+
+local function scrape()
+  local status = json.decode(get_contents("/var/run/bmx6/json/status")).status
+  local labels = {
+    version = status.version,
+    id = status.name,
+    address = status.primaryIp
+  }
+
+  metric("bmx6_status", "gauge", labels, 1)
+
+  local links = json.decode(get_contents("/var/run/bmx6/json/links")).links
+  local metric_bmx6_rxRate = metric("bmx6_link_rxRate","gauge")
+  local metric_bmx6_txRate = metric("bmx6_link_txRate","gauge")
+
+  for _, link in pairs(links) do
+    local labels = {
+      source = status.name,
+      target = link.name,
+      dev = link.viaDev
+    }
+    metric_bmx6_rxRate(labels, interpret_suffix(link.rxRate))
+    metric_bmx6_txRate(labels, interpret_suffix(link.txRate))
+  end
+end
+
+return { scrape = scrape }
diff --git a/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/bmx7.lua b/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/bmx7.lua
new file mode 100644 (file)
index 0000000..a6d6e9f
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/lua
+
+local json = require "cjson"
+
+local function interpret_suffix(rate)
+  if rate ~= nil then
+    local value = string.sub(rate, 1, -2)
+    local suffix = string.sub(rate, -1)
+    if suffix == "K" then return tonumber(value) * 10^3 end
+    if suffix == "M" then return tonumber(value) * 10^6 end
+    if suffix == "G" then return tonumber(value) * 10^9 end
+  end
+  return rate
+end
+
+local function scrape()
+  local status = json.decode(get_contents("/var/run/bmx7/json/status")).status
+  local labels = {
+    id = status.shortId,
+    name = status.name,
+    address = status.primaryIp,
+    revision = status.revision,
+  }
+
+  metric("bmx7_status", "gauge", labels, 1)
+  metric("bmx7_cpu_usage", "gauge", nil, status.cpu)
+  metric("bmx7_mem_usage", "gauge", nil, interpret_suffix(status.mem))
+
+  local links = json.decode(get_contents("/var/run/bmx7/json/links")).links
+  local metric_bmx7_rxRate = metric("bmx7_link_rxRate","gauge")
+  local metric_bmx7_txRate = metric("bmx7_link_txRate","gauge")
+
+  for _, link in pairs(links) do
+    local labels = {
+      source = status.shortId,
+      target = link.shortId,
+      name = link.name,
+      dev = link.dev
+    }
+    metric_bmx7_rxRate(labels, interpret_suffix(link.rxRate))
+    metric_bmx7_txRate(labels, interpret_suffix(link.txRate))
+    end
+end
+
+return { scrape = scrape }