• No labels

13 Comments

  1. "日志内容中需要注入当前请求的TraceId,以方便通过日志快速查找定位问题点。组件可以自动识别当前请求链路是否开启Tracing特性,有则自动启动自身Tracing特性,并将TraceId自动读取出来输出到内容中;没有则忽略,什么也不会做。该特性是由glog组件实现,这需要开发者在输出日志的时候调用Ctx链式操作方法将context.Context上下文变量传递到当前输出日志操作链路中,没有没有传递context.Context上下文变量,就会丢失日志内容中的TraceId"

    这里的 TraceId 是固定的还是取配置文件中日志配置参数:CtxKeys吗?

    1. 不是。glog日志组件旧版本实现的一版链路跟踪信息不是标准化的。新版本会保留CtxKeys设计,并且新版本增加了标准化协议OpenTelemetry的支持,使得链路跟踪信息设置、获取和打印更加便捷,也就是说你无需再手动配置CtxKeys,日志组件会自动读取链路中的TraceId。此外,GoFrame未来版本中也会根据需要扩展原有的CtxKeys的能力。

  2. sdk,如何实现关闭数据上报,如JAEGER_SAMPLER_PARAM=0采样率=0

    1. Jaeger是自己注册的,可以在注册Jaeger的时候自行配置。goframe里面的链路跟踪对接的是OpenTelemetry标准协议。

  3. 我如果不考虑链路跟踪这个功能, 我是不是直接塞一个全局的"ctx" 就可以了.  有点不习惯2.1的ctx.  这样做有没啥弊端.

    1. 自己的问题自己回复. 链路跟踪太牛了. 以前还嫌麻烦, 哪怕用不上微服务, 链路跟踪都得用上. 监控全局的感觉 推荐集成阿里云的, 有每天免费的额度

  4. 想问下,这个链路跟踪。如果服务端内部有rpc的话,链路跟踪还能不能生效。

    1. 链路跟踪基础就是这个目的。

    1. 每个节点手动插桩,成本有点高,《面向OpenTelemetry的Golang应用无侵入插桩技术》这种技术能应用进来就好了
    2. 每次调用都有上报,这个开销也不小,好像没看到如何采样
    1. 项目地址

      https://github.com/alibaba/opentelemetry-go-auto-instrumentation

      适配组件(截至 2024-09-30)

      Plugin NameRepository UrlMin Supported VersionMax Supported Version
      database/sqlhttps://pkg.go.dev/database/sql--
      echohttps://github.com/labstack/echov4.0.0v4.12.0
      ginhttps://github.com/gin-gonic/ginv1.7.0v1.10.0
      go-redishttps://github.com/redis/go-redisv9.0.5v9.5.1
      gormhttps://github.com/go-gorm/gormv1.22.0v1.25.9
      grpchttps://google.golang.org/grpcv1.44.0v1.67.0
      hertzhttps://github.com/cloudwego/hertzv0.8.0v0.9.2
      logrushttps://github.com/sirupsen/logrusv1.5.0v1.9.3
      mongodbhttps://github.com/mongodb/mongo-go-driverv1.11.1v1.15.2
      muxhttps://github.com/gorilla/muxv1.3.0v1.8.1
      net/httphttps://pkg.go.dev/net/http--
      zaphttps://github.com/uber-go/zapv1.20.0v1.27.0
    2. 采样率找到了,目前是写死了 AlwaysSample()


      github.com/gogf/gf/contrib/trace/otlphttp/v2@v2.7.3/otlphttp.go
      	bsp := sdktrace.NewBatchSpanProcessor(traceExp)
      	tracerProvider := sdktrace.NewTracerProvider(
      		sdktrace.WithSampler(sdktrace.AlwaysSample()),
      		sdktrace.WithResource(res),
      		sdktrace.WithSpanProcessor(bsp),
      	)


    3. 用ebpf 搞一波?