如何在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
相关产品推荐
相关产品推荐

