Packages
prometheus
2.2.0
6.1.3
6.1.2
6.1.1
6.1.0
6.0.3
6.0.2
6.0.1
6.0.0
5.1.1
5.1.0
5.0.0
4.13.0
retired
4.12.0
4.11.0
4.10.0
4.9.1
4.9.0
4.8.2
4.8.1
4.8.0
4.6.0
4.5.0
4.4.1
4.4.0
4.3.0
4.2.2
4.2.0
4.1.0
4.0.1
4.0.0
3.5.1
3.5.0
3.4.6
3.4.5
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0
3.3.2
3.3.1
3.3.0
3.2.3
3.2.2
3.2.1
3.1.1
3.1.0
3.0.1
3.0.0
3.0.0-rc1
3.0.0-alpha9
3.0.0-alpha8
3.0.0-alpha7
3.0.0-alpha6
3.0.0-alpha5
3.0.0-alpha4
3.0.0-alpha3
3.0.0-alpha2
3.0.0-alpha10
3.0.0-alpha1
2.2.0
2.1.0
2.0.0
1.7.0
1.6.0
1.5.0
1.0.2
1.0.1
1.0.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Prometheus.io client in Erlang
Current section
Files
Jump to
Current section
Files
src/collectors/vm/prometheus_vm_memory_collector.erl
-module(prometheus_vm_memory_collector).
-export([deregister_cleanup/1,
collect_mf/2,
collect_metrics/2]).
-import(prometheus_model_helpers, [create_mf/5,
label_pairs/1,
gauge_metrics/1,
gauge_metric/1,
gauge_metric/2,
counter_metric/1,
counter_metric/2]).
-include("prometheus.hrl").
-behaviour(prometheus_collector).
%%====================================================================
%% Collector API
%%====================================================================
deregister_cleanup(_) -> ok.
-spec collect_mf(prometheus_collector:callback(), atom()) -> ok.
collect_mf(Callback, _Registry) ->
Memory = erlang:memory(),
Callback(create_gauge(erlang_vm_memory_bytes_total,
"The total amount of memory currently allocated. "
"This is the same as the sum of the memory size "
"for processes and system.",
Memory)),
Callback(create_gauge(erlang_vm_memory_processes_bytes_total,
"The total amount of memory currently allocated "
"for the Erlang processes.",
Memory)),
Callback(create_gauge(erlang_vm_memory_system_bytes_total,
"The total amount of memory currently allocated "
"for the emulator that is not directly related "
"to any Erlang process. Memory presented as processes "
"is not included in this memory.",
Memory)),
Callback(create_gauge(erlang_vm_memory_atom_bytes_total,
"The total amount of memory currently allocated "
"for atoms. This memory is part of the memory "
"presented as system memory.",
Memory)),
Callback(create_gauge(erlang_vm_ets_tables,
"Erlang VM ETS Tables count",
Memory)),
Callback(create_gauge(erlang_vm_dets_tables,
"Erlang VM DETS Tables count",
Memory)).
collect_metrics(erlang_vm_memory_bytes_total, Memory) ->
gauge_metrics([
{[{kind, system}], proplists:get_value(system, Memory)},
{[{kind, processes}], proplists:get_value(processes, Memory)}
]);
collect_metrics(erlang_vm_memory_processes_bytes_total, Memory) ->
gauge_metrics([
{[{usage, used}], proplists:get_value(processes_used, Memory)},
{[{usage, free}],
proplists:get_value(processes, Memory)
- proplists:get_value(processes_used, Memory)}
]);
collect_metrics(erlang_vm_memory_system_bytes_total, Memory) ->
gauge_metrics([
{[{usage, atom}], proplists:get_value(atom, Memory)},
{[{usage, binary}], proplists:get_value(binary, Memory)},
{[{usage, code}], proplists:get_value(code, Memory)},
{[{usage, ets}], proplists:get_value(ets, Memory)},
{[{usage, other}], memory_other(Memory)}
]);
collect_metrics(erlang_vm_memory_atom_bytes_total, Memory) ->
gauge_metrics([
{[{usage, used}], proplists:get_value(atom_used, Memory)},
{[{usage, free}],
proplists:get_value(atom, Memory)
- proplists:get_value(atom_used, Memory)}
]);
collect_metrics(erlang_vm_ets_tables, _MFData) ->
gauge_metric(length(ets:all()));
collect_metrics(erlang_vm_dets_tables, _MFData) ->
gauge_metric(length(dets:all())).
%%====================================================================
%% Private Parts
%%====================================================================
memory_other(Memory) ->
proplists:get_value(system, Memory)
- proplists:get_value(atom, Memory)
- proplists:get_value(binary, Memory)
- proplists:get_value(code, Memory)
- proplists:get_value(ets, Memory).
-spec create_gauge(Name, Help, Data) -> prometheus_model:'MetricFamily'() when
Name :: atom(),
Help :: string(),
Data :: prometheus_collector:data().
create_gauge(Name, Help, Data) ->
create_mf(Name, Help, gauge, ?MODULE, Data).