summaryrefslogtreecommitdiff
path: root/internal/tracing/tracing.go
diff options
context:
space:
mode:
authorLibravatar Milas Bowman <devnull@milas.dev>2024-03-04 05:10:15 -0500
committerLibravatar GitHub <noreply@github.com>2024-03-04 11:10:15 +0100
commit66d9297e64fdc9fb4bf4b8df3ea88c1e412aa43c (patch)
tree0e133415a9d1cddf6b18a5cf958aea4962d0668b /internal/tracing/tracing.go
parent[chore]: Bump golang.org/x/crypto from 0.19.0 to 0.20.0 (#2716) (diff)
downloadgotosocial-66d9297e64fdc9fb4bf4b8df3ea88c1e412aa43c.tar.xz
[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.
Diffstat (limited to 'internal/tracing/tracing.go')
-rw-r--r--internal/tracing/tracing.go13
1 files changed, 8 insertions, 5 deletions
diff --git a/internal/tracing/tracing.go b/internal/tracing/tracing.go
index da6fc6580..4f37ccd09 100644
--- a/internal/tracing/tracing.go
+++ b/internal/tracing/tracing.go
@@ -34,8 +34,8 @@ import (
"go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/sdk/resource"
"go.opentelemetry.io/otel/sdk/trace"
- semconv "go.opentelemetry.io/otel/semconv/v1.20.0"
- httpconv "go.opentelemetry.io/otel/semconv/v1.20.0/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"
"github.com/superseriousbusiness/gotosocial/internal/config"
@@ -84,13 +84,16 @@ func Initialize() error {
default:
return fmt.Errorf("invalid tracing transport: %s", config.GetTracingTransport())
}
- r, _ := resource.Merge(
+ r, err := resource.Merge(
resource.Default(),
- resource.NewWithAttributes(
- semconv.SchemaURL,
+ resource.NewSchemaless(
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(
tpo,