Awesome
Observability Working Group
Project for tracking the work of the Observability Working Group
Current WG projects
Awesome BEAM Observability
The curated list of tools for monitoring, instrumenting, and tracing applications that run on BEAM. Inspired by many of such lists over the GitHub.
Blog posts
Logging
lager
- popular logging framework with broad features setlogger
- OTP 21+ built-in pluggable logger moduleLogger
- Elixir's built-in pluggable logger module that in recent Elixir versions also synchronises with Erlang'slogger
modulesystemd
- library for integrating with systemd, it provides utilities for integrating with systemd's journal
Metrics
Recommended
- OpenTelemetry - implementation of CNCF OpenTelemetry for Erlang and Elixir
- Prometheus - Prometheus integration for Erlang
- Telemetry - dynamic dispatcher for Erlang metrics and instrumentations
- Telemetry.Poller - periodically gather measurements and publish them as Telemetry events
- Telemetry.Metrics - common interface for defining metrics based on :telemetry events.
- TelemetryMetricsStatsd - StatsD compatible Telemetry.Metrics reporter.
- TelemetryMetricsPrometheus - Prometheus compatible Telemetry.Metrics reporter.
- TelemetryMetricsZabbix - Zabbix compatible Telemetry.Metrics reporter.
- PromEx - A library used to monitor your Elixir applications using telemetry, Prometheus and pre-packaged Grafana dashboards.
plug_telemetry_server_timings
- addtelemetry
metrics toplug
response asServer-Timing
header.
Other
- beam_stats - Collect detailed VM metrics and send to arbitrary, plugable backends (StatsD and Graphite backends included).
- Fluxter - InfluxDB writer for Elixir
- Statix - fast and reliable Elixir client for StatsD-compatible servers with some DogStatsD extensions (namely tags)
- vmstats - tiny Erlang app to generate information on the Erlang VM
Historical
Over the many years of Erlang and Elixir's existence many libraries for metric collection have been created. However, expectations for modern metric gathering and reporting has changed during this time. The follow libraries are still used and do their job well, but they lack features like tags that are important for adding additional dimensions to metrics, which gives the user more control over aggregation. See the Datadog article, The Power of Tagged Metrics, for more on the importance of tagging metrics.
- Elixometer - thin Elixir wrapper over Exometer
- Exometer - Erlang instrumentation package
- Folsom - expose Erlang events as metrics
metrics
- generic interface to to a different metrics systems in Erlang
Tracing
Recommended
- OpenTelemetry - The combined effort of OpenTracing and OpenCensus communities. OpenTelemetry is a CNCF project that will replace both OpenTracing and OpenCensus.
Or for vendor specific solutions see:
- AppSignal - AppSignal Elixir integration package for gathering metrics, errors, and traces
- New Relic - New Relic's Elixir agent supports metrics, errors and distributed tracing
Other Implementations
OpenCenus(ON HOLD, see OpenTelemetry) - implementation of Google's OpenCensus.io tracing and monitoring with broad range of integrations:- Otter - OpenTracing (see OpenTelemetry) integration library for Erlang
Spandex(ON HOLD, see OpenTelemetry) - tracing library for Elixir which supports DataDog APM. Integrations:- tracelog - logging handler that can transform structured logs into distributed tracing spans (for now supports only OpenCensus backend library)
Error logging
- Aibrakex - Elixir client for Airbrake
- Bugsnag - Elixir interface to Bugsnag API
- Rollbar - exception tracking and logging from Elixir to Rollbar
- Sentry - official Elixir SDK for Sentry.io
License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.