annotate mod_statistics_mem/mod_statistics_mem.lua @ 5668:ecfd7aece33b

mod_measure_modules: Report module statuses via OpenMetrics Someone in the chat asked about a health check endpoint, which reminded me of mod_http_status, which provides access to module statuses with full details. After that, this idea came about, which seems natural. As noted in the README, it could be used to monitor that critical modules are in fact loaded correctly. As more modules use the status API, the more useful this module and mod_http_status becomes.
author Kim Alvefur <zash@zash.se>
date Fri, 06 Oct 2023 18:34:39 +0200
parents 403d5cd924eb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1379
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- Probably Linux-specific memory statistics
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 module:set_global();
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local human;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 do
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 local tostring = tostring;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 local s_format = string.format;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local m_floor = math.floor;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 local m_max = math.max;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local prefixes = "kMGTPEZY";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 local multiplier = 1024;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 function human(num)
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 num = tonumber(num) or 0;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 local m = 0;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 while num >= multiplier and m < #prefixes do
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 num = num / multiplier;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 m = m + 1;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 return s_format("%0."..m_max(0,3-#tostring(m_floor(num))).."f%sB",
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 num, m > 0 and (prefixes:sub(m,m) .. "i") or "");
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 local pagesize = 4096; -- according to getpagesize()
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 module:provides("statistics", {
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 statistics = {
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 memory_total = { -- virtual memory
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 get = function ()
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 local statm, err = io.open"/proc/self/statm";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 if statm then
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 local total = statm:read"*n";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 statm:close();
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 return total * pagesize;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 else
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 module:log("debug", err);
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 end;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 tostring = human;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 };
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 memory_rss = { -- actual in-memory data size
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 get = function ()
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 local statm, err = io.open"/proc/self/statm";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 if statm then
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 statm:read"*n"; -- Total size, ignore
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 local rss = statm:read"*n";
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 statm:close();
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 return rss * pagesize;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 else
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 module:log("debug", err);
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 end
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 end;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 tostring = human;
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 };
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 }
403d5cd924eb mod_statistics_mem: Module that collects memory usage stats from /proc
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 });