TelemetryReporter

TelemetryReporter

TelemetryReporter is a transport-agnostic telemetry batching library for Elixir/BEAM apps. It uses Pachka for size and time based flushing, drops on overload to protect producers, and isolates encoding failures so a single bad event never poisons a batch.

Installation

Add telemetry_reporter to your dependencies:

def deps do
  [
    {:telemetry_reporter, "~> 0.1.0"}
  ]
end

Quick Start

Define a transport:

defmodule MyApp.TelemetryTransport do
  @behaviour TelemetryReporter.Transport

  @impl true
  def send_batch(events, _opts) do
    # Deliver encoded events to your backend.
    :ok
  end
end

Start the reporter and log events:

{:ok, _pid} =
  TelemetryReporter.start_link(
    name: MyReporter,
    transport: MyApp.TelemetryTransport,
    max_batch_size: 200,
    max_batch_delay: :timer.seconds(2)
  )

:ok = TelemetryReporter.log(MyReporter, "user.login", %{user_id: "123"}, :info)

Configuration

TelemetryReporter options:

All other options are forwarded to Pachka.start_link/1 (such as max_batch_size, max_batch_delay, critical_queue_size, and export_timeout).

Telemetry Adapter

Forward :telemetry events into TelemetryReporter:

handler_id =
  TelemetryReporter.TelemetryAdapter.attach_many(
    reporter: MyReporter,
    events: [[:my_app, :http, :request, :stop]],
    severity: :info
  )

# Later...
TelemetryReporter.TelemetryAdapter.detach(handler_id)

Telemetry Events

TelemetryReporter emits telemetry events with prefix [:telemetry_reporter]:

Docs

See docs/usage.md for advanced usage, encoder details, and retry backoff configuration.

License

MIT — see LICENSE for details.