From 925b7d1bfaeabc1b6c431f7dbb5e74dcc6440027 Mon Sep 17 00:00:00 2001 From: Lajos Gerecs Date: Fri, 8 Jan 2021 17:02:55 +0100 Subject: [PATCH 1/2] implement running and total mnesia node count metrics --- src/collectors/mnesia/prometheus_mnesia_collector.erl | 8 +++++++- .../mnesia/prometheus_mnesia_collector_tests.erl | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/collectors/mnesia/prometheus_mnesia_collector.erl b/src/collectors/mnesia/prometheus_mnesia_collector.erl index ef2ce18b..c10fb537 100644 --- a/src/collectors/mnesia/prometheus_mnesia_collector.erl +++ b/src/collectors/mnesia/prometheus_mnesia_collector.erl @@ -157,7 +157,13 @@ metrics(EnabledMetrics) -> fun() -> TablewiseMemoryUsage end}, {tablewise_size, gauge, "Number of rows present per table", - fun() -> TablewiseSize end} + fun() -> TablewiseSize end}, + {known_node_count, gauge, + "Count of known mnesia nodes", + fun() -> length(mnesia:system_info(db_nodes)) end}, + {running_node_count, gauge, + "Count of running mnesia nodes", + fun() -> length(mnesia:system_info(running_db_nodes)) end} ]. %%==================================================================== diff --git a/test/eunit/collectors/mnesia/prometheus_mnesia_collector_tests.erl b/test/eunit/collectors/mnesia/prometheus_mnesia_collector_tests.erl index 1b0c413a..69687912 100644 --- a/test/eunit/collectors/mnesia/prometheus_mnesia_collector_tests.erl +++ b/test/eunit/collectors/mnesia/prometheus_mnesia_collector_tests.erl @@ -53,6 +53,8 @@ test_mnesia_on_collector_env_off() -> ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_logged_transactions")), ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_restarted_transactions")), ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_memory_usage_bytes")), + ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_total_node_count")), + ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_running_node_count")), application:unset_env(prometheus,mnesia_collector_metrics,[]). test_mnesia_on_collector() -> @@ -66,7 +68,9 @@ test_mnesia_on_collector() -> ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_committed_transactions")), ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_logged_transactions")), ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_restarted_transactions")), - ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_memory_usage_bytes")). + ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_memory_usage_bytes")), + ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_known_node_count 1")), + ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_running_node_count 1")). test_mnesia_on_collector_global_labels() -> Metrics = try From 82c721cbb17baf4dde40895c9b21cfa105b6366b Mon Sep 17 00:00:00 2001 From: Lajos Gerecs Date: Mon, 11 Jan 2021 12:30:29 +0100 Subject: [PATCH 2/2] implement node state metric for each mnesia connection --- .../mnesia/prometheus_mnesia_collector.erl | 23 ++++++++++++++++--- .../prometheus_mnesia_collector_tests.erl | 6 ++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/collectors/mnesia/prometheus_mnesia_collector.erl b/src/collectors/mnesia/prometheus_mnesia_collector.erl index c10fb537..33dd561b 100644 --- a/src/collectors/mnesia/prometheus_mnesia_collector.erl +++ b/src/collectors/mnesia/prometheus_mnesia_collector.erl @@ -124,7 +124,8 @@ metrics(EnabledMetrics) -> MemoryUsage = get_memory_usage(), TablewiseMemoryUsage = get_tablewise_memory_usage(), TablewiseSize = get_tablewise_size(), - + Nodes = mnesia:system_info(db_nodes), + Running = mnesia:system_info(running_db_nodes), [{held_locks, gauge, "Number of held locks.", fun() -> ets:info(mnesia_held_locks, size) end}, @@ -160,10 +161,14 @@ metrics(EnabledMetrics) -> fun() -> TablewiseSize end}, {known_node_count, gauge, "Count of known mnesia nodes", - fun() -> length(mnesia:system_info(db_nodes)) end}, + fun() -> length(Nodes) end}, {running_node_count, gauge, "Count of running mnesia nodes", - fun() -> length(mnesia:system_info(running_db_nodes)) end} + fun() -> length(Running) end}, + {node_state, + gauge, "Mnesia connection state." + "The state is represented as a numerical value where not_connected = 0, connected = 1", + fun() -> get_node_state_metrics(Nodes, Running) end} ]. %%==================================================================== @@ -220,3 +225,15 @@ get_tablewise_size() -> [{[{table, Tab}], mnesia:table_info(Tab, size)} | Acc] end, lists:foldl(Calculator, [], mnesia:system_info(tables)). + +get_node_state_metrics(Nodes, Running) -> + LocalNode = node(), + lists:filtermap(fun(Node) -> + Labels = [{peer, Node}], + case lists:member(Node, Running) of + _ when LocalNode =:= Node -> false; + true -> + {true, {Labels, 1}}; + false -> {true, {Labels, 0}} + end + end, Nodes). \ No newline at end of file diff --git a/test/eunit/collectors/mnesia/prometheus_mnesia_collector_tests.erl b/test/eunit/collectors/mnesia/prometheus_mnesia_collector_tests.erl index 69687912..56b9986e 100644 --- a/test/eunit/collectors/mnesia/prometheus_mnesia_collector_tests.erl +++ b/test/eunit/collectors/mnesia/prometheus_mnesia_collector_tests.erl @@ -55,6 +55,7 @@ test_mnesia_on_collector_env_off() -> ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_memory_usage_bytes")), ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_total_node_count")), ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_running_node_count")), + ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_node_state")), application:unset_env(prometheus,mnesia_collector_metrics,[]). test_mnesia_on_collector() -> @@ -70,7 +71,10 @@ test_mnesia_on_collector() -> ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_restarted_transactions")), ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_memory_usage_bytes")), ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_known_node_count 1")), - ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_running_node_count 1")). + ?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_running_node_count 1")), + % we dont have any node state in case of a single node cluster + ?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_node_state")). + test_mnesia_on_collector_global_labels() -> Metrics = try