You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elastic APM中添加Redis作为Go应用的依赖?

为Go应用的Redis操作添加Elastic APM监控

核心实现逻辑

Elastic APM Go Agent通过包装Redis客户端来捕获Redis操作链路,将其作为依赖项上报。以下针对主流的go-redis/redis客户端给出实操方案,其他客户端(如redigo)的实现思路一致,只需替换对应APM适配模块。

1. 安装必要依赖

确保已安装APM Agent及Redis适配包:

go get go.elastic.co/apm/v2
go get go.elastic.co/apm/module/apmgoredis/v2

2. 包装Redis客户端

在初始化Redis客户端时,用apmgoredis.WrapClient包装原客户端,自动拦截所有Redis命令:

import (
    "github.com/go-redis/redis/v8"
    "go.elastic.co/apm/v2"
    "go.elastic.co/apm/module/apmgoredis/v2"
)

func NewRedisClient() *redis.Client {
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379",
        Password: "",
        DB:       0,
    })

    // 注入APM监控逻辑
    apmgoredis.WrapClient(client)

    return client
}

3. 传递链路上下文

如果Redis操作在HTTP请求的goroutine中执行,需确保APM事务上下文被正确传递。gorilla mux的APM集成已自动处理HTTP请求的事务,但异步goroutine中需手动传递:

func YourHandler(w http.ResponseWriter, r *http.Request) {
    // 获取当前请求的APM上下文
    ctx := apm.ContextWithTransaction(r.Context(), apm.TransactionFromContext(r.Context()))

    // 将上下文传入Redis操作
    val, err := redisClient.Get(ctx, "example-key").Result()
    if err != nil {
        // 错误处理
    }
}

验证

启动应用并触发Redis操作后,在Kibana APM界面的服务依赖中即可看到Redis条目,可查看命令耗时、错误率等详细指标。

其他客户端适配

  • 若使用redigo,安装go.elastic.co/apm/module/apmredigo,用apmredigo.WrapConn或apmredigo.WrapPool包装连接/连接池。

内容的提问来源于stack exchange,提问作者Lancy Joy Lobo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:22:50