go 链路追踪_使用opentracing,jaeger实现golang链路追踪

本文介绍了如何利用Jaeger(Uber的开源分布式追踪系统)和OpenTracing API在Go应用中实现链路追踪。通过配置Jaeger tracer,设置采样策略,并在客户端和服务端使用Inject和Extract方法传递span context,从而实现跨进程的调用链跟踪。文章提供了详细的代码示例,包括客户端发送请求和服务器处理请求的流程。
摘要由CSDN通过智能技术生成

Jaeger 是Uber推出的一款开源分布式追踪系统,兼容OpenTracing API。

我们可以使用opentracing在关键代码中进行埋点记录,线上可以快速直观查看调用执行情况。

要点说明

config设定

cfg := &config.Configuration{

Sampler: &config.SamplerConfig{

Type: samplerType,

Param: samplerParam,

},

Reporter: &config.ReporterConfig{

LogSpans: true,

},

}

其中关于SamplerConfig的Type可以选择

const,全量采集。param采样率设置0,1 分别对应打开和关闭

probabilistic ,概率采集。param默认万份之一,0~1之间取值,

rateLimiting ,限速采集。param每秒采样的个数

remote 动态采集策略。param值于probabilistic的参数一样。在收到实际值之前的初始采样率。改值可以通过环境变量的JAEGER_SAMPLER_PARAM设定

生成jaeger tracer

func (c Configuration) NewTracer(options ...Option) (opentracing.Tracer, io.Closer, error)

设置为全局的单例tracer

func SetGlobalTracer(tracer Tracer)

生成开始一个Span

StartSpan(operationName string, opts ...StartSpanOption) Span

返回span的SpanContext的reference

func ContextWithSpan(ctx context.Context, span Span) context.Context

生成子Span

func StartSpanFromContext(ctx context.Context, operationName string, opts ...StartSpanOption) (Span, context.Context)

记录关于Span相关的key:value数据

LogFields(fields ...log.Field)

到此如果只需要追踪在同一process的链路就已经可以了。如果希望能够追踪不同进程中的链路例如,客户端通过http请求服务端,服务端回应整个链路的追踪需要用到以下的处理。

使用Inject和Extract通过RPC calls传递span context

Client端

添加import import (

"github.com/opentracing/opentracing-go/ext"

)

添加Inject ext.SpanKindRPCClient.Set(reqSpan)

ext.HTTPUrl.Set(reqSpan, reqURL)

ext.HTTPMethod.Set(reqSpan, "GET")

span.Tracer().Inject(

span.Context(),

opentracing.HTTPHeaders,

opentracing.HTTPHeadersCarrier(req.Header),

)

Server端

添加import import (

opentracing "github.com/opentracing/opentracing-go"

"github.com/opentracing/opentracing-go/ext"

otlog "github.com/opentracing/opentracing-go/log"

"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值