Monitoring Go Redis Performance and Errors

What is OpenTelemetry?

OpenTelemetryopen in new window is an open-source observability framework for distributed tracingopen in new window (including logs and errors) and OpenTelemetry metricsopen in new window.

Otel allows developers to collect and export telemetry data in a vendor agnostic way. With OpenTelemetry, you can instrument your application once and then add or change vendors without changing the instrumentation, for example, here is a list popular DataDog competitorsopen in new window that support OpenTelemetry.

OpenTelemetry is available for most programming languages and provides interoperability across different languages and environments.

OpenTelemetry instrumentation

go-redis comes with an OpenTelemetry instrumentation called redisotelopen in new window that is distributed as a separate module:

go get github.com/go-redis/redis/extra/redisotel/v8

To instrument Redis client, you need to add the hook provided by redisotel. The same methods can be used to instrument redis.Client, redis.ClusterClient, and redis.Ring.

import (
    "github.com/go-redis/redis/v8"
    "github.com/go-redis/redis/extra/redisotel/v8"
)

rdb := redis.NewClient(&redis.Options{...})

// Enable tracing instrumentation.
if err := redisotel.InstrumentTracing(rdb); err != nil {
	panic(err)
}

// Enable metrics instrumentation.
if err := redisotel.InstrumentMetrics(rdb); err != nil {
	panic(err)
}

To make tracing work, you must pass the active trace contextopen in new window to go-redis commands, for example:

ctx := req.Context()
val, err := rdb.Get(ctx, "key").Result()

Uptrace

Uptrace is an open-source APMopen in new window that supports distributed tracing, metrics, and logs. You can use it to monitor applications and set up automatic alerts to receive notifications via email, Slack, Telegram, and more.

You can install Uptraceopen in new window by downloading a DEB/RPM package or a pre-compiled binary.

As expected, redisotel creates spansopen in new window for processed Redis commands and records any errors as they occur. Here is how the collected information is displayed at Uptraceopen in new window:

Redis trace

You can find a runnable example at GitHubopen in new window.

Prometheus

You can also send OpenTelemetry metrics to Prometheus using OpenTelemetry Prometheus exporteropen in new window.

Monitoring Redis Server performance

In addition to monitoring go-redis client, you can also Redis Server and Cluster performance using Opntelemetry Collector. See OpenTelemetry Redis Monitoringopen in new window.

What's next?

Next, start using Uptrace by following the Getting started guideopen in new window.

Popular instrumentations: