Added
opentelemetry-exporter-richconsole: Add support for suppressing resource information (#3898)opentelemetry-instrumentation: Add experimental metrics attributes Labeler utility (#4288)opentelemetry-instrumentation-logging: AddOTEL_PYTHON_LOG_HANDLER_LEVELandOTEL_PYTHON_LOG_FORMATenvironment variables to configure the log level and formatter of the auto-instrumentedLoggingHandler. (#4298)opentelemetry-instrumentation-sqlite3: Add uninstrument, error status, suppress, and no-op tests (#4335)- Add
BaggageLogProcessortoopentelemetry-processor-baggage(#4371) opentelemetry-instrumentation-system-metrics: Add support forprocess.disk.iometric in system-metrics instrumentation (#4397)opentelemetry-instrumentation: RegisterOTEL_SEMCONV_STABILITY_OPT_INinenvironment_variables.pysoopentelemetry-instrumentexposes a--semconv_stability_opt_inCLI argument (#4438)- Expand
AGENTS.mdwith instrumentation/GenAI guidance and add PR review instructions. (#4457) opentelemetry-instrumentation: update auto-instrumentation to re-inject instrumentation path after init (#4469)opentelemetry-instrumentation-dbapi: Add Database client operation duration and returned rows metrics (#4481)
Changed
- Remove redundant
pylint: disable=attribute-defined-outside-initcomments and add rule to global.pylintrcdisable list (#3839) - Bump
pylintto4.0.5(#4244) opentelemetry-instrumentation-logging: UseLogRecord.getMessage()to format and extract each log record's body text to more closely match the expected usage of the logging system. As a result, all OTel log record bodies are now always strings. Previously, ifLogRecord.msg(which contains the format string) was set to a non-string object (e.g.logger.warning(some_dict)), the object was exported as-is to the OTLP body field. Now,LogRecord.getMessage()will convert it to to a string. If you are passing in non-strings as the format string argument and your backend is expecting them as-is, you will need to update accordingly. (#4372)- Switch to SPDX license headers and add CI enforcement (#4533)
opentelemetry-instrumentation-{urllib,urllib3,requests}: switch http mock library from abandoned httpretty to mocket (#4583)
Removed
- Drop Python 3.9 support (#4412)
Fixed
opentelemetry-instrumentation-aiohttp-server: Usecanonicalattribute of theResourceas a span name (#3896)- Refactor unit tests to allow for population of the random trace id flag in the
traceparentheader (#4030) opentelemetry-instrumentation-aws-lambda: fix improper handling of header casing (#4216)opentelemetry-instrumentation-flask: Clean up environ keys in_teardown_requestto prevent duplicate execution (#4341)opentelemetry-instrumentation-celery: Coerce non-string values to strings inCeleryGetter.get()to preventTypeErrorinTraceState.from_header()when Celery request attributes contain ints (#4360)opentelemetry-instrumentation-celery: Coerce timelimit values to strings inset_attributes_from_context()to prevent mixed-type span attribute warning (#4361)opentelemetry-instrumentation-fastapi: FixFastAPIinstrumentation to correctly traceBackgroundTasksby wrapping their execution in a dedicated span, ensuring proper parent-child relationships and accurate trace timing (#4368)opentelemetry-instrumentation-flask: Stop reading the deprecated (from 3.1)flask.__version__attribute; resolve the Flask version viaimportlib.metadata(#4422)opentelemetry-instrumentation-confluent-kafka: Populateserver.addressandserver.portspan attributes from the producer/consumerbootstrap.serversconfig; previouslyKafkaPropertiesExtractor.extract_bootstrap_serverswas defined but never called (#4423)opentelemetry-instrumentation-dbapiUseObjectProxyinstead ofBaseObjectProxyforTracedCursorProxyto restore iterability with wrapt 2.x (#4427)opentelemetry-instrumentation-pyramid: add missinghttp.response.status_codein duration metrics for stable http semantic conventions (#4448)opentelemetry-instrumentation-pikaUseObjectProxyinstead ofBaseObjectProxyforReadyMessagesDequeProxyto restore iterability with wrapt 2.x (#4461)docker-tests: Don't require sudo, debian based distro and MS SQL ODBC driver to run locally. Instead require docker and unixodbc (#4478)opentelemetry-instrumentation-celery: clear completed task ids fromtask_id_to_start_time(#4504)opentelemetry-instrumentation-celery: add null guards and type-safe helper handling around Celery context propagation internals (#4505)opentelemetry-instrumentation-wsgi: usePATH_INFOandQUERY_STRINGfor URL attributes instead of parsingRAW_URIorREQUEST_URI(#4551)opentelemetry-instrumentation-mysqlclient: Update unit tests to properly validate trace context trace flag values. (#4560)opentelemetry-instrumentation-pika: pass destination to_enrich_spaninstead oftask_name(#4563)opentelemetry-instrumentation-tornado: reduce cardinality of span names and metrics attributes. This introduces a breaking change in the metrics attributes for the stable semantic convention by dropping the out of specurl.queryandurl.pathattributes in favor of in-spechttp.route. (#4577)opentelemetry-instrumentation-confluent-kafka: Declareopentelemetry-semantic-conventionsas a direct dependency (#4590)opentelemetry-instrumentation-pymssql: Fix semconv stability migration for connection attributes (host, port, user) set inwrapped_connection()to respectOTEL_SEMCONV_STABILITY_OPT_IN. Note:net.peer.portis now emitted asintinstead ofstringin default mode, aligning with other DB instrumentations. (#4592)- Declare
opentelemetry-semantic-conventionsas a direct dependency for the aio-pika, logging, pika and system-metrics instrumentations, since each importsopentelemetry.semconvdirectly. (#4594)