From 815b15412f7e42a8981087fdd3a1fda00c33b956 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Fri, 31 Dec 2021 00:44:15 +0100 Subject: prometheus/node: add textfile collector sensors (WIP) --- .../textfile-collector-scripts/sensors.j2 | 51 ++++++++++++++++++++++ .../textfile-collector-scripts/sensors.service.j2 | 33 ++++++++++++++ .../textfile-collector-scripts/sensors.timer.j2 | 9 ++++ 3 files changed, 93 insertions(+) create mode 100644 roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.j2 create mode 100644 roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.service.j2 create mode 100644 roles/monitoring/prometheus/exporter/node/templates/textfile-collector-scripts/sensors.timer.j2 (limited to 'roles/monitoring/prometheus/exporter/node/templates') 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 -- cgit v1.2.3