Telemetry Registry
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.
How It Works
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()}">>
}.Add the Registry to Your Application
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().Viewing Events
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().Spannable 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]}]Elixir Users
A variety of macros to assist with event declaration and generating telemetry event documentation are available. Please refer to the HexDocs for more information.
Dependency in Elixir
def deps do
[
{:telemetry_registry, "~> 0.2.0"}
]
endCopyright 2020 Bryan Naegele
TelemetryRegistry source code is released under Apache License, Version 2.0.