50ed370444
Initial approach follows Ecto instrumentation, recording spans for all
Redix `[:redix, :pipeline, :stop]` events.
The command sanitization is inspired-by and adapted from [Java
instrumentation][1], from where I've also copied the actual commands and
what configuration should they follow.
Network attributes are tracked via a "sidecar" process, which keeps
track of connection attributes also via `telemetry`. This extra bit of
bookkeeping is needed as command events doesn't include that piece of
information, unfortunately.
[1]:
|
||
---|---|---|
.. | ||
config | ||
lib | ||
test | ||
.formatter.exs | ||
.gitignore | ||
CHANGELOG.md | ||
LICENSE | ||
README.md | ||
docker-compose.yml | ||
mix.exs | ||
mix.lock |
README.md
OpentelemetryRedix
OpentelemetryRedix uses telemetry handlers to
create OpenTelemetry
spans from Redix command events.
Supported events include command stop. Connection and disconnection events are also observed to track Redis instance address.
Note on Redix integration
A sidecar process runs under opentelemetry_redix
application to track
Redix connection information to inside command spans. As a requirement, all
Redis connections should start after this application.
For connections started by your application, all works as expected. But some
libraries manage internally, and for those cases, you need to ensure proper
order via extra_applications
.
One such example is hammer_backend_redis.
In case you depend on that library, extra_applications
will be similar
to the following:
def application do
[
extra_applications: [:opentelemetry_redix, :hammer_backend_redis]
]
end
Installation
The package can be installed by adding opentelemetry_redix
to your list of
dependencies in mix.exs
:
def deps do
[
{:opentelemetry_redix, "~> 0.1"}
]
end
Compatibility Matrix
OpentelemetryRedix Version | Otel Version | Notes |
---|---|---|
v0.1.0 | v1.0.0 |
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/opentelemetry_redix.