Skip to content

Commit e40e92d

Browse files
authored
add metric for mnesia memory usage (#107)
Add metric for mnesia memory usage
1 parent f861900 commit e40e92d

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

doc/prometheus_mnesia_collector.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ Number of transactions logged.
5050
Type: counter.<br />
5151
Total number of transaction restarts.
5252

53+
* `erlang_mnesia_memory_usage_bytes`<br/>
54+
Type: gauge.<br/>
55+
Total number of bytes allocated by all mnesia tables.
5356

5457

5558
### <a name="Configuration">Configuration</a> ###
@@ -65,6 +68,7 @@ Available options:
6568
- `transaction_failures` for `erlang_mnesia_failed_transactions`;
6669
- `transaction_commits` for `erlang_mnesia_committed_transactions`;
6770
- `transaction_log_writes` for `erlang_mnesia_logged_transactions`;
68-
- `transaction_restarts` for `erlang_mnesia_restarted_transactions`.
71+
- `transaction_restarts` for `erlang_mnesia_restarted_transactions`;
72+
- `memory_usage_bytes` for `erlang_mnesia_memory_usage_bytes`.
6973

7074
By default all metrics are enabled.

src/collectors/mnesia/prometheus_mnesia_collector.erl

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@
4646
%% Type: counter.<br/>
4747
%% Total number of transaction restarts.
4848
%% </li>
49+
%% <li>
50+
%% `erlang_mnesia_memory_usage_bytes'<br/>
51+
%% Type: gauge.<br/>
52+
%% Total number of bytes allocated by all mnesia tables.
53+
%% </li>
4954
%% </ul>
5055
%%
5156
%% ==Configuration==
@@ -61,7 +66,8 @@
6166
%% - `transaction_failures' for `erlang_mnesia_failed_transactions';
6267
%% - `transaction_commits' for `erlang_mnesia_committed_transactions';
6368
%% - `transaction_log_writes' for `erlang_mnesia_logged_transactions';
64-
%% - `transaction_restarts' for `erlang_mnesia_restarted_transactions'.
69+
%% - `transaction_restarts' for `erlang_mnesia_restarted_transactions';
70+
%% - `memory_usage_bytes' for `erlang_mnesia_memory_usage_bytes'.
6571
%%
6672
%% By default all metrics are enabled.
6773
%%
@@ -115,6 +121,7 @@ add_metric_family({Name, Type, Help, Metrics}, Callback) ->
115121

116122
metrics(EnabledMetrics) ->
117123
{Participants, Coordinators} = get_tm_info(EnabledMetrics),
124+
MemoryUsage = get_memory_usage(),
118125

119126
[{held_locks, gauge,
120127
"Number of held locks.",
@@ -139,7 +146,10 @@ metrics(EnabledMetrics) ->
139146
fun() -> mnesia:system_info(transaction_log_writes) end},
140147
{restarted_transactions, counter,
141148
"Total number of transaction restarts.",
142-
fun() -> mnesia:system_info(transaction_restarts) end}].
149+
fun() -> mnesia:system_info(transaction_restarts) end},
150+
{memory_usage_bytes, gauge,
151+
"Total number of bytes allocated by all mnesia tables",
152+
fun() -> MemoryUsage end}].
143153

144154
%%====================================================================
145155
%% Private Parts
@@ -173,3 +183,10 @@ enabled_metrics() ->
173183

174184
metric_enabled(Name, Metrics) ->
175185
Metrics =:= all orelse lists:member(Name, Metrics).
186+
187+
get_memory_usage() ->
188+
WordSize = erlang:system_info(wordsize),
189+
Calculator = fun(Tab, Sum) ->
190+
mnesia:table_info(Tab, memory) + Sum
191+
end,
192+
lists:foldl(Calculator, 0, mnesia:system_info(tables)) * WordSize.

test/eunit/collectors/mnesia/prometheus_mnesia_collector_tests.erl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ test_mnesia_on_collector_env_on() ->
3737
?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_committed_transactions")),
3838
?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_logged_transactions")),
3939
?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_restarted_transactions")),
40+
?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_memory_usage_bytes")),
4041
application:unset_env(prometheus,mnesia_collector_metrics,[]).
4142

4243
test_mnesia_on_collector_env_off() ->
@@ -51,6 +52,7 @@ test_mnesia_on_collector_env_off() ->
5152
?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_committed_transactions")),
5253
?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_logged_transactions")),
5354
?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_restarted_transactions")),
55+
?assertMatch(nomatch, re:run(Metrics, "erlang_mnesia_memory_usage_bytes")),
5456
application:unset_env(prometheus,mnesia_collector_metrics,[]).
5557

5658
test_mnesia_on_collector() ->
@@ -63,7 +65,8 @@ test_mnesia_on_collector() ->
6365
?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_failed_transactions")),
6466
?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_committed_transactions")),
6567
?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_logged_transactions")),
66-
?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_restarted_transactions")).
68+
?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_restarted_transactions")),
69+
?assertMatch({match,_}, re:run(Metrics, "erlang_mnesia_memory_usage_bytes")).
6770

6871
test_mnesia_on_collector_global_labels() ->
6972
Metrics = try

0 commit comments

Comments
 (0)