Mercurial > prosody-modules
annotate mod_measure_process/mod_measure_process.lua @ 6403:13c61a068c71
mod_pubsub_serverinfo: Include hostname in default pubsub node name
This change ensures that every host publishes to a unique node by default,
which is important when publishing info about multiple hosts.
The old default node name was "serverinfo"
The new default node name is in the format "serverinfo/example.com" where
example.com is automatically replaced by the publishing host's name.
This affects existing deployments in the following ways:
- If you already configured pubsub_serverinfo_node explicitly in your config,
then nothing will change, your current configuration will still be used.
- If you did not specify it in your config (i.e. used the default) then the
module will switch to publishing to the new node. If your configuration is
correct this shouldn't be noticed, because the new node will automatically
be created and configured by the module. If you want, you can clean up the
old 'serverinfo' node using:
prosodyctl shell pubsub delete_node pubsub.example.com serverinfo
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 11 Feb 2026 09:40:30 +0000 |
| parents | c26f515751af |
| children |
| rev | line source |
|---|---|
|
4554
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
1 module:set_global() |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
2 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
3 local get_cpu_time = os.clock |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
4 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
5 local custom_metric = require "core.statsmanager".metric |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
6 local cpu_time = custom_metric( |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
7 "counter", "process_cpu", "seconds", |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
8 "CPU time used by Prosody as reported by clock(3)." |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
9 ):with_labels() |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
10 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
11 local lfs = require "lfs" |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
12 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
13 module:hook("stats-update", function () |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
14 cpu_time:set(get_cpu_time()) |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
15 end); |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
16 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
17 if lfs.attributes("/proc/self/statm", "mode") == "file" then |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
18 local pagesize = module:get_option_number("memory_pagesize", 4096); -- getconf PAGESIZE |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
19 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
20 local vsz = custom_metric( |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
21 "gauge", "process_virtual_memory", "bytes", |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
22 "Virtual memory size in bytes." |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
23 ):with_labels() |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
24 local rss = custom_metric( |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
25 "gauge", "process_resident_memory", "bytes", |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
26 "Resident memory size in bytes." |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
27 ):with_labels() |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
28 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
29 module:hook("stats-update", function () |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
30 local statm, err = io.open("/proc/self/statm"); |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
31 if not statm then |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
32 module:log("error", tostring(err)); |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
33 return; |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
34 end |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
35 -- virtual memory (caches, opened librarys, everything) |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
36 vsz:set(statm:read("*n") * pagesize); |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
37 -- resident set size (actually used memory) |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
38 rss:set(statm:read("*n") * pagesize); |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
39 statm:close(); |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
40 end); |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
41 end |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
42 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
43 if lfs.attributes("/proc/self/fd", "mode") == "directory" then |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
44 local open_fds = custom_metric( |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
45 "gauge", "process_open_fds", "", |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
46 "Number of open file descriptors." |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
47 ):with_labels() |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
48 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
49 local has_posix, posix = pcall(require, "util.pposix") |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
50 local max_fds |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
51 if has_posix then |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
52 max_fds = custom_metric( |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
53 "gauge", "process_max_fds", "", |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
54 "Maximum number of open file descriptors" |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
55 ):with_labels() |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
56 else |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
57 module:log("warn", "not reporting maximum number of file descriptors because mod_posix is not available") |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
58 end |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
59 |
|
4878
c26f515751af
mod_measure_process: Handle unlimited FD limits
Kim Alvefur <zash@zash.se>
parents:
4877
diff
changeset
|
60 local function limit2num(limit) |
|
c26f515751af
mod_measure_process: Handle unlimited FD limits
Kim Alvefur <zash@zash.se>
parents:
4877
diff
changeset
|
61 if limit == "unlimited" then |
|
c26f515751af
mod_measure_process: Handle unlimited FD limits
Kim Alvefur <zash@zash.se>
parents:
4877
diff
changeset
|
62 return math.huge |
|
c26f515751af
mod_measure_process: Handle unlimited FD limits
Kim Alvefur <zash@zash.se>
parents:
4877
diff
changeset
|
63 end |
|
c26f515751af
mod_measure_process: Handle unlimited FD limits
Kim Alvefur <zash@zash.se>
parents:
4877
diff
changeset
|
64 return limit |
|
c26f515751af
mod_measure_process: Handle unlimited FD limits
Kim Alvefur <zash@zash.se>
parents:
4877
diff
changeset
|
65 end |
|
c26f515751af
mod_measure_process: Handle unlimited FD limits
Kim Alvefur <zash@zash.se>
parents:
4877
diff
changeset
|
66 |
|
4554
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
67 module:hook("stats-update", function () |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
68 local count = 0 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
69 for _ in lfs.dir("/proc/self/fd") do |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
70 count = count + 1 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
71 end |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
72 open_fds:set(count) |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
73 |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
74 if has_posix then |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
75 local ok, soft, hard = posix.getrlimit("NOFILE") |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
76 if ok then |
|
4878
c26f515751af
mod_measure_process: Handle unlimited FD limits
Kim Alvefur <zash@zash.se>
parents:
4877
diff
changeset
|
77 max_fds:set(limit2num(soft or hard)); |
|
4554
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
78 end |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
79 end |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
80 end); |
|
025cf93acfe9
mod_measure_process: Provide metrics about the process itself
Jonas Schäfer <jonas@wielicki.name>
parents:
diff
changeset
|
81 end |
