配置写死
import (
"DBProject/src/DB"
"context"
"fmt"
"github.com/opentracing/opentracing-go"
"github.com/uber/jaeger-client-go"
jaegercfg "github.com/uber/jaeger-client-go/config"
"io"
)
func initJaeger(serviceName string) (io.Closer, error) {
cfg := jaegercfg.Configuration{
//采样器的配置
Sampler: &jaegercfg.SamplerConfig{
//常量采样器,这意味着每个 trace 都会被采样
Type: jaeger.SamplerTypeConst,
Param: 1,
},
Reporter: &jaegercfg.ReporterConfig{
//发送span时记录日志
LogSpans: true,
// 替换为你的 Jaeger Agent 地址
LocalAgentHostPort: "120.53.94.106:6831",
},
}
//初始化全局的 tracer
closer, err := cfg.InitGlobalTracer(
serviceName,
jaegercfg.Logger(jaeger.StdLogger),
)
return closer, err
}
func jaegerTest() {
closer, err := initJaeger("your-service-name")
if err != nil {
panic(fmt.Sprintf("ERROR: cannot init Jaeger: %v\n", err))
}
defer closer.Close()
parentFunction()
}
func parentFunction() {
span, ctx := opentracing.StartSpanFromContext(context.Background(), "parentFunction")
defer span.Finish()
// ... your function logic ...操作数据库插入
DB.TestMongoDB()
childFunction(ctx)
}
func childFunction(ctx context.Context) {
span, _ := opentracing.StartSpanFromContext(ctx, "childFunction")
defer span.Finish()
// ... your another function logic ...操作数据库删除
DB.TestMongoDB()
}
配置从环境变量读取
import (
"context"
"fmt"
"github.com/opentracing/opentracing-go"
"github.com/uber/jaeger-client-go/config"
"io"
)
func initJaeger(serviceName string) (opentracing.Tracer, io.Closer) {
cfg, err := config.FromEnv()
if err != nil {
panic(fmt.Sprintf("ERROR: cannot create Jaeger configuration: %v\n", err))
}
cfg.ServiceName = serviceName
cfg.Sampler.Type = "const"
cfg.Sampler.Param = 1
tracer, closer, err := cfg.NewTracer()
if err != nil {
panic(fmt.Sprintf("ERROR: cannot init Jaeger: %v\n", err))
}
return tracer, closer
}
func jaegerTest() {
tracer, closer := initJaeger("测试jaeger服务")
defer closer.Close()
parentFunction()
}
func parentFunction() {
span, ctx := opentracing.StartSpanFromContext(context.Background(), "parentFunction")
defer span.Finish()
// ... your function logic ...
childFunction(ctx)
}
func childFunction(ctx context.Context) {
span, _ := opentracing.StartSpanFromContext(ctx, "childFunction")
defer span.Finish()
// ... your another function logic ...
}
效果