Column.Telemetry (Column v1.0.0)

Copy Markdown View Source

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.

Functions

attach_logger(level \\ :debug)

@spec attach_logger(Logger.level()) :: :ok | {:error, :already_exists}

A simple built-in logger handler for development. Attach with Column.Telemetry.attach_logger/1.

emit_retry(method, path, status, delay_ms)

@spec emit_retry(atom(), String.t(), non_neg_integer(), non_neg_integer()) :: :ok

Emit a telemetry retry event.

start(method, path, attempt)

@spec start(atom(), String.t(), non_neg_integer()) :: integer()

Emit a telemetry start event.

stop(start_time, method, path, attempt, status, result)

@spec stop(
  integer(),
  atom(),
  String.t(),
  non_neg_integer(),
  non_neg_integer() | nil,
  atom()
) :: :ok

Emit a telemetry stop event.