Skip to content
Snippets Groups Projects

Update git.autistici.org/ai3/go-common digest to 0630401

Merged renovate requested to merge renovate/git.autistici.org-ai3-go-common-digest into master
Files
35
@@ -9,24 +9,24 @@ import (
"os"
"path/filepath"
"strconv"
"strings"
"sync"
othttp "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
b3 "go.opentelemetry.io/contrib/propagators/b3"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/zipkin"
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource"
"go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
apitrace "go.opentelemetry.io/otel/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.12.0"
)
var (
// Enabled reports whether tracing is globally enabled or not.
Enabled bool
// Global Tracer instance.
Tracer apitrace.Tracer
initOnce sync.Once
)
@@ -72,16 +72,42 @@ func getServiceName() string {
if s := os.Getenv("TRACING_SERVICE"); s != "" {
return s
}
return filepath.Base(os.Args[0])
if s, err := os.Executable(); err == nil {
return filepath.Base(s)
}
return "unknown_service"
}
func defaultResource() *resource.Resource {
func defaultResource(serviceName string) *resource.Resource {
attrs := []attribute.KeyValue{
semconv.ServiceNameKey.String(serviceName),
}
if s, err := os.Hostname(); err == nil {
attrs = append(attrs, semconv.HostNameKey.String(s))
}
if s := os.Getenv("FLOAT_SERVICE"); s != "" {
attrs = append(attrs, attribute.Key("float.service").String(s))
}
if s := os.Getenv("FLOAT_CONTAINER_NAME"); s != "" {
attrs = append(attrs, semconv.ContainerNameKey.String(s))
}
if s := os.Getenv("FLOAT_CONTAINER_IMAGE"); s != "" {
imageName := s
tag := "latest"
if strings.Contains(imageName, ":") {
parts := strings.SplitN(imageName, ":", 2)
imageName = parts[0]
tag = parts[1]
}
attrs = append(attrs, semconv.ContainerImageNameKey.String(imageName))
attrs = append(attrs, semconv.ContainerImageTagKey.String(tag))
}
r, _ := resource.Merge(
resource.Default(),
resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceNameKey.String(getServiceName()),
),
resource.NewWithAttributes(semconv.SchemaURL, attrs...),
)
return r
}
@@ -111,6 +137,9 @@ func initTracing(serviceName string) {
return
}
// The sampling policy only applies to incoming requests for
// which tracing is not already enabled: in this case, we
// always pass-through.
var sampler trace.Sampler
switch config.Sample {
case "", "always":
@@ -127,13 +156,18 @@ func initTracing(serviceName string) {
}
tp := trace.NewTracerProvider(
trace.WithSampler(sampler),
trace.WithResource(defaultResource()),
trace.WithSampler(trace.ParentBased(sampler)),
trace.WithBatcher(ze),
trace.WithResource(defaultResource(serviceName)),
)
otel.SetTracerProvider(tp)
Tracer = tp.Tracer(serviceName)
otel.SetTextMapPropagator(
propagation.NewCompositeTextMapPropagator(
propagation.TraceContext{},
propagation.Baggage{},
b3.New()))
log.Printf("tracing enabled (report_url %s)", config.ReportURL)
@@ -143,7 +177,7 @@ func initTracing(serviceName string) {
// Init tracing support, if not using WrapHandler.
func Init() {
initTracing("")
initTracing(getServiceName())
}
// WrapTransport optionally wraps a http.RoundTripper with OpenCensus
@@ -165,5 +199,12 @@ func WrapHandler(h http.Handler, endpointAddr string) http.Handler {
if !Enabled {
return h
}
return othttp.NewHandler(h, serviceName)
// Format span names with the request URL path.
return othttp.NewHandler(
h, serviceName,
othttp.WithSpanNameFormatter(func(op string, r *http.Request) string {
return r.URL.Path
}),
)
}
Loading