本文将为您介绍如何使用 go redis 中间件上报Go应用数据
操作步骤
步骤1:获取接入点和 Token
进入 应用性能监控控制台 应用监控 > 应用列表页面,单击接入应用,在接入应用时选择 GO 语言与 goredis 中间件的数据采集方式。
在选择接入方式步骤获取您的接入点和 Token,如下图所示:
![](https://qcloudimg.tencent-cloud.cn/image/document/0a2994c24a9ad18521f9693f7ec9b473.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/0a2994c24a9ad18521f9693f7ec9b473.png)
步骤2:安装 Jaeger Agent
1. 下载 Jaeger Agent。
2. 执行下列命令启动 Agent 。
nohup ./jaeger-agent --reporter.grpc.host-port={{collectorRPCHostPort}} --agent.tags=token={{token}}
步骤3:选择上报端类型上报应用数据
选择上报端类型,通过 go redis 中间件上报 Go 应用数据:
客户端
1. 引入
opentracing-contrib/goredis
埋点依赖。依赖路径:
github.com/opentracing-contrib/goredis
版本要求: ≥
v0.0.0-20190807091203-90a2649c5f87
2. 配置 Jaeger,创建Trace对象并设置 GlobalTracer。示例如下:
cfg := &jaegerConfig.Configuration{ServiceName: clientServerName, //对其发起请求的的调用链,叫什么服务Sampler: &jaegerConfig.SamplerConfig{ //采样策略的配置,详情见4.1.1Type: "const",Param: 1,},Reporter: &jaegerConfig.ReporterConfig{ //配置客户端如何上报trace信息,所有字段都是可选的LogSpans: true,LocalAgentHostPort: endPoint,},//Token配置Tags: []opentracing.Tag{ //设置tag,token等信息可存于此opentracing.Tag{Key: "token", Value: token}, //设置token},}tracer, closer, err := cfg.NewTracer(jaegerConfig.Logger(jaeger.StdLogger)) //根据配置得到tracer
3. 初始化 Redis 连接,示例如下:
func InitRedisConnector() error {redisClient = redis.NewUniversalClient(&redis.UniversalOptions{Addrs: []string{redisAddress},Password: redisPassword,DB: 0,})if err := redisClient.Ping().Err(); err != nil {log.Println("redisClient.Ping() error:", err.Error())return err}return nil}
4. 获取 Redis 连接,示例如下:
func GetRedisDBConnector(ctx context.Context) redis.UniversalClient {client := apmgoredis.Wrap(redisClient).WithContext(ctx)return client}
完整代码如下:
package mainimport ("context""fmt""github.com/go-redis/redis"apmgoredis "github.com/opentracing-contrib/goredis""github.com/opentracing/opentracing-go""github.com/uber/jaeger-client-go"jaegerConfig "github.com/uber/jaeger-client-go/config""log""time")const (redisAddress = "127.0.0.1:6379"redisPassword = ""clientServerName = "redis-client-demo"testKey = "redis-demo-key"endPoint = "xxxxx:6831" // HTTP 直接上报地址token = "abc")func main() {cfg := &jaegerConfig.Configuration{ServiceName: clientServerName, //对其发起请求的的调用链,叫什么服务Sampler: &jaegerConfig.SamplerConfig{ //采样策略的配置,详情见4.1.1Type: "const",Param: 1,},Reporter: &jaegerConfig.ReporterConfig{ //配置客户端如何上报trace信息,所有字段都是可选的LogSpans: true,LocalAgentHostPort: endPoint,},//Token配置Tags: []opentracing.Tag{ //设置tag,token等信息可存于此opentracing.Tag{Key: "token", Value: token}, //设置token},}tracer, closer, err := cfg.NewTracer(jaegerConfig.Logger(jaeger.StdLogger)) //根据配置得到traceropentracing.SetGlobalTracer(tracer)defer closer.Close()if err != nil {panic(fmt.Sprintf("ERROR: fail init Jaeger: %v\\n", err))}InitRedisConnector()redisClient := GetRedisDBConnector(context.Background())redisClient.Set(testKey, "redis-client-demo", time.Duration(1000)*time.Second)redisClient.Get(testKey)}var (redisClient redis.UniversalClient)func GetRedisDBConnector(ctx context.Context) redis.UniversalClient {client := apmgoredis.Wrap(redisClient).WithContext(ctx)return client}func InitRedisConnector() error {redisClient = redis.NewUniversalClient(&redis.UniversalOptions{Addrs: []string{redisAddress},Password: redisPassword,DB: 0,})if err := redisClient.Ping().Err(); err != nil {log.Println("redisClient.Ping() error:", err.Error())return err}return nil}