ZBLOG

写一个完整的简单的 golang 代码链路追踪 demo,并写一个 demoFunc 可以指定一个固定的traceId,返回一个 ctx给外部使用

下面是一个简单的 Go 代码示例,演示链路追踪(使用 opentracing 库)以及定义一个 demoFunc 函数,可用于指定固定的 traceId 并返回上下文给外部使用:

  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. opentracing "github.com/opentracing/opentracing-go"
  7. "github.com/opentracing/opentracing-go/ext"
  8. "github.com/opentracing/opentracing-go/log"
  9. jaegercfg "github.com/uber/jaeger-client-go/config"
  10. )
  11. func main() {
  12. // 初始化 Jaeger 配置
  13. cfg, err := jaegercfg.FromEnv()
  14. if err != nil {
  15. log.Fatal(err)
  16. }
  17. tracer, closer, err := cfg.NewTracer(jaegercfg.Logger(jaeger.StdLogger))
  18. if err != nil {
  19. log.Fatal(err)
  20. }
  21. defer closer.Close()
  22. opentracing.SetGlobalTracer(tracer)
  23. http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  24. ctx := r.Context()
  25. // 获取传入请求中的 traceId
  26. parentSpan := opentracing.SpanFromContext(ctx)
  27. var traceId string
  28. if parentSpan != nil {
  29. spanCtx := parentSpan.Context()
  30. traceId = spanCtx.(jaeger.SpanContext).TraceID().String()
  31. } else {
  32. // 若未指定则生成新的 traceId
  33. span := tracer.StartSpan("demo")
  34. defer span.Finish()
  35. ctx = opentracing.ContextWithSpan(ctx, span)
  36. traceId = span.Context().(jaeger.SpanContext).TraceID().String()
  37. }
  38. // 执行其他操作...
  39. fmt.Fprintf(w, "Trace ID: %s\n", traceId)
  40. })
  41. log.Fatal(http.ListenAndServe(":8080", nil))
  42. }
  43. func demoFunc(traceId string) {
  44. // 创建一个新的 Span,设置指定的 traceId
  45. span := opentracing.StartSpan("demoFunc")
  46. defer span.Finish()
  47. ext.SpanKindRPCServer.Set(span)
  48. span.LogFields(
  49. log.String("event", "demoFunc"),
  50. log.String("traceId", traceId),
  51. )
  52. // 执行其他操作...
  53. }

这个示例演示了如何使用 Jaeger 和 opentracing 库进行链路追踪。在 / 路由处理函数中,我们首先尝试从传入请求的上下文中获取已有的 span,并从中提取 traceId。如果未提供 traceId,则生成一个新的,并将其用于记录日志和返回给客户端。

demoFunc 函数中,可以将指定的 traceId 用于创建新的 Span,并执行其他操作。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=14548

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?