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.0
are compatible with this release
💥 Breaking Change
- feat(sdk-trace-base)!: Add
parentSpanContext
and removeparentSpanId
fromSpan
andReadableSpan
#5450 @JacksonWeber- (user-facing): the SDK's
Span
sparentSpanId
was replaced byparentSpanContext
, to migrate to the new property, please replacespan.parentSpanId
->span.parentSpanContext?.spanId
- (user-facing): the SDK's
- feat(sdk-metrics)!: drop deprecated
type
field onMetricDescriptor
#5291 @chancancode - feat(sdk-metrics)!: drop deprecated
InstrumentDescriptor
type; useMetricDescriptor
instead #5277 @chancancode - feat(sdk-metrics)!: bump minimum version of
@opentelemetry/api
peer 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
SpanAttributes
withAttributes
#5009 @david-luna - refactor(resources)!: replace
ResourceAttributes
withAttributes
#5016 @david-luna - feat(sdk-metrics)!: drop
View
andAggregation
in favor ofViewOptions
andAggregationOption
#4931 @pichlermarc - refactor(sdk-trace-base)!: remove
new Span
constructor in favor ofTracer.startSpan
API #5048 @david-luna - refactor(sdk-trace-base)!: remove
BasicTracerProvider.addSpanProcessor
API in favor of constructor options. #5134 @david-luna - refactor(sdk-trace-base)!: make
resource
property private inBasicTracerProvider
and removegetActiveSpanProcessor
API. #5192 @david-luna - feat(sdk-metrics)!: extract
IMetricReader
interface and use it over abstract class #5311- (user-facing):
MeterProviderOptions
now provides the more generalIMetricReader
type overMetricReader
- If you accept
MetricReader
in your public interface, consider accepting the more generalIMetricReader
instead 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 withSpanProcessor
s.- This functionality has been removed - users may now pass
SpanProcessor
s to the base class constructor when extending - (user-facing):
_registeredExporters
has been removed - (user-facing):
_getSpanExporter
has been removed - (user-facing):
_buildExporterFromEnv
has been removed
- This functionality has been removed - users may now pass
- When extending
- feat(core)!: remove deprecated
IdGenerator
andRandomIdGenerator
#5309 @pichlermarc - feat(core)!: remove deprecated type
InstrumentationLibrary
#5308 @pichlermarc- (user-facing): please use equivalent type
InstrumentationScope
instead
- (user-facing): please use equivalent type
- feat(sdk-trace-base)!: replace usages fo
InstrumentationLibrary
withInstrumentationScope
#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.instrumentationScope
overReadableSpan.instrumentationLibrary
#5308 @pichlermarc - feat(exporter-zipkin): use
ReadableSpan.instrumentationScope
overReadableSpan.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
typescript
in 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
AlwaysOnSampler
has moved to@opentelemetry/sdk-trace-base
- (user-facing): deprecated
AlwaysOffSampler
has moved to@opentelemetry/sdk-trace-base
- (user-facing): deprecated
ParentBasedSampler
has moved to@opentelemetry/sdk-trace-base
- (user-facing): deprecated
TraceIdRatioSampler
has 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
attributes
object - 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
DetectedResource
plain 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_PROPAGATORS
orwindow.OTEL_PROPAGATORS
anymore, please pass the propagator toNodeTracerProvider#register()
instead. - if not configured directly via code,
BasicTracerProvider#register()
will now fall back to defaults (tracecontext
andbaggage
)
- 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_PROPAGATORS
anymore, please pass the propagator toNodeTracerProvider#register()
instead. - if not configured via code,
NodeTracerProvider#register()
will now fall back to the defaults (tracecontext
andbaggage
) - if autoconfiguration based on enviornment variables is needed, please use
NodeSDK
from@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_PROPAGATORS
anymore, please pass the propagator toWebTracerProvider#register()
instead. - if not configured via code,
WebTracerProvider#register()
will now fall back to defaults (tracecontext
andbaggage
)
- 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_FACTORY
is not used anymore and has been removed - (user-facing):
PROPAGATOR_FACTORY
is not used anymore and has been removed - (user-facing):
ForceFlushState
was intended for internal use and has been removed - (user-facing): the
Tracer
class was unintentionally exported and has been removed- to obtain a
Tracer
, please useBasicTracerProvider#getTracer()
,NodeTracerProvider#getTracer()
orWebTracerProvider#getTracer()
- to reference a
Tracer
, please use theTracer
type 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/resource
in favor of@opentelemetry/opentelemetry-browser-detector
#5420 - feat(core)!: remove unused and obsolete functions and types #5444 @pichlermarc
- (user-facing):
VERSION
was an internal constant that was unintentionally exported. It has been removed without replacement. - (user-facing):
isWrapped
has been removed in favor ofisWrapped
from@opentelemetry/instrumentation
- (user-facing):
ShimWrapped
has been removed in favor ofShimWrapped
from@opentelemetry/instrumentation
- (user-facing):
hexToBase64
was a utility function that is not used by the SDK anymore. It has been removed without replacement. - (user-facing):
hexToBinary
was a utility function that now internal to@opentelemetry/otlp-tranformer
. It has been removed without replacement. - (user-facing):
baggageUtils.getKeyParis
was an internal utility function that was unintentionally exported. It has been removed without replacement. - (user-facing):
baggageUtils.serializeKeyPairs
was 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.parsePairKeyValue
was an internal utility function that was unintentionally exported. It has been removed without replacement. - (user-facing):
TimeOriginLegacy
has been removed without replacement. - (user-facing):
isAttributeKey
was 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
Resource
class toResourceImpl
and makes it package-private - Renames
IResource
interface toResource
- Export function
resourceFromAttributes
to create aResource
from aDetectedAttributes
object - Export function
defaultResource
to create a default resource #5467 @pichlermarc - Export function
emptyResource
to 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
envDetector
in 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
ParentBasedAlwaysOnSampler
overAlwaysOnSampler
when 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_ENVIRONMENT
has been removed, please inline any defaults from now on- to find the previously used defaults, please see here
- (user-facing):
ENVIRONMENT
has been removed without replacement - (user-facing):
RAW_ENVIRONMENT
has been removed without replacement - (user-facing):
parseEnvironment
has 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_LIMIT
has been removed, please useInfinity
instead - (user-facing):
DEFAULT_ATTRIBUTE_VALUE_COUNT_LIMIT
has been removed, please use128
instead - (user-facing):
DEFAULT_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT
has been removed, please use128
instead - (user-facing):
DEFAULT_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT
has been removed, please use128
instead
- (user-facing):
🚀 (Enhancement)
- feat(sdk-trace-web): do not throw when passing extra options #5357 @pichlermarc
WebTracerProvider
constructor now does not throw anymore whencontextManager
orpropagator
are 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
diagLogLevelFromString
utility #5475 @pichlermarc
🐛 (Bug Fix)
- fix(exporter-zipkin): remove usages of deprecated
url.parse
fromnode:url
#5390 @chancancode - fix(sdk-metrics): do not export from
PeriodicExportingMetricReader
when 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
InstrumentDescriptor
type now extendsMetricDescriptor
; moved publicInstrumentType
type enum into./src/export/MetricData.ts
#5277 - refactor(sdk-metrics): remove
Gauge
andMetricAdvice
workaround types in favor of the upstream@opentelemetry/api
types #5254 @chancancode - chore: remove checks for unsupported node versions #4341 @dyladan
- refactor(sdk-trace-base): remove
BasicTracerProvider._registeredSpanProcessors
private property. #5134 @david-luna - refactor(sdk-trace-base): rename
BasicTracerProvider.activeSpanProcessor
private property. #5211 @david-luna - chore(selenium-tests): remove internal selenium-tests/ package, it wasn't being used @trentm
- chore: update typescript
module
compiler option tonode16
. #5347 @david-luna - feat(opentelemetry-instrumentation): replace
semver
package with internal semantic versioning check implementation to get rid ofsemver
package initialization overhead especially in the AWS Lambda environment during coldstart #5305 @serkan-ozal - chore: unpin
@opentelemetry/semantic-conventions
dep to allow better de-duplication in installs #5439 @trentm