RedisCluster.Telemetry (redis_cluster v0.8.0)

View Source

Telemetry integration for Redis cluster operations.

This module provides functions to emit telemetry events for various Redis cluster operations including:

  • Redis command execution (get, set, delete, etc.)
  • Pipeline operations
  • Cluster discovery and resharding
  • Connection management
  • Error tracking

Events

The following telemetry events are emitted:

Command Events

  • [:redis_cluster, :command, :start] - Before executing a Redis command
  • [:redis_cluster, :command, :stop] - After successful command execution
  • [:redis_cluster, :command, :exception] - When a command raises an exception

Pipeline Events

  • [:redis_cluster, :pipeline, :start] - Before executing a pipeline
  • [:redis_cluster, :pipeline, :stop] - After successful pipeline execution
  • [:redis_cluster, :pipeline, :exception] - When a pipeline raises an exception

Cluster Events

  • [:redis_cluster, :cluster, :discovery, :start] - Before cluster discovery
  • [:redis_cluster, :cluster, :discovery, :stop] - After cluster discovery
  • [:redis_cluster, :cluster, :rediscovery] - When cluster is rediscovered due to MOVED errors

Connection Events

  • [:redis_cluster, :connection, :acquired] - When a connection is acquired from pool

Redirect Events

  • [:redis_cluster, :redirect, :moved] - When a MOVED redirect occurs
  • [:redis_cluster, :redirect, :ask] - When a ASK redirect occurs

Example Usage

# Basic telemetry handler
:telemetry.attach(
  "redis-cluster-handler",
  [:redis_cluster, :command, :stop],
  &MyApp.TelemetryHandler.handle_command/4,
  nil
)

# Using [`telemetry_metrics`](https://hex.pm/packages/telemetry_metrics)
Telemetry.Metrics.counter("redis_cluster.command.stop.count", tags: [:command_name])
Telemetry.Metrics.distribution("redis_cluster.command.stop.duration",
  unit: {:native, :millisecond}
)

Summary

Functions

Emits a telemetry event when a ASK redirect occurs.

Emits a telemetry event when the cluster needs to be rediscovered due to MOVED errors.

Emits telemetry events for cluster statistics.

Emits a telemetry event when a connection is acquired from the pool.

Emits a simple telemetry event without timing.

Emits a telemetry event for Redis command execution.

Emits a telemetry event for cluster discovery operations.

Emits a telemetry event for Redis pipeline execution.

Emits a telemetry event when a MOVED redirect occurs.

Executes a telemetry event for a Redis command with timing.

Functions

ask_redirect(metadata \\ %{})

@spec ask_redirect(metadata :: map()) :: :ok

Emits a telemetry event when a ASK redirect occurs.

cluster_rediscovery(metadata \\ %{})

@spec cluster_rediscovery(metadata :: map()) :: :ok

Emits a telemetry event when the cluster needs to be rediscovered due to MOVED errors.

cluster_stats(stats, metadata \\ %{})

@spec cluster_stats(stats :: map(), metadata :: map()) :: :ok

Emits telemetry events for cluster statistics.

connection_acquired(metadata \\ %{})

@spec connection_acquired(metadata :: map()) :: :ok

Emits a telemetry event when a connection is acquired from the pool.

execute(event, measurements \\ %{}, metadata \\ %{})

@spec execute(event :: [atom()], measurements :: map(), metadata :: map()) :: :ok

Emits a simple telemetry event without timing.

execute_command(command, metadata, fun)

@spec execute_command(
  command :: [String.t()],
  metadata :: map(),
  fun :: (-> result)
) :: result
when result: any()

Emits a telemetry event for Redis command execution.

execute_discovery(metadata, fun)

@spec execute_discovery(
  metadata :: map(),
  fun :: (-> result)
) :: result
when result: any()

Emits a telemetry event for cluster discovery operations.

execute_pipeline(commands, metadata, fun)

@spec execute_pipeline(
  commands :: [[String.t()]],
  metadata :: map(),
  fun :: (-> result)
) :: result
when result: any()

Emits a telemetry event for Redis pipeline execution.

moved_redirect(metadata \\ %{})

@spec moved_redirect(metadata :: map()) :: :ok

Emits a telemetry event when a MOVED redirect occurs.

span(event, metadata, fun)

@spec span(
  event :: [atom()],
  metadata :: map(),
  fun :: (-> result)
) :: result
when result: any()

Executes a telemetry event for a Redis command with timing.