diff options
author | Iliia Khaprov <i.khaprov@gmail.com> | 2022-07-12 23:53:27 +0200 |
---|---|---|
committer | Iliia Khaprov <i.khaprov@gmail.com> | 2022-07-13 08:35:33 +0200 |
commit | 360db38db0e80d718913fb93df644bf0c75ed350 (patch) | |
tree | 6669f11778fc768f40986cebe4e6e845ff8c2549 | |
parent | e2edb1b1eaa23c8658f8f94f96507bc5bbe9a9e0 (diff) | |
download | rabbitmq-server-git-process_start_time_seconds-4539.tar.gz |
Add process_start_time_seconds metrics. See #4539process_start_time_seconds-4539
-rw-r--r-- | deps/rabbitmq_prometheus/src/collectors/prometheus_process_collector.erl | 64 | ||||
-rw-r--r-- | deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl | 3 |
2 files changed, 66 insertions, 1 deletions
diff --git a/deps/rabbitmq_prometheus/src/collectors/prometheus_process_collector.erl b/deps/rabbitmq_prometheus/src/collectors/prometheus_process_collector.erl new file mode 100644 index 0000000000..22da85dba1 --- /dev/null +++ b/deps/rabbitmq_prometheus/src/collectors/prometheus_process_collector.erl @@ -0,0 +1,64 @@ +-module(prometheus_process_collector). +-export([deregister_cleanup/1, + collect_mf/2, + collect_metrics/2, + get_process_info/0]). + +-import(prometheus_model_helpers, [create_mf/5, + gauge_metric/1, + gauge_metric/2]). + +-behaviour(prometheus_collector). + +-define(METRICS, [{process_start_time_seconds, gauge, + "Start time of the process since unix epoch in seconds."} + ]). + +%% API exports +-export([]). + +%%==================================================================== +%% Collector API +%%==================================================================== + +deregister_cleanup(_) -> ok. + +collect_mf(_Registry, Callback) -> + ProcessInfo = get_process_info(), + [mf(Callback, Metric, ProcessInfo) || Metric <- ?METRICS], + ok. + +collect_metrics(_, {Fun, Proplist}) -> + Fun(Proplist). + +mf(Callback, Metric, Proplist) -> + {Name, Type, Help, Fun} = case Metric of + {Key, Type1, Help1} -> + {Key, Type1, Help1, fun (Proplist1) -> + metric(Type1, [], proplists:get_value(Key, Proplist1)) + end}; + {Key, Type1, Help1, Fun1} -> + {Key, Type1, Help1, Fun1} + end, + Callback(create_mf(Name, Help, Type, ?MODULE, {Fun, Proplist})). + +%%==================================================================== +%% Private Parts +%%==================================================================== + +metric(gauge, Labels, Value) -> + gauge_metric(Labels, Value). + +get_process_info() -> + [{process_start_time_seconds, + case persistent_term:get(process_start_time_seconds, undefined) of + undefined -> + Value = compute_process_start_time_seconds(), + persistent_term:put(process_start_time_seconds, Value), + Value; + Value -> Value + end}]. + +compute_process_start_time_seconds() -> + erlang:convert_time_unit(erlang:system_time() - (erlang:monotonic_time() - + erlang:system_info(start_time)), native, second). diff --git a/deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl b/deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl index 0034bf9d91..53ec9db410 100644 --- a/deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl +++ b/deps/rabbitmq_prometheus/src/rabbit_prometheus_dispatcher.erl @@ -16,7 +16,8 @@ build_dispatcher() -> prometheus_registry:register_collectors([ prometheus_rabbitmq_core_metrics_collector, prometheus_rabbitmq_global_metrics_collector, - prometheus_rabbitmq_alarm_metrics_collector]), + prometheus_rabbitmq_alarm_metrics_collector, + prometheus_process_collector]), prometheus_registry:register_collectors('per-object', [ prometheus_vm_system_info_collector, prometheus_vm_dist_collector, |