Resiliency.Telemetry (Resiliency v0.6.0)

Copy Markdown View Source

Telemetry events emitted by the Resiliency library.

All events follow the standard :telemetry span convention where applicable: [:resiliency, :module, :action, :start | :stop | :exception]. Point events (non-span) are emitted for significant occurrences like retries, hedges, rejections, and state changes.

Every event is emitted in the caller's process except where noted. Attaching handlers has zero impact on server throughput for caller-emitted events. The state_change event for CircuitBreaker is emitted inside the GenServer process.

BackoffRetry

EventTypeMeasurementsMetadata
[:resiliency, :retry, :start]span%{system_time: integer}%{max_attempts: integer}
[:resiliency, :retry, :stop]span%{duration: integer}%{max_attempts: integer, attempts: integer, result: :ok | :error}
[:resiliency, :retry, :exception]span%{duration: integer}%{max_attempts: integer, attempts: integer, kind: atom, reason: term, stacktrace: list}
[:resiliency, :retry, :retry]point%{delay: integer}%{attempt: integer, error: term}

CircuitBreaker

EventTypeMeasurementsMetadata
[:resiliency, :circuit_breaker, :call, :start]span%{system_time: integer}%{name: term}
[:resiliency, :circuit_breaker, :call, :stop]span%{duration: integer}%{name: term, result: :ok | :error, error: term | nil}
[:resiliency, :circuit_breaker, :call, :rejected]point%{}%{name: term}
[:resiliency, :circuit_breaker, :state_change]point%{}%{name: term, from: atom, to: atom}

Bulkhead

EventTypeMeasurementsMetadata
[:resiliency, :bulkhead, :call, :start]span%{system_time: integer}%{name: term}
[:resiliency, :bulkhead, :call, :stop]span%{duration: integer}%{name: term, result: :ok | :error, error: term | nil}
[:resiliency, :bulkhead, :call, :rejected]point%{}%{name: term}
[:resiliency, :bulkhead, :call, :permitted]point%{}%{name: term}

Hedged

EventTypeMeasurementsMetadata
[:resiliency, :hedged, :run, :start]span%{system_time: integer}%{mode: :stateless | :adaptive}
[:resiliency, :hedged, :run, :stop]span%{duration: integer}%{mode: atom, result: :ok | :error, dispatched: integer, hedged: boolean}
[:resiliency, :hedged, :hedge]point%{}%{attempt: integer}

SingleFlight

EventTypeMeasurementsMetadata
[:resiliency, :single_flight, :flight, :start]span%{system_time: integer}%{name: term, key: term}
[:resiliency, :single_flight, :flight, :stop]span%{duration: integer}%{name: term, key: term, result: :ok | :error, shared: boolean}
[:resiliency, :single_flight, :flight, :exception]span%{duration: integer}%{name: term, key: term, kind: atom, reason: term, stacktrace: list}

WeightedSemaphore

EventTypeMeasurementsMetadata
[:resiliency, :semaphore, :acquire, :start]span%{system_time: integer}%{name: term, weight: integer}
[:resiliency, :semaphore, :acquire, :stop]span%{duration: integer}%{name: term, weight: integer, result: :ok | :error | :rejected}
[:resiliency, :semaphore, :acquire, :rejected]point%{}%{name: term, weight: integer}

Race

EventTypeMeasurementsMetadata
[:resiliency, :race, :run, :start]span%{system_time: integer}%{count: integer}
[:resiliency, :race, :run, :stop]span%{duration: integer}%{count: integer, result: :ok | :error}
[:resiliency, :race, :run, :exception]span%{duration: integer}%{count: integer, kind: atom, reason: term, stacktrace: list}

AllSettled

EventTypeMeasurementsMetadata
[:resiliency, :all_settled, :run, :start]span%{system_time: integer}%{count: integer}
[:resiliency, :all_settled, :run, :stop]span%{duration: integer}%{count: integer, ok_count: integer, error_count: integer}
[:resiliency, :all_settled, :run, :exception]span%{duration: integer}%{count: integer, kind: atom, reason: term, stacktrace: list}

Map

EventTypeMeasurementsMetadata
[:resiliency, :map, :run, :start]span%{system_time: integer}%{count: integer, max_concurrency: integer}
[:resiliency, :map, :run, :stop]span%{duration: integer}%{count: integer, max_concurrency: integer, result: :ok | :error}
[:resiliency, :map, :run, :exception]span%{duration: integer}%{count: integer, max_concurrency: integer, kind: atom, reason: term, stacktrace: list}

FirstOk

EventTypeMeasurementsMetadata
[:resiliency, :first_ok, :run, :start]span%{system_time: integer}%{count: integer}
[:resiliency, :first_ok, :run, :stop]span%{duration: integer}%{count: integer, result: :ok | :error, attempts: integer}
[:resiliency, :first_ok, :run, :exception]span%{duration: integer}%{count: integer, kind: atom, reason: term, stacktrace: list}

RateLimiter

EventTypeMeasurementsMetadata
[:resiliency, :rate_limiter, :call, :start]span%{system_time: integer}%{name: term}
[:resiliency, :rate_limiter, :call, :stop]span%{duration: integer}%{name: term, result: :ok | :error, error: term | nil}
[:resiliency, :rate_limiter, :call, :rejected]point%{retry_after: integer}%{name: term}