A collector for a set of metrics.
This module defines the prometheus_collector
behaviour.
Required callback functions: collect_mf/2
, deregister_cleanup/1
.
Normal users should use prometheus_gauge
,
prometheus_counter
, prometheus_summary
and prometheus_histogram
.
Implementing :prometheus_collector
behaviour is for advanced uses
such as proxying metrics from another monitoring system.
It is it the responsibility of the implementer to ensure produced metrics
are valid.
You will be working with Prometheus
data model directly (see prometheus_model_helpers
).
Callbacks:
collect_mf(Registry, Callback)
- called by exporters and formats. Should callCallback
for eachMetricFamily
of this collector;collect_metrics(Name, Data)
- called byMetricFamily
constructor. Should return Metric list for each MetricFamily identified byName
.Data
is a term associated with MetricFamily by collect_mf.deregister_cleanup(Registry)
- called when collector unregistered byRegistry
. If collector is stateful you can put cleanup code here.
Example (simplified prometheus_vm_memory_collector
):
-module(prometheus_vm_memory_collector).
-export([deregister_cleanup/1,
collect_mf/2,
collect_metrics/2]).
-behaviour(prometheus_collector).
%%====================================================================
%% Collector API
%%====================================================================
deregister_cleanup(_) -> ok.
collect_mf(_Registry, Callback) ->
Memory = erlang:memory(),
Callback(create_gauge(erlang_vm_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)),
ok.
collect_metrics(erlang_vm_bytes_total, Memory) ->
prometheus_model_helpers:gauge_metrics(
[
{[{kind, system}], proplists:get_value(system, Memory)},
{[{kind, processes}], proplists:get_value(processes, Memory)}
]).
%%====================================================================
%% Private Parts
%%====================================================================
create_gauge(Name, Help, Data) ->
prometheus_model_helpers:create_mf(Name, Help, gauge, ?MODULE, Data).
collect_mf_callback() = fun((prometheus_model:'MetricFamily'()) -> any())
collector() = atom()
data() = any()
collect_mf/3 | Calls Callback for each MetricFamily of this collector. |
collect_mf(Registry, Collector, Callback) -> ok
Registry = prometheus_registry:registry()
Collector = collector()
Callback = collect_mf_callback()
Calls Callback
for each MetricFamily of this collector.