annotate mod_measure_cpu/mod_measure_cpu.lua @ 4877:adc6241e5d16

mod_measure_process: Report the enforced limit The soft limit is what the kernel actually enforces, while the hard limit is is how far you can change the soft limit without privileges. Unless the process dynamically adjusts the soft limit, knowing the hard limit is not as useful as knowing the soft limit. Reporting the soft limit and the number of in-use FDs allows placing alerts on expressions like 'process_open_fds / process_max_fds >= 0.95'
author Kim Alvefur <zash@zash.se>
date Tue, 18 Jan 2022 18:55:20 +0100
parents 2af0301af734
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1677
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 module:set_global();
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 local measure = require"core.statsmanager".measure;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local mt = require"util.multitable";
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local get_time = require "socket".gettime;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local get_clock = os.clock;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 local measure_cpu_now = measure("amount", "cpu.percent"); -- Current percentage
4039
2af0301af734 mod_measure_cpu: Specify units of total CPU time as seconds
Kim Alvefur <zash@zash.se>
parents: 3444
diff changeset
9 local measure_cpu_total = measure("counter", "cpu.clock", { units = "seconds" });
1677
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local last_cpu_wall, last_cpu_clock;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 module:hook("stats-update", function ()
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 local new_wall, new_clock = get_time(), get_clock();
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 local pc = 0;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 if last_cpu_wall then
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 pc = 100/((new_wall-last_cpu_wall)/(new_clock-last_cpu_clock));
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 end
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 last_cpu_wall, last_cpu_clock = new_wall, new_clock;
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 measure_cpu_now(pc);
3444
e0fb97f47212 mod_measure_cpu: Rename counter metric to avoid name clash (thanks pep.)
Kim Alvefur <zash@zash.se>
parents: 3431
diff changeset
21 measure_cpu_total(new_clock);
1677
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 end);
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 -- Some metadata for mod_munin
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 local munin_meta = mt.new(); munin_meta.data = module:shared"munin/meta";
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 local key = "global_cpu_amount";
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 munin_meta:set(key, "", "graph_args", "--base 1000 -r --lower-limit 0 --upper-limit 100");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 munin_meta:set(key, "", "graph_title", "Prosody CPU Usage");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 munin_meta:set(key, "", "graph_vlabel", "%");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 munin_meta:set(key, "", "graph_category", "cpu");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 munin_meta:set(key, "percent", "label", "CPU Usage");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 munin_meta:set(key, "percent", "min", "0");
2a4c632a24cb mod_measure_cpu: Collect CPU usage statistic
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35