tencent cloud

文档反馈

通过 goredis 中间件上报

最后更新时间:2024-04-02 10:09:04
    本文将为您介绍如何使用 go redis 中间件上报Go应用数据

    操作步骤

    步骤1:获取接入点和 Token

    登录 应用性能监控控制台,进入应用监控 > 应用列表页面,单击接入应用,在接入应用时选择 GO 语言与 goredis 中间件的数据采集方式。 在选择接入方式步骤获取您的接入点和 Token,如下图所示:
    
    

    步骤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.1
    Type: "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 main
    
    import (
    "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.1
    Type: "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
    opentracing.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
    }
    
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持