Skip to content

Pachka-powered telemetry reporter for Elixir that batches client-side events, supports pluggable transports and :telemetry forwarding, and drains reliably on shutdown.

Notifications You must be signed in to change notification settings

nshkrdotcom/telemetry_reporter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:

  • :transport - module implementing TelemetryReporter.Transport (required)
  • :transport_opts - options passed to the transport (default: [])
  • :event_encoder - encode events before delivery (default: TelemetryReporter.Event.encode/1)
  • :retry_backoff - backoff strategy or function (default: {:linear, 1_000})

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]:

  • [:telemetry_reporter, :event, :dropped]
  • [:telemetry_reporter, :event, :encode_error]
  • [:telemetry_reporter, :batch, :sent]
  • [:telemetry_reporter, :batch, :failed]

Docs

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

About

Pachka-powered telemetry reporter for Elixir that batches client-side events, supports pluggable transports and :telemetry forwarding, and drains reliably on shutdown.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages