defmodule ExampleApp.Metrics do use OtelBridge.Spec @impl OtelBridge.Spec def metrics(meta) do [ summary("example.http.duration", event_name: [:example_app, :http, :stop], measurement: :duration, unit: {:native, :millisecond}, tags: [:route, :status_code], tag_values: fn metadata -> metadata |> Map.put(:route, metadata[:route] || "unknown") |> Map.put(:status_code, metadata[:status_code] || 500) |> Map.put(:service, Keyword.fetch!(meta, :service)) end ), counter("example.http.requests", event_name: [:example_app, :http, :stop], tags: [:route, :status_code], tag_values: fn metadata -> metadata |> Map.put(:route, metadata[:route] || "unknown") |> Map.put(:status_code, metadata[:status_code] || 500) end ), last_value("example.queue.depth", event_name: [:example_app, :queue, :stats], measurement: :depth, tags: [:queue], reporter_options: [ otel: [ last_value: [ ttl_ms: 300_000, max_series: 100, on_overflow: :drop_new ] ] ] ) ] end end defmodule ExampleApp.Measurements do def dispatch_queue_depth do :telemetry.execute( [:example_app, :queue, :stats], %{depth: 42}, %{queue: "default"} ) end end children = [ {OtelBridge, specs: [ExampleApp.Metrics], measurements: [{ExampleApp.Measurements, :dispatch_queue_depth, []}], meta: [service: "example_app"], poller: [period: 5_000]} ]