|
-- 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 }
|