feat: first version.

This commit is contained in:
tx7do
2023-05-21 10:04:15 +08:00
parent 3656de9753
commit 785443dd84
51 changed files with 15841 additions and 0 deletions

84
tracer.go Normal file
View File

@@ -0,0 +1,84 @@
package bootstrap
import (
"errors"
"go.opentelemetry.io/otel/exporters/jaeger"
"go.opentelemetry.io/otel/exporters/zipkin"
"github.com/tx7do/kratos-bootstrap/gen/api/go/conf/v1"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/sdk/resource"
traceSdk "go.opentelemetry.io/otel/sdk/trace"
semConv "go.opentelemetry.io/otel/semconv/v1.4.0"
)
// NewJaegerExporter 创建一个jaeger导出器
func NewJaegerExporter(endpoint string) (traceSdk.SpanExporter, error) {
return jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(endpoint)))
}
// NewZipkinExporter 创建一个zipkin导出器
func NewZipkinExporter(endpoint string) (traceSdk.SpanExporter, error) {
return zipkin.New(endpoint)
}
// NewTracerExporter 创建一个导出器支持jaeger和zipkin
func NewTracerExporter(exporterName, endpoint string) (traceSdk.SpanExporter, error) {
if exporterName == "" {
exporterName = "jaeger"
}
switch exporterName {
case "jaeger":
return NewJaegerExporter(endpoint)
case "zipkin":
return NewZipkinExporter(endpoint)
default:
return nil, errors.New("exporter type not support")
}
}
// NewTracerProvider 创建一个链路追踪器
func NewTracerProvider(cfg *conf.Tracer, serviceInfo *ServiceInfo) error {
if cfg == nil {
return errors.New("tracer config is nil")
}
if cfg.Sampler == 0 {
cfg.Sampler = 1.0
}
if cfg.Env == "" {
cfg.Env = "dev"
}
opts := []traceSdk.TracerProviderOption{
traceSdk.WithSampler(traceSdk.ParentBased(traceSdk.TraceIDRatioBased(cfg.Sampler))),
traceSdk.WithResource(resource.NewSchemaless(
semConv.ServiceNameKey.String(serviceInfo.Name),
semConv.ServiceVersionKey.String(serviceInfo.Version),
semConv.ServiceInstanceIDKey.String(serviceInfo.Id),
attribute.String("env", cfg.Env),
)),
}
if len(cfg.Endpoint) > 0 {
exp, err := NewTracerExporter(cfg.Batcher, cfg.Endpoint)
if err != nil {
panic(err)
}
opts = append(opts, traceSdk.WithBatcher(exp))
}
tp := traceSdk.NewTracerProvider(opts...)
if tp == nil {
return errors.New("create tracer provider failed")
}
otel.SetTracerProvider(tp)
return nil
}