Files
atomctl/templates/project/providers/tracing/provider.go.tpl
2024-12-30 17:37:36 +08:00

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()...)
}