Packages

Monitoring based on Telemetry + Prometheus

Current section

Files

Jump to
teleprom src handlers teleprom_default_handler.erl
Raw

src/handlers/teleprom_default_handler.erl

-module(teleprom_default_handler).
-export([init/1, register_metrics/0, handle_event/4]).
-include_lib("eunit/include/eunit.hrl").
-include("telemetry.hrl").
-define(HANDLER_NAME, <<"teleprom-default-handler">>).
%% =============================================================================
%% 1. init
%% =============================================================================
init(#{apps := Apps} = _Params) ->
Events = get_events(Apps, []),
teleprom:detach_handler(?HANDLER_NAME),
ok =
teleprom:attach_handler(
?HANDLER_NAME,
Events,
fun teleprom_default_handler:handle_event/4,
[]
),
prometheus_counter:inc(telemetry_registered_events_total, length(Events)),
ok.
%% =============================================================================
%% 2. register prometheus metrics
%% =============================================================================
register_metrics() ->
% Счетчик всех доступных в системе событий
prometheus_counter:declare(
[{name, telemetry_registered_events_total}, {help, "Telemetry registered events count"}]
),
% Счетчик исполненных событий
prometheus_counter:declare(
[{name, telemetry_received_events_total}, {help, "Telemetry received events total count"}]
),
% Счетчик исполненных событий по каждому событию
prometheus_counter:declare(
[{name, telemetry_event}, {labels, [event]}, {help, "Telemetry received events count"}]
),
ok.
%% =============================================================================
%% 3. handle event
%% =============================================================================
handle_event(Event, _Measurements, _Metadata, _Config) ->
prometheus_counter:inc(telemetry_received_events_total),
prometheus_counter:inc(telemetry_event, [teleprom_tools:event_to_string(Event)]),
ok.
%% =============================================================================
%% internal
%% =============================================================================
get_events([], Events) -> Events;
get_events([App | Apps], Events) ->
AppEvents = ?GET_APP_EVENTS(App, all),
get_events(Apps, AppEvents ++ Events).