Redix v1.0.0 Redix.Telemetry View Source

Telemetry integration for event tracing, metrics, and logging.

Redix connections (both Redix and Redix.PubSub) execute the following Telemetry events:

  • [:redix, :connection] - executed when a Redix connection establishes the connection to Redis. There are no measurements associated with this event. Metadata are:

    • :connection - the PID of the Redix connection that emitted the event.
    • :connection_name - the name (passed to the :name option when the connection is started) of the Redix connection that emitted the event. nil if the connection was not registered with a name.
    • :address - the address the connection successfully connected to.
    • :reconnection - a boolean that specifies whether this was a first connection to Redis or a reconnection after a disconnection. This can be useful for more granular logging.
  • [:redix, :disconnection] - executed when the connection is lost with the Redis server. There are no measurements associated with this event. Metadata are:

    • :connection - the PID of the Redix connection that emitted the event.
    • :connection_name - the name (passed to the :name option when the
    • :address - the address the connection was connected to. connection is started) of the Redix connection that emitted the event. nil if the connection was not registered with a name.
    • :reason - the disconnection reason as a Redix.ConnectionError struct.
  • [:redix, :failed_connection] - executed when Redix can't connect to the specified Redis server, either when starting up the connection or after a disconnection. There are no measurements associated with this event. Metadata are:

    • :connection - the PID of the Redix connection that emitted the event.
    • :connection_name - the name (passed to the :name option when the connection is started) of the Redix connection that emitted the event. nil if the connection was not registered with a name.
    • :address or :sentinel_address - the address the connection was trying to connect to (either a Redis server or a Redis Sentinel instance).
    • :reason - the disconnection reason as a Redix.ConnectionError struct.

Redix connections execute the following Telemetry events when commands or pipelines of any kind are executed.

  • [:redix, :pipeline, :start] - executed right before a pipeline (or command, which is a pipeline with just one command) is sent to the Redis server. Measurements are:

    • :system_time (integer) - the system time (in the :native time unit) at the time the event is emitted. See System.system_time/0.

    Metadata are:

    • :connection - the PID of the Redix connection used to send the pipeline.
    • :connection_name - the name of the Redix connection used to sent the pipeline. This is nil if the connection was not registered with a name or if the pipeline function was called with a PID directly (for example, if you did Process.whereis/1 manually).
    • :commands - the commands sent to the server. This is always a list of commands, so even if you do Redix.command(conn, ["PING"]) then the list of commands will be [["PING"]].
  • [:redix, :pipeline, :stop] - executed a response to a pipeline returns from the Redis server, regardless of whether it's an error response or a successful response. Measurements are:

    • :duration - the duration (in the :native time unit, see System.time_unit/0) of back-and-forth between client and server.

    Metadata are:

    • :connection - the PID of the Redix connection used to send the pipeline.
    • :connection_name - the name of the Redix connection used to sent the pipeline. This is nil if the connection was not registered with a name or if the pipeline function was called with a PID directly (for example, if you did Process.whereis/1 manually).
    • :commands - the commands sent to the server. This is always a list of commands, so even if you do Redix.command(conn, ["PING"]) then the list of commands will be [["PING"]].

    If the response is an error, the following metadata will also be present:

More events might be added in the future and that won't be considered a breaking change, so if you're writing a handler for Redix events be sure to ignore events that are not known. All future Redix events will start with the :redix atom, like the ones above.

A default handler that logs these events appropriately is provided, see attach_default_handler/0. Otherwise, you can write your own handler to instrument or log events, see the Telemetry page in the docs.

Link to this section Summary

Functions

Attaches the default Redix-provided Telemetry handler.

Link to this section Functions

Link to this function

attach_default_handler()

View Source
attach_default_handler() :: :ok | {:error, :already_exists}

Attaches the default Redix-provided Telemetry handler.

This function attaches a default Redix-provided handler that logs (using Elixir's Logger) the following events:

  • [:redix, :disconnection] - logged at the :error level
  • [:redix, :failed_connection] - logged at the :error level
  • [:redix, :connection] - logged at the :info level if it's a reconnection, not logged if it's the first connection.

See the module documentation for more information. If you want to attach your own handler, look at the Telemetry page in the documentation.

Examples

:ok = Redix.Telemetry.attach_default_handler()