2.0.0
Summary
- The minimum supported Node.js has been raised to
^18.19.0 || >=20.6.0. This means that support for Node.js 14 and 16 has been dropped. - The minimum supported TypeScript version has been raised to 5.0.4.
- The compilation target for transpiled TypeScript has been raised to ES2022 (from ES2017).
- The public interface has changed
- for notes on migrating to 2.x / 0.200.x see the upgrade guide
- Only experimental versions
0.200.0are compatible with this release
💥 Breaking Change
- feat(sdk-trace-base)!: Add
parentSpanContextand removeparentSpanIdfromSpanandReadableSpan#5450 @JacksonWeber- (user-facing): the SDK's
SpansparentSpanIdwas replaced byparentSpanContext, to migrate to the new property, please replacespan.parentSpanId->span.parentSpanContext?.spanId
- (user-facing): the SDK's
- feat(sdk-metrics)!: drop deprecated
typefield onMetricDescriptor#5291 @chancancode - feat(sdk-metrics)!: drop deprecated
InstrumentDescriptortype; useMetricDescriptorinstead #5277 @chancancode - feat(sdk-metrics)!: bump minimum version of
@opentelemetry/apipeer dependency to 1.9.0 #5254 @chancancode - chore(shim-opentracing): replace deprecated SpanAttributes #4430 @JamieDanielson
- chore(otel-core): replace deprecated SpanAttributes #4408 @JamieDanielson
- feat(sdk-metrics)!: remove MeterProvider.addMetricReader() in favor of constructor option #4419 @pichlermarc
- chore(otel-resources): replace deprecated SpanAttributes #4428 @JamieDanielson
- feat(sdk-metrics)!: remove MeterProvider.addMetricReader() in favor of constructor option #4419 @pichlermarc
- feat(sdk-metrics)!: replace attributeKeys with custom processors option #4532 @pichlermarc
- refactor(sdk-trace-base)!: replace
SpanAttributeswithAttributes#5009 @david-luna - refactor(resources)!: replace
ResourceAttributeswithAttributes#5016 @david-luna - feat(sdk-metrics)!: drop
ViewandAggregationin favor ofViewOptionsandAggregationOption#4931 @pichlermarc - refactor(sdk-trace-base)!: remove
new Spanconstructor in favor ofTracer.startSpanAPI #5048 @david-luna - refactor(sdk-trace-base)!: remove
BasicTracerProvider.addSpanProcessorAPI in favor of constructor options. #5134 @david-luna - refactor(sdk-trace-base)!: make
resourceproperty private inBasicTracerProviderand removegetActiveSpanProcessorAPI. #5192 @david-luna - feat(sdk-metrics)!: extract
IMetricReaderinterface and use it over abstract class #5311- (user-facing):
MeterProviderOptionsnow provides the more generalIMetricReadertype overMetricReader - If you accept
MetricReaderin your public interface, consider accepting the more generalIMetricReaderinstead to avoid unintentional breaking changes
- (user-facing):
- feat(sdk-trace)!: remove ability to have BasicTracerProvider instantiate exporters #5239 @pichlermarc
- When extending
BasicTracerProvider, the class offered multiple methods to facilitate the creation of exporters and auto-pairing withSpanProcessors.- This functionality has been removed - users may now pass
SpanProcessors to the base class constructor when extending - (user-facing):
_registeredExportershas been removed - (user-facing):
_getSpanExporterhas been removed - (user-facing):
_buildExporterFromEnvhas been removed
- This functionality has been removed - users may now pass
- When extending
- feat(core)!: remove deprecated
IdGeneratorandRandomIdGenerator#5309 @pichlermarc - feat(core)!: remove deprecated type
InstrumentationLibrary#5308 @pichlermarc- (user-facing): please use equivalent type
InstrumentationScopeinstead
- (user-facing): please use equivalent type
- feat(sdk-trace-base)!: replace usages fo
InstrumentationLibrarywithInstrumentationScope#5308 @pichlermarc- (user-facing) rename
Tracer.instrumentationLibrary->Tracer.instrumentationScope - (user-facing) rename
ReadableSpan.instrumentationLibrary->ReadableSpan.instrumentationScope- also renames the property in implementations of
ReadableSpan
- also renames the property in implementations of
- (user-facing) rename
- feat(exporter-jaeger): use
ReadableSpan.instrumentationScopeoverReadableSpan.instrumentationLibrary#5308 @pichlermarc - feat(exporter-zipkin): use
ReadableSpan.instrumentationScopeoverReadableSpan.instrumentationLibrary#5308 @pichlermarc - chore!: update typescript to version
5.0.4#5145 @david-luna- (user-facing) dropped support for
typescript@<5.0.4 - (user-facing) all packages published from this repository will from now on drop support for old versions of
typescriptin minor releases. We will only drop support for versions that are older than 2 years.
- (user-facing) dropped support for
- feat(core)!: remove deprecated samplers #5316 @pichlermarc
- (user-facing): deprecated
AlwaysOnSamplerhas moved to@opentelemetry/sdk-trace-base - (user-facing): deprecated
AlwaysOffSamplerhas moved to@opentelemetry/sdk-trace-base - (user-facing): deprecated
ParentBasedSamplerhas moved to@opentelemetry/sdk-trace-base - (user-facing): deprecated
TraceIdRatioSamplerhas moved to@opentelemetry/sdk-trace-base
- (user-facing): deprecated
- feat(resource): Merge sync and async resource interfaces into a single interface #5350 @dyladan
- Resource constructor now takes a single argument which contains an optional
attributesobject - Detected resource attribute values may be a promise or a synchronous value
- Resources are now merged by the order in which their detectors are configured instead of async attributes being last
- Resource detectors now return
DetectedResourceplain objects instead ofnew Resource()
- Resource constructor now takes a single argument which contains an optional
- feat(sdk-trace-base)!: drop ability to instantiate propagators beyond defaults #5355 @pichlermarc
- (user-facing): only a non-env-var based default is now used on
BasicTracerProvider#register().- propagators can now not be configured via
OTEL_PROPAGATORSorwindow.OTEL_PROPAGATORSanymore, please pass the propagator toNodeTracerProvider#register()instead. - if not configured directly via code,
BasicTracerProvider#register()will now fall back to defaults (tracecontextandbaggage)
- propagators can now not be configured via
- (user-facing): only a non-env-var based default is now used on
- feat(sdk-trace-node)!: drop ability to instantiate propagators beyond defaults #5355 @pichlermarc
- (user-facing): only a non-env-var based default is now used on
NodeTracerProvider#register().- propagators can now not be configured via
OTEL_PROPAGATORSanymore, please pass the propagator toNodeTracerProvider#register()instead. - if not configured via code,
NodeTracerProvider#register()will now fall back to the defaults (tracecontextandbaggage) - if autoconfiguration based on enviornment variables is needed, please use
NodeSDKfrom@opentelemetry/sdk-node.
- propagators can now not be configured via
- (user-facing): only a non-env-var based default is now used on
- feat(sdk-trace-web)!: drop ability to instantiate propagators beyond defaults #5355 @pichlermarc
- (user-facing): only a non-env-var based default is now used on
WebTracerProvider#register().- propagators can now not be configured via
window.OTEL_PROPAGATORSanymore, please pass the propagator toWebTracerProvider#register()instead. - if not configured via code,
WebTracerProvider#register()will now fall back to defaults (tracecontextandbaggage)
- propagators can now not be configured via
- (user-facing): only a non-env-var based default is now used on
- feat(sdk-trace)!: drop unnecessary exports #5405 @pichlermarc
- (user-facing):
EXPORTER_FACTORYis not used anymore and has been removed - (user-facing):
PROPAGATOR_FACTORYis not used anymore and has been removed - (user-facing):
ForceFlushStatewas intended for internal use and has been removed - (user-facing): the
Tracerclass was unintentionally exported and has been removed- to obtain a
Tracer, please useBasicTracerProvider#getTracer(),NodeTracerProvider#getTracer()orWebTracerProvider#getTracer() - to reference a
Tracer, please use theTracertype from@opentelemetry/api
- to obtain a
- (user-facing):
- chore!: Raise the minimum supported Node.js version to
^18.19.0 || >=20.6.0. Support for Node.js 14, 16, and early minor versions of 18 and 20 have been dropped. This applies to all packages except the 'api' and 'semantic-conventions' packages. #5395 @trentm - feat(core)!: remove TracesSamplerValues from exports #5406 @pichlermarc
- (user-facing): TracesSamplerValues was only consumed internally and has been removed from exports without replacement
- chore(resources)!: Remove deprecated duplicate browser detector from
@opentelemetry/resourcein favor of@opentelemetry/opentelemetry-browser-detector#5420 - feat(core)!: remove unused and obsolete functions and types #5444 @pichlermarc
- (user-facing):
VERSIONwas an internal constant that was unintentionally exported. It has been removed without replacement. - (user-facing):
isWrappedhas been removed in favor ofisWrappedfrom@opentelemetry/instrumentation - (user-facing):
ShimWrappedhas been removed in favor ofShimWrappedfrom@opentelemetry/instrumentation - (user-facing):
hexToBase64was a utility function that is not used by the SDK anymore. It has been removed without replacement. - (user-facing):
hexToBinarywas a utility function that now internal to@opentelemetry/otlp-tranformer. It has been removed without replacement. - (user-facing):
baggageUtils.getKeyPariswas an internal utility function that was unintentionally exported. It has been removed without replacement. - (user-facing):
baggageUtils.serializeKeyPairswas an internal utility function that was unintentionally exported. It has been removed without replacement. - (user-facing):
baggageUtils.parseKeyPairsIntoRecord,has been removed in favor ofparseKeyPairsIntoRecord - (user-facing):
baggageUtils.parsePairKeyValuewas an internal utility function that was unintentionally exported. It has been removed without replacement. - (user-facing):
TimeOriginLegacyhas been removed without replacement. - (user-facing):
isAttributeKeywas an internal utility function that was unintentionally exported. It has been removed without replacement.
- (user-facing):
- feat(sdk-trace-base)!: do not read environment variables from window in browsers #5445 @pichlermarc
- (user-facing): all configuration previously possible via
window.OTEL_*is now not supported anymore, please pass configuration options to constructors instead. - Note: Node.js environment variable configuration continues to work as-is.
- (user-facing): all configuration previously possible via
- feat(exporter-zipkin)!: do not read environment variables from window in browsers #5465 @pichlermarc
- (user-facing): all configuration previously possible via
window.OTEL_*is now not supported anymore, please pass configuration options to constructors instead. - Note: Node.js environment variable configuration continues to work as-is.
- (user-facing): all configuration previously possible via
- feat(resource)!: Remove resource class export in favor of functions and types only to aid in cross-version compatibility #5421
- Renames
Resourceclass toResourceImpland makes it package-private - Renames
IResourceinterface toResource - Export function
resourceFromAttributesto create aResourcefrom aDetectedAttributesobject - Export function
defaultResourceto create a default resource #5467 @pichlermarc - Export function
emptyResourceto create an empty resource #5467 @pichlermarc - Only export types and functions. This aids in cross-version compatibility and makes it more easily extensible in the future.
- Renames
- feat(resources)!: do not read environment variables from window in browsers #5466 @pichlermarc
- (user-facing): all configuration previously possible via
window.OTEL_*is now not supported anymore- If you have been using the
envDetectorin browser environments, please migrate to manually creating a resource. - Note: Node.js environment variable configuration continues to work as-is.
- If you have been using the
- (user-facing): all configuration previously possible via
- fix(sdk-trace-base)!: use
ParentBasedAlwaysOnSampleroverAlwaysOnSamplerwhen bogus data is supplied toOTEL_TRACES_SAMPLER- this aligns the SDK implementation with the specification
- feat(core)!: drop
getEnv(),getEnvWithoutDefaults()#5481 @pichlermarc- (user-facing):
getEnv()has been replaced bygetStringFromEnv(),getNumberFromEnv(),getBooleanFromEnv(),getStringListFromEnv()- these new functions do not include defaults, please inline any defaults if necessary (example:
getStringFromEnv("OTEL_FOO") ?? "my-default") - to find the previously used defaults, please see here
- these new functions do not include defaults, please inline any defaults if necessary (example:
- (user-facing):
getEnvWithoutDefaults()has been replaced bygetStringFromEnv(),getNumberFromEnv(),getBooleanFromEnv(),getStringListFromEnv() - (user-facing):
DEFAULT_ENVIRONMENThas been removed, please inline any defaults from now on- to find the previously used defaults, please see here
- (user-facing):
ENVIRONMENThas been removed without replacement - (user-facing):
RAW_ENVIRONMENThas been removed without replacement - (user-facing):
parseEnvironmenthas been removed without replacement
- (user-facing):
- feat(sdk-trace-base): remove
BasicTracerProvider#register()to improve tree-shaking #5503 @pichlermarc- (user-facing):
BasicTracerProvider#register()has been removed- to register a global propagator, please use
propagation.setGlobalPropagator()from@opentelemetry/api - to register a global context manager, please use
context.setGlobalContextManager()from@opentelemetry/api
- to register a global propagator, please use
- (user-facing):
- feat!: set compilation target to ES2022 for all packages except
@opentelemetry/api,@opentelemetry/api-logs,@opentelemetry/api-events, and@opentelemetry/semantic-conventions#5456 @david-luna- (user-facing): drops browser runtimes which do not support ES2022 features
- feat(core)! drop unused constants #5504 @pichlermarc
- (user-facing):
DEFAULT_ATTRIBUTE_VALUE_LENTGHT_LIMIThas been removed, please useInfinityinstead - (user-facing):
DEFAULT_ATTRIBUTE_VALUE_COUNT_LIMIThas been removed, please use128instead - (user-facing):
DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIThas been removed, please use128instead - (user-facing):
DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIThas been removed, please use128instead
- (user-facing):
🚀 (Enhancement)
- feat(sdk-trace-web): do not throw when passing extra options #5357 @pichlermarc
WebTracerProviderconstructor now does not throw anymore whencontextManagerorpropagatorare passed as extra options to the constructor
- feat(sdk-trace-base): add stack trace warning to debug instrumentation #5363 @neilfordyce
- feat(core): add more scalable replacements for getEnv(), getEnvWithoutDefaults() #5443 @pichlermarc
- refactor(exporter-jaeger): migrate away from getEnv() #5464 @pichlermarc
- feat(core): add
diagLogLevelFromStringutility #5475 @pichlermarc
🐛 (Bug Fix)
- fix(exporter-zipkin): remove usages of deprecated
url.parsefromnode:url#5390 @chancancode - fix(sdk-metrics): do not export from
PeriodicExportingMetricReaderwhen there are no metrics to export. #5288 @JacksonWeber - fix(sdk-trace-base): always wait on pending export in SimpleSpanProcessor. #5303 @anuraaga
- fix(core): avoid using util in configuration.ts for browser compatibility #5524 @sriraamas
🏠 (Internal)
- refactor(sdk-metrics): the internal
InstrumentDescriptortype now extendsMetricDescriptor; moved publicInstrumentTypetype enum into./src/export/MetricData.ts#5277 - refactor(sdk-metrics): remove
GaugeandMetricAdviceworkaround types in favor of the upstream@opentelemetry/apitypes #5254 @chancancode - chore: remove checks for unsupported node versions #4341 @dyladan
- refactor(sdk-trace-base): remove
BasicTracerProvider._registeredSpanProcessorsprivate property. #5134 @david-luna - refactor(sdk-trace-base): rename
BasicTracerProvider.activeSpanProcessorprivate property. #5211 @david-luna - chore(selenium-tests): remove internal selenium-tests/ package, it wasn't being used @trentm
- chore: update typescript
modulecompiler option tonode16. #5347 @david-luna - feat(opentelemetry-instrumentation): replace
semverpackage with internal semantic versioning check implementation to get rid ofsemverpackage initialization overhead especially in the AWS Lambda environment during coldstart #5305 @serkan-ozal - chore: unpin
@opentelemetry/semantic-conventionsdep to allow better de-duplication in installs #5439 @trentm