58 lines
1.4 KiB
Smarty
58 lines
1.4 KiB
Smarty
package tracing
|
|
|
|
import (
|
|
"io"
|
|
"time"
|
|
|
|
"git.ipao.vip/rogeecn/atom/container"
|
|
"git.ipao.vip/rogeecn/atom/utils/opt"
|
|
opentracing "github.com/opentracing/opentracing-go"
|
|
"github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
config "github.com/uber/jaeger-client-go/config"
|
|
)
|
|
|
|
func Provide(opts ...opt.Option) error {
|
|
o := opt.New(opts...)
|
|
var conf Config
|
|
if err := o.UnmarshalConfig(&conf); err != nil {
|
|
return err
|
|
}
|
|
conf.format()
|
|
return container.Container.Provide(func() (opentracing.Tracer, io.Closer, error) {
|
|
log := logrus.New()
|
|
log.SetFormatter(&logrus.TextFormatter{
|
|
FullTimestamp: true,
|
|
TimestampFormat: "2006-01-02 15:04:05",
|
|
})
|
|
|
|
cfg := &config.Configuration{
|
|
ServiceName: conf.Name,
|
|
Sampler: &config.SamplerConfig{
|
|
Type: "const",
|
|
Param: 1,
|
|
},
|
|
Reporter: &config.ReporterConfig{
|
|
LogSpans: true,
|
|
LocalAgentHostPort: conf.Reporter_LocalAgentHostPort,
|
|
CollectorEndpoint: conf.Reporter_CollectorEndpoint,
|
|
BufferFlushInterval: 100 * time.Millisecond,
|
|
QueueSize: 1000,
|
|
},
|
|
}
|
|
|
|
// 使用自定义的 logger
|
|
jLogger := &jaegerLogrus{logger: log}
|
|
tracer, closer, err := cfg.NewTracer(
|
|
config.Logger(jLogger),
|
|
config.ZipkinSharedRPCSpan(true),
|
|
)
|
|
if err != nil {
|
|
return nil, nil, errors.Wrapf(err, "无法初始化 Jaeger: %v", err)
|
|
}
|
|
opentracing.SetGlobalTracer(tracer)
|
|
|
|
return tracer, closer, nil
|
|
}, o.DiOptions()...)
|
|
}
|