feat(tracing): Continue on tracing implmentation
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Matthieu 'JP' DERASSE
2022-12-17 19:54:41 +00:00
parent aea5d74d53
commit c040c1fc78
5 changed files with 113 additions and 8 deletions

View File

@ -0,0 +1,23 @@
package jaeger
import (
"github.com/juju/errors"
"go.opentelemetry.io/otel/exporters/jaeger"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
)
// NewExporter will create a Jaeger exporter for tracing.
func NewExporter(c *ConfigStruct) (sdktrace.SpanExporter, error) {
err := c.IsValid()
if err != nil {
return nil, errors.Trace(err)
}
return jaeger.New(
jaeger.WithCollectorEndpoint(
jaeger.WithEndpoint(c.URL),
),
)
}

View File

@ -0,0 +1,21 @@
package zipkin
import (
"github.com/juju/errors"
"go.opentelemetry.io/otel/exporters/zipkin"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
)
// NewExporter will create a Zipkin exporter for tracing.
func NewExporter(c *ConfigStruct) (sdktrace.SpanExporter, error) {
err := c.IsValid()
if err != nil {
return nil, errors.Trace(err)
}
return zipkin.New(
c.URL,
)
}

View File

@ -1,8 +1,11 @@
package tracing
import (
"git.dev.m-and-m.ovh/mderasse/gocommon/tracing/exporter/jaeger"
"git.dev.m-and-m.ovh/mderasse/gocommon/tracing/exporter/zipkin"
"github.com/juju/errors"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
@ -60,22 +63,70 @@ func InitFromCustomConfig(c *ConfigStruct) (*sdktrace.TracerProvider, error) {
return nil, errors.Trace(err)
}
// if disabled, never sample
if !c.Enabled {
return sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.NeverSample()),
), nil
}
attributes := []attribute.KeyValue{
semconv.ServiceNameKey.String(c.ServiceName),
}
if c.ServiceVersion != "" {
attributes = append(
attributes,
semconv.ServiceVersionKey.String(c.ServiceVersion),
)
}
if c.ServiceInstanceID != "" {
attributes = append(
attributes,
semconv.ServiceInstanceIDKey.String(c.ServiceInstanceID),
)
}
for k, v := range c.Attributes {
attributes = append(
attributes,
attribute.String(k, v),
)
}
// Ensure default SDK resources and the required service name are set.
r, err := resource.Merge(
resource.Default(),
resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceNameKey.String("myService"),
semconv.ServiceVersionKey.String("1.0.0"),
semconv.ServiceInstanceIDKey.String("abcdef12345"),
attributes...,
),
)
if err != nil {
panic(err)
return nil, errors.Trace(err)
}
// Get the exporter
var exporter sdktrace.SpanExporter
switch c.Exporter {
case ExporterName_JAEGER:
exporter, err = jaeger.NewExporter(c.JaegerConfig)
if err != nil {
return nil, errors.Trace(err)
}
case ExporterName_ZIPKIN:
exporter, err = zipkin.NewExporter(c.ZipkinConfig)
if err != nil {
return nil, errors.Trace(err)
}
default:
return nil, errors.BadRequestf("Exporter is not handled.")
}
return sdktrace.NewTracerProvider(
sdktrace.WithResource(r),
sdktrace.WithBatcher(exporter),
), nil
}