TelemetryRegistry is a library for Telemetry event declaration, discovery, and registration. Events
are declared using the module attribute telemetry_event
and include a description of the event,
measurements, and metadata.
The Registry works by walking an application tree and examining every module for Telemetry Event definitions when invoking the discovery feature.
-telemetry_event #{
event => [test_app, handler, start],
description => <<"Emitted at the start of the handler">>,
measurements => <<"#{system_time => non_neg_integer()}">>,
metadata => <<"#{}">>
}.
-telemetry_event #{
event => [test_app, handler, stop],
description => <<"Emitted at the end of the handler">>,
measurements => <<"#{duration => non_neg_integer()}">>,
metadata => <<"#{}">>
}.
-telemetry_event #{
event => [test_app, handler, exception],
description => <<"The handler raised an exception">>,
measurements => <<"#{duration => non_neg_integer()}">>,
metadata => <<"#{kind => atom(), reason => atom(), stacktrace => term()}">>
}.
After the applications are loaded, simply run
telemetry_registry:discover_all(my_app).
Or if you want to load all applications loaded in current VM then you can use:
telemetry_registry:discover_all().
The defined events can be accessed using list_events/0
. Events are returned as a list of
three element tuples of {Event, Module, Meta}
where Event
is the event name, Module
is the
module it was discovered in, and Meta is the event definition metadata.
telemetry_registry:list_events().
Tracing spans need at least a matching start
and stop
event to create a child span.
Optionally, a exception
event can be emitted in the case of an exception being raised.
spannable_events/0
returns a proplist of all matching (spannable) events that have been
discovered. These are returned as a proplist with keys being the event prefix and the value
being a list of the available events, e.g. [{[test_app,handler], [start,stop,exception]}]
.
telemetry_registry:spannable_events().
%% [{[test_app,handler], [start,stop,exception]}]
A variety of macros to assist with event declaration and generating telemetry event documentation are available. Please refer to the HexDocs for more information.
def deps do
[
{:telemetry_registry, "~> 0.3"}
]
end
Copyright 2020 Bryan Naegele
TelemetryRegistry source code is released under Apache License, Version 2.0.