[bugfix/tracing] fix broken tracing due to conflicting schema url (#2712)

The OpenTelemetry SDK is very strict about the schema version when
the `Resource` is initialized.

Specifically, different schema versions _CANNOT_ be mixed, and since
the default SDK resource (which is merged with the user-defined one)
defines a schema URL, the `semconv` imports are really prone to being
out-of-sync.

The best way to avoid this is to merge a _schemaless_ resource. This
is fine...there's plenty of other ways to get `semconv` out of sync,
and the core service attributes (e.g. `service.name`) should not ever
change.

Additionally, any errors here are now propagated so that they'll be
visible instead of silently swallowed.
This commit is contained in:
Milas Bowman 2024-03-04 05:10:15 -05:00 committed by GitHub
parent c7845c70d6
commit 66d9297e64
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -34,8 +34,8 @@ import (
"go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource" "go.opentelemetry.io/otel/sdk/resource"
"go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.20.0" "go.opentelemetry.io/otel/semconv/v1.20.0/httpconv"
httpconv "go.opentelemetry.io/otel/semconv/v1.20.0/httpconv" semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
oteltrace "go.opentelemetry.io/otel/trace" oteltrace "go.opentelemetry.io/otel/trace"
"github.com/superseriousbusiness/gotosocial/internal/config" "github.com/superseriousbusiness/gotosocial/internal/config"
@ -84,13 +84,16 @@ func Initialize() error {
default: default:
return fmt.Errorf("invalid tracing transport: %s", config.GetTracingTransport()) return fmt.Errorf("invalid tracing transport: %s", config.GetTracingTransport())
} }
r, _ := resource.Merge( r, err := resource.Merge(
resource.Default(), resource.Default(),
resource.NewWithAttributes( resource.NewSchemaless(
semconv.SchemaURL,
semconv.ServiceName("GoToSocial"), semconv.ServiceName("GoToSocial"),
), ),
) )
if err != nil {
// this can happen if semconv versioning is out-of-sync
return fmt.Errorf("building tracing resource: %w", err)
}
tp := trace.NewTracerProvider( tp := trace.NewTracerProvider(
tpo, tpo,