summaryrefslogtreecommitdiff
path: root/roles/monitoring/prometheus/exporter/node/templates
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2021-12-31 00:44:15 +0100
committerChristian Pointner <equinox@spreadspace.org>2021-12-31 00:44:15 +0100
commit815b15412f7e42a8981087fdd3a1fda00c33b956 (patch)
tree03d5a8b4d258f7e094e6306479da0fe01f741a08 /roles/monitoring/prometheus/exporter/node/templates
parentsensors: init is now idempotent (diff)
prometheus/node: add textfile collector sensors (WIP)
Diffstat (limited to 'roles/monitoring/prometheus/exporter/node/templates')
-rw-r--r--roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.j251
-rw-r--r--roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.service.j233
-rw-r--r--roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.timer.j29
3 files changed, 93 insertions, 0 deletions
diff --git a/roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.j2 b/roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.j2
new file mode 100644
index 00000000..822aa3b5
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.j2
@@ -0,0 +1,51 @@
+#!/usr/bin/lua5.1
+
+local sensors = require "sensors"
+local units = {
+ temperature = "celsius",
+ humidity = "percent",
+ pressure = "pascals",
+ gpio = "status",
+}
+
+local function metric(name, mtype, labels, value)
+ print("# TYPE " .. name .. " " .. mtype)
+
+ local label_string = ""
+ if labels then
+ for label,value in pairs(labels) do
+ label_string = label_string .. label .. '="' .. value .. '",'
+ end
+ label_string = "{" .. string.sub(label_string, 1, -2) .. "}"
+ end
+ print(string.format("%s%s %s", name, label_string, value))
+end
+
+local function scrape(config, num_sensors)
+ local readings, err = sensors.read(config)
+ if not readings then return end
+
+ metric("sensors_count_total", "gauge", nil, num_sensors)
+ for name, values in pairs(readings) do
+ labels = { name = name, kind = values._kind_ }
+ for t, v in pairs(values) do
+ local unit = units[t]
+ if unit ~= nil then
+ metric("sensors_" .. t .. "_" .. unit, "gauge", labels, v)
+ end
+ end
+ end
+end
+
+function main()
+ local config, _ = sensors.read_config('/etc/prometheus/exporter/node/sensors.json')
+
+ -- TODO: only do this if sensor state file does not exist - else read num_sensors from state file
+ local num_sensors, err = sensors.setup(config)
+ if num_sensors == nil then error(err) end
+ -- TODO: write num_sensors to state file
+
+ scrape(config, num_sensors, units)
+end
+
+main()
diff --git a/roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.service.j2 b/roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.service.j2
new file mode 100644
index 00000000..7a438317
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.service.j2
@@ -0,0 +1,33 @@
+[Unit]
+Description=Promethues node exporter textfile collector sensors
+
+[Service]
+Type=oneshot
+Environment=TMPDIR=/var/lib/prometheus-node-exporter/textfile-collector
+Environment=LC_NUMERIC=C
+ExecStart=bash -c "/usr/local/share/prometheus-node-exporter/sensors | sponge /var/lib/prometheus-node-exporter/textfile-collector/sensors.prom"
+TimeoutStartSec=30s
+
+# systemd hardening-options
+AmbientCapabilities=
+CapabilityBoundingSet=
+LockPersonality=true
+MemoryDenyWriteExecute=true
+NoNewPrivileges=true
+PrivateTmp=true
+ProtectControlGroups=true
+ProtectHome=true
+ProtectKernelModules=true
+ProtectKernelTunables=true
+ProtectSystem=strict
+ReadWritePaths=/var/lib/prometheus-node-exporter/textfile-collector
+RuntimeDirectory=prometheus-node-exporter_sensors
+RuntimeDirectoryPreserve=yes
+RemoveIPC=true
+RestrictNamespaces=true
+RestrictRealtime=true
+RestrictAddressFamilies=AF_UNIX
+SystemCallArchitectures=native
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.timer.j2 b/roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.timer.j2
new file mode 100644
index 00000000..164b4681
--- /dev/null
+++ b/roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.timer.j2
@@ -0,0 +1,9 @@
+[Unit]
+Description=Promethues node exporter textfile collector sensors
+
+[Timer]
+OnBootSec=50s
+OnUnitActiveSec=5min
+
+[Install]
+WantedBy=timers.target