openwrt-packages/utils/prometheus-node-exporter-lua/files/usr/lib/lua/prometheus-collectors/cpu.lua

41 lines
1.3 KiB
Lua

-- stat/cpu collector
local function scrape()
local stat = get_contents("/proc/stat")
-- system boot time, seconds since epoch
metric("node_boot_time", "gauge", nil, string.match(stat, "btime ([0-9]+)"))
-- context switches since boot (all CPUs)
metric("node_context_switches", "counter", nil, string.match(stat, "ctxt ([0-9]+)"))
-- cpu times, per CPU, per mode
local cpu_mode = {"user", "nice", "system", "idle", "iowait", "irq",
"softirq", "steal", "guest", "guest_nice"}
local i = 0
local cpu_metric = metric("node_cpu", "counter")
while true do
local cpu = {string.match(stat, "cpu"..i.." (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+) (%d+)")}
if #cpu ~= 10 then
break
end
for ii, mode in ipairs(cpu_mode) do
cpu_metric({cpu="cpu"..i, mode=mode}, cpu[ii] / 100)
end
i = i + 1
end
-- interrupts served
metric("node_intr", "counter", nil, string.match(stat, "intr ([0-9]+)"))
-- processes forked
metric("node_forks", "counter", nil, string.match(stat, "processes ([0-9]+)"))
-- processes running
metric("node_procs_running", "gauge", nil, string.match(stat, "procs_running ([0-9]+)"))
-- processes blocked for I/O
metric("node_procs_blocked", "gauge", nil, string.match(stat, "procs_blocked ([0-9]+)"))
end
return { scrape = scrape }