Telemetry integration for the Column HTTP client.
The Column client emits the following :telemetry events:
[:column, :request, :start]
Emitted before each HTTP request is dispatched.
Measurements: %{system_time: integer()}
Metadata: %{method: atom(), path: String.t(), attempt: non_neg_integer()}
[:column, :request, :stop]
Emitted after a successful or failed HTTP request.
Measurements: %{duration: integer()} (in native time units)
Metadata:
%{
method: atom(),
path: String.t(),
status: non_neg_integer() | nil,
attempt: non_neg_integer(),
result: :ok | :error,
error_type: atom() | nil
}[:column, :request, :exception]
Emitted when an unexpected exception occurs in the client pipeline.
Measurements: %{duration: integer()}
Metadata: %{method: atom(), path: String.t(), kind: atom(), reason: term()}
[:column, :retry]
Emitted each time a request is retried due to a transient error.
Measurements: %{attempt: non_neg_integer(), delay_ms: non_neg_integer()}
Metadata: %{method: atom(), path: String.t(), status: non_neg_integer()}
Setup
Attach handlers in your application start:
:telemetry.attach_many(
"column-logger",
[
[:column, :request, :start],
[:column, :request, :stop],
[:column, :retry]
],
&Column.Telemetry.handle_event/4,
%{}
)Integration with telemetry_metrics
[
Telemetry.Metrics.counter("column.request.stop.count",
tags: [:method, :status, :result]
),
Telemetry.Metrics.distribution("column.request.stop.duration",
unit: {:native, :millisecond},
tags: [:method, :result]
),
Telemetry.Metrics.counter("column.retry.count",
tags: [:method, :status]
)
]
Summary
Functions
A simple built-in logger handler for development. Attach with Column.Telemetry.attach_logger/1.
Emit a telemetry retry event.
Emit a telemetry start event.
Emit a telemetry stop event.
Functions
@spec attach_logger(Logger.level()) :: :ok | {:error, :already_exists}
A simple built-in logger handler for development. Attach with Column.Telemetry.attach_logger/1.
@spec emit_retry(atom(), String.t(), non_neg_integer(), non_neg_integer()) :: :ok
Emit a telemetry retry event.
@spec start(atom(), String.t(), non_neg_integer()) :: integer()
Emit a telemetry start event.
@spec stop( integer(), atom(), String.t(), non_neg_integer(), non_neg_integer() | nil, atom() ) :: :ok
Emit a telemetry stop event.