I have created two github projects to demonstrate using OpenTelemetry (admittedly badly).
The first project https://github.com/chriseyre2000/something_to_measure is a simple GenServer that has a method that can be used to generate OpenTelemetry Spans.
The second project https://github.com/chriseyre2000/span_eater is a simple GenServer that consumes spans on the default port that OpenTelemetry sends them on.
In production you would typically have a sidecar application to capture and rebroadcast the messages.
In OpenTelemetry terms a Span is a time interval during which a given process ran. These can be nested. The result is that an Observability tool could capture the spans and construct a visualisation of what was happening. Spans are more useful than raw log data as it has a controlled meaning which would need to be inferred.
span_eater currently just logs that it has received the message. I am planning to make it more sophisticated, and then build a LiveBook to host it in. Currently it is useful to remove the log messages that otherwise get generated:
`
[info] client error exporting spans {:failed_connect,
[{:to_address, {'localhost', 4318}}, {:inet, [:inet], :econnrefused}]}
These messages typically flood the logs of a locally run application that is instrumented to publish OpenTelemetry data
I have just worked out how to decode the Protobuf data sent over the wire. We can now listen to OpenTelemetry messages sent by our local machine.