{"record":{"id":"ec97360668eb4968","repo":"googleapis/mcp-toolbox","slug":"trace-provider-fail-to-set-up-resource-w","errorCode":null,"errorMessage":"trace provider fail to set up resource: %w","messagePattern":"trace provider fail to set up resource: %w","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/telemetry/telemetry.go","lineNumber":111,"sourceCode":"// newResource create default resources for telemetry data.\n// Resource represents the entity producing telemetry.\nfunc newResource(ctx context.Context, versionString string, telemetryServiceName string) (*resource.Resource, error) {\n\t// Ensure default SDK resources and the required service name are set.\n\tr, err := resource.New(\n\t\tctx,\n\t\tresource.WithFromEnv(),      // Discover and provide attributes from OTEL_RESOURCE_ATTRIBUTES and OTEL_SERVICE_NAME environment variables.\n\t\tresource.WithTelemetrySDK(), // Discover and provide information about the OTel SDK used.\n\t\tresource.WithOS(),           // Discover and provide OS information.\n\t\tresource.WithContainer(),    // Discover and provide container information.\n\t\tresource.WithHost(),         //Discover and provide host information.\n\t\tresource.WithSchemaURL(semconv.SchemaURL), // Set the schema url.\n\t\tresource.WithAttributes( // Add other custom resource attributes.\n\t\t\tsemconv.ServiceName(telemetryServiceName),\n\t\t\tsemconv.ServiceVersion(versionString),\n\t\t),\n\t)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"trace provider fail to set up resource: %w\", err)\n\t}\n\treturn r, nil\n}\n\n// newTracerProvider creates TracerProvider.\n// TracerProvider is a factory for Tracers and is responsible for creating spans.\nfunc newTracerProvider(ctx context.Context, r *resource.Resource, telemetryOTLP string, telemetryGCP bool, telemetryGCPProject string) (*tracesdk.TracerProvider, error) {\n\ttraceOpts := []tracesdk.TracerProviderOption{}\n\tif telemetryOTLP != \"\" {\n\t\t// otlptracehttp provides an OTLP span exporter using HTTP with protobuf payloads.\n\t\t// By default, the telemetry is sent to https://localhost:4318/v1/traces.\n\t\totlpExporter, err := otlptracehttp.New(ctx, otlptracehttp.WithEndpoint(telemetryOTLP))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttraceOpts = append(traceOpts, tracesdk.WithBatcher(otlpExporter))\n\t}\n\tif telemetryGCP {","sourceCodeStart":93,"sourceCodeEnd":129,"githubUrl":"https://github.com/googleapis/mcp-toolbox/blob/8cc6e09de2ad7b8bffc77751799585a1401a48eb/internal/telemetry/telemetry.go#L93-L129","documentation":"newResource builds the OpenTelemetry resource that identifies this service (name + version) via resource.New with semconv attributes. When resource.New returns an error (e.g. a resource detector fails or OTEL_RESOURCE_ATTRIBUTES is malformed), SetupOTel aborts and wraps the cause with this message.","triggerScenarios":"Calling SetupOTel when resource.New fails — typically a built-in resource detector error or an unparseable OTEL_RESOURCE_ATTRIBUTES / OTEL_SERVICE_NAME environment variable.","commonSituations":"Malformed OTEL_RESOURCE_ATTRIBUTES (missing '=' or bad key=value pairs), failing host/cloud resource detectors in restricted environments, incompatible otel-go dependency versions.","solutions":["Fix or unset OTEL_RESOURCE_ATTRIBUTES / OTEL_SERVICE_NAME env vars (format: key1=value1,key2=value2)","Identify the wrapped inner detector error and address it (e.g. disable failing cloud/hostname detector)","Pin compatible opentelemetry-go dependency versions","Retry telemetry setup after fixing the environment"],"exampleFix":"// before\nOTEL_RESOURCE_ATTRIBUTES=service.name=toolbox,=broken\n// after\nOTEL_RESOURCE_ATTRIBUTES=service.name=toolbox","handlingStrategy":"try-catch","validationCode":"// sanity-check OTel env before setup\nif v := os.Getenv(\"OTEL_RESOURCE_ATTRIBUTES\"); v != \"\" {\n  for _, kv := range strings.Split(v, \",\") {\n    if len(strings.SplitN(kv, \"=\", 2)) != 2 {\n      log.Fatalf(\"malformed OTEL_RESOURCE_ATTRIBUTES pair: %q\", kv)\n    }\n  }\n}","typeGuard":"func isResourceSetupErr(err error) bool {\n  return err != nil && strings.Contains(err.Error(), \"trace provider fail to set up resource\")\n}","tryCatchPattern":"if err := telemetry.SetupOTel(ctx, opts...); err != nil {\n  log.Printf(\"otel resource setup failed (continuing without telemetry): %v\", err)\n}","preventionTips":["Keep OTEL_RESOURCE_ATTRIBUTES well-formed or unset","Pin compatible opentelemetry-go versions","Test telemetry setup in CI with detectors enabled"],"tags":["otel","telemetry","resource-initialization","go"],"backgroundTag":"otel-resource-init-failed","analyzedSha":"8cc6e09de2ad7b8bffc77751799585a1401a48eb","analyzedAt":"2026-09-05T01:10:36.887Z","contentChangedAt":"2026-09-05T01:10:36.887Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}