监控 Golang Redis 性能和错误

本文档介绍如何使用 OpenTelemetry 监控 Go Redis 客户端的性能。

什么是 OpenTelemetry?

OpenTelemetry在新窗口中打开 是一个开源的可观测性框架,用于 OpenTelemetry 追踪在新窗口中打开(包括日志和错误)和 OpenTelemetry 指标在新窗口中打开.

OpenTelemetry 旨在简化和标准化软件监控和观测过程,使您更容易洞悉分布式系统的性能、行为和健康状况。

OpenTelemetry 旨在与供应商无关,适用于多种编程语言、框架和环境。它提供了一系列特定于语言的 SDK 和监控库,使您更容易将遥测收集集成到您的应用程序中。

OpenTelemetry 还提供导出器和集成,以将遥测数据发送到各种 OpenTelemetry 后端在新窗口中打开 系统和可观测性平台,包括 Prometheus、Grafana、Jaeger、Zipkin、Elasticsearch 等流行工具。

OpenTelemetry 监控

go-redis 带有一个 OpenTelemetry Redis在新窗口中打开 监控,名为 redisotel在新窗口中打开,它作为单独的模块发布

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

要监控 Redis 客户端,您需要添加 redisotel 提供的钩子。相同的方法可用于监控 redis.Clientredis.ClusterClientredis.Ring

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

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)
}

要使追踪正常工作,您必须将活动 追踪上下文在新窗口中打开 传递给 go-redis 命令,例如

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

Uptrace

Uptrace 是一个 Grafana 替代品在新窗口中打开,支持分布式追踪、指标和日志。您可以使用它来监控应用程序并排查问题。

Uptrace Overview

Uptrace 带有直观的查询构建器、丰富的仪表板、带有通知的警报规则,以及对大多数语言和框架的集成。

Uptrace 可以在单台服务器上处理数十亿个跨度和指标,并且允许您以低 10 倍的成本监控您的应用程序。

只需几分钟,您就可以通过访问 云演示在新窗口中打开(无需登录)或使用 Docker在新窗口中打开 在本地运行它。源代码可在 GitHub在新窗口中打开 上获得。

Prometheus

OpenTelemetry 还可以与 Prometheus 集成,Prometheus 是一个流行的监控和警报系统,用于收集和导出遥测数据。

通过将 OpenTelemetry 与 Prometheus 集成,您可以利用 Prometheus 的强大监控和警报功能,同时从 OpenTelemetry 提供的灵活性和标准化中获益。这种集成使您能够收集、存储、可视化和分析来自应用程序和系统的指标,从而深入了解其性能和行为。

您可以使用 OpenTelemetry Prometheus 导出器在新窗口中打开 将 OpenTelemetry 指标发送到 Prometheus。

结论

通过监控 Redis 性能,您可以确保您的 Redis 基础设施平稳运行、最佳性能,并满足应用程序和用户的需求。它使您能够主动解决问题、优化资源利用率,并保持 Redis 部署的可靠性和响应能力。