diff --git a/CHANGELOG.md b/CHANGELOG.md index f4fb7ec489..da8f01646d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Update log export example to not use root logger ([#4090](https://github.com/open-telemetry/opentelemetry-python/pull/4090)) - sdk: Add OS resource detector ([#3992](https://github.com/open-telemetry/opentelemetry-python/pull/3992)) +- Update semantic conventions to version 1.27.0 + ([#4104](https://github.com/open-telemetry/opentelemetry-python/pull/4104)) ## Version 1.26.0/0.47b0 (2024-07-25) diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/artifact_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/artifact_attributes.py new file mode 100644 index 0000000000..28921f7e29 --- /dev/null +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/artifact_attributes.py @@ -0,0 +1,62 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import Final + +ARTIFACT_ATTESTATION_FILENAME: Final = "artifact.attestation.filename" +""" +The provenance filename of the built attestation which directly relates to the build artifact filename. This filename SHOULD accompany the artifact at publish time. See the [SLSA Relationship](https://slsa.dev/spec/v1.0/distributing-provenance#relationship-between-artifacts-and-attestations) specification for more information. +""" + +ARTIFACT_ATTESTATION_HASH: Final = "artifact.attestation.hash" +""" +The full [hash value (see glossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf), of the built attestation. Some envelopes in the software attestation space also refer to this as the [digest](https://github.com/in-toto/attestation/blob/main/spec/README.md#in-toto-attestation-framework-spec). +""" + +ARTIFACT_ATTESTATION_ID: Final = "artifact.attestation.id" +""" +The id of the build [software attestation](https://slsa.dev/attestation-model). +""" + +ARTIFACT_FILENAME: Final = "artifact.filename" +""" +The human readable file name of the artifact, typically generated during build and release processes. Often includes the package name and version in the file name. +Note: This file name can also act as the [Package Name](https://slsa.dev/spec/v1.0/terminology#package-model) +in cases where the package ecosystem maps accordingly. +Additionally, the artifact [can be published](https://slsa.dev/spec/v1.0/terminology#software-supply-chain) +for others, but that is not a guarantee. +""" + +ARTIFACT_HASH: Final = "artifact.hash" +""" +The full [hash value (see glossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf), often found in checksum.txt on a release of the artifact and used to verify package integrity. +Note: The specific algorithm used to create the cryptographic hash value is +not defined. In situations where an artifact has multiple +cryptographic hashes, it is up to the implementer to choose which +hash value to set here; this should be the most secure hash algorithm +that is suitable for the situation and consistent with the +corresponding attestation. The implementer can then provide the other +hash values through an additional set of attribute extensions as they +deem necessary. +""" + +ARTIFACT_PURL: Final = "artifact.purl" +""" +The [Package URL](https://github.com/package-url/purl-spec) of the [package artifact](https://slsa.dev/spec/v1.0/terminology#package-model) provides a standard way to identify and locate the packaged artifact. +""" + +ARTIFACT_VERSION: Final = "artifact.version" +""" +The version of the artifact. +""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/az_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/az_attributes.py new file mode 100644 index 0000000000..f9b64662b9 --- /dev/null +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/az_attributes.py @@ -0,0 +1,20 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import Final + +AZ_SERVICE_REQUEST_ID: Final = "az.service_request_id" +""" +The unique identifier of the service request. It's generated by the Azure service and returned with the response. +""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cicd_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cicd_attributes.py new file mode 100644 index 0000000000..f761ddf7fa --- /dev/null +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cicd_attributes.py @@ -0,0 +1,55 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from enum import Enum +from typing import Final + +CICD_PIPELINE_NAME: Final = "cicd.pipeline.name" +""" +The human readable name of the pipeline within a CI/CD system. +""" + +CICD_PIPELINE_RUN_ID: Final = "cicd.pipeline.run.id" +""" +The unique identifier of a pipeline run within a CI/CD system. +""" + +CICD_PIPELINE_TASK_NAME: Final = "cicd.pipeline.task.name" +""" +The human readable name of a task within a pipeline. Task here most closely aligns with a [computing process](https://en.wikipedia.org/wiki/Pipeline_(computing)) in a pipeline. Other terms for tasks include commands, steps, and procedures. +""" + +CICD_PIPELINE_TASK_RUN_ID: Final = "cicd.pipeline.task.run.id" +""" +The unique identifier of a task run within a pipeline. +""" + +CICD_PIPELINE_TASK_RUN_URL_FULL: Final = "cicd.pipeline.task.run.url.full" +""" +The [URL](https://en.wikipedia.org/wiki/URL) of the pipeline run providing the complete address in order to locate and identify the pipeline run. +""" + +CICD_PIPELINE_TASK_TYPE: Final = "cicd.pipeline.task.type" +""" +The type of the task within a pipeline. +""" + + +class CicdPipelineTaskTypeValues(Enum): + BUILD = "build" + """build.""" + TEST = "test" + """test.""" + DEPLOY = "deploy" + """deploy.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cloud_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cloud_attributes.py index 507aac0aea..03856218d9 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cloud_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cloud_attributes.py @@ -55,7 +55,7 @@ * **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html). Take care not to use the "invoked ARN" directly but replace any [alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) - with the resolved function version, as the same runtime instance may be invokable with + with the resolved function version, as the same runtime instance may be invocable with multiple different aliases. * **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names) * **Azure:** The [Fully Qualified Resource ID](https://docs.microsoft.com/rest/api/resources/resources/get-by-id) of the invoked function, diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/container_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/container_attributes.py index c83847ed03..874e5c0058 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/container_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/container_attributes.py @@ -15,6 +15,8 @@ from enum import Enum from typing import Final +from deprecated import deprecated + CONTAINER_COMMAND: Final = "container.command" """ The command used to run the container (i.e. the command name). @@ -33,7 +35,7 @@ CONTAINER_CPU_STATE: Final = "container.cpu.state" """ -The CPU state for this data point. +Deprecated: Replaced by `cpu.mode`. """ CONTAINER_ID: Final = "container.id" @@ -86,6 +88,7 @@ """ +@deprecated(reason="The attribute container.cpu.state is deprecated - Replaced by `cpu.mode`") # type: ignore class ContainerCpuStateValues(Enum): USER = "user" """When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode (Windows).""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cpu_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cpu_attributes.py new file mode 100644 index 0000000000..8fcaef32ef --- /dev/null +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/cpu_attributes.py @@ -0,0 +1,40 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from enum import Enum +from typing import Final + +CPU_MODE: Final = "cpu.mode" +""" +The mode of the CPU. +""" + + +class CpuModeValues(Enum): + USER = "user" + """user.""" + SYSTEM = "system" + """system.""" + NICE = "nice" + """nice.""" + IDLE = "idle" + """idle.""" + IOWAIT = "iowait" + """iowait.""" + INTERRUPT = "interrupt" + """interrupt.""" + STEAL = "steal" + """steal.""" + KERNEL = "kernel" + """kernel.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/db_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/db_attributes.py index 7263e7b9e6..0c54f474b9 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/db_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/db_attributes.py @@ -15,6 +15,8 @@ from enum import Enum from typing import Final +from deprecated import deprecated + DB_CASSANDRA_CONSISTENCY_LEVEL: Final = "db.cassandra.consistency_level" """ The consistency level of the query. Based on consistency values from [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html). @@ -52,21 +54,32 @@ Deprecated: Replaced by `db.collection.name`. """ +DB_CLIENT_CONNECTION_POOL_NAME: Final = "db.client.connection.pool.name" +""" +The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn't provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it. +""" + +DB_CLIENT_CONNECTION_STATE: Final = "db.client.connection.state" +""" +The state of a connection in the pool. +""" + DB_CLIENT_CONNECTIONS_POOL_NAME: Final = "db.client.connections.pool.name" """ -The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn't provide a name, instrumentation should use a combination of `server.address` and `server.port` attributes formatted as `server.address:server.port`. +Deprecated: Replaced by `db.client.connection.pool.name`. """ DB_CLIENT_CONNECTIONS_STATE: Final = "db.client.connections.state" """ -The state of a connection in the pool. +Deprecated: Replaced by `db.client.connection.state`. """ DB_COLLECTION_NAME: Final = "db.collection.name" """ The name of a collection (table, container) within the database. -Note: If the collection name is parsed from the query, it SHOULD match the value provided in the query and may be qualified with the schema and database name. -It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. +Note: It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. +If the collection name is parsed from the query text, it SHOULD be the first collection name found in the query and it SHOULD match the value provided in the query text including any schema and database name prefix. +For batch operations, if the individual operations are known to have the same collection name then that collection name SHOULD be used, otherwise `db.collection.name` SHOULD NOT be captured. """ DB_CONNECTION_STRING: Final = "db.connection_string" @@ -118,7 +131,7 @@ DB_ELASTICSEARCH_CLUSTER_NAME: Final = "db.elasticsearch.cluster.name" """ -Represents the identifier of an Elasticsearch cluster. +Deprecated: Replaced by `db.namespace`. """ DB_ELASTICSEARCH_NODE_NAME: Final = "db.elasticsearch.node.name" @@ -170,15 +183,23 @@ Deprecated: Replaced by `db.operation.name`. """ +DB_OPERATION_BATCH_SIZE: Final = "db.operation.batch.size" +""" +The number of queries included in a [batch operation](/docs/database/database-spans.md#batch-operations). +Note: Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`. +""" + DB_OPERATION_NAME: Final = "db.operation.name" """ The name of the operation or command being executed. Note: It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. +If the operation name is parsed from the query text, it SHOULD be the first operation name found in the query. +For batch operations, if the individual operations are known to have the same operation name then that operation name SHOULD be used prepended by `BATCH `, otherwise `db.operation.name` SHOULD be `BATCH` or some other database system specific term if more applicable. """ DB_QUERY_PARAMETER_TEMPLATE: Final = "db.query.parameter" """ -The query parameters used in `db.query.text`, with `` being the parameter name, and the attribute value being the parameter value. +A query parameter used in `db.query.text`, with `` being the parameter name, and the attribute value being a string representation of the parameter value. Note: Query parameters should only be captured when `db.query.text` is parameterized with placeholders. If a parameter has no name and instead is referenced only by index, then `` SHOULD be the 0-based index. """ @@ -186,6 +207,9 @@ DB_QUERY_TEXT: Final = "db.query.text" """ The database query being executed. +Note: For sanitization see [Sanitization of `db.query.text`](../../docs/database/database-spans.md#sanitization-of-dbquerytext). +For batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable. +Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk. """ DB_REDIS_DATABASE_INDEX: Final = "db.redis.database_index" @@ -240,6 +264,14 @@ class DbCassandraConsistencyLevelValues(Enum): """local_serial.""" +class DbClientConnectionStateValues(Enum): + IDLE = "idle" + """idle.""" + USED = "used" + """used.""" + + +@deprecated(reason="The attribute db.client.connections.state is deprecated - Replaced by `db.client.connection.state`") # type: ignore class DbClientConnectionsStateValues(Enum): IDLE = "idle" """idle.""" @@ -290,105 +322,109 @@ class DbCosmosdbOperationTypeValues(Enum): class DbSystemValues(Enum): OTHER_SQL = "other_sql" """Some other SQL database. Fallback only. See notes.""" - MSSQL = "mssql" - """Microsoft SQL Server.""" - MSSQLCOMPACT = "mssqlcompact" - """Microsoft SQL Server Compact.""" - MYSQL = "mysql" - """MySQL.""" - ORACLE = "oracle" - """Oracle Database.""" - DB2 = "db2" - """IBM Db2.""" - POSTGRESQL = "postgresql" - """PostgreSQL.""" - REDSHIFT = "redshift" - """Amazon Redshift.""" - HIVE = "hive" - """Apache Hive.""" - CLOUDSCAPE = "cloudscape" - """Cloudscape.""" - HSQLDB = "hsqldb" - """HyperSQL DataBase.""" - PROGRESS = "progress" - """Progress Database.""" - MAXDB = "maxdb" - """SAP MaxDB.""" - HANADB = "hanadb" - """SAP HANA.""" - INGRES = "ingres" - """Ingres.""" - FIRSTSQL = "firstsql" - """FirstSQL.""" - EDB = "edb" - """EnterpriseDB.""" - CACHE = "cache" - """InterSystems Caché.""" ADABAS = "adabas" """Adabas (Adaptable Database System).""" - FIREBIRD = "firebird" - """Firebird.""" + CACHE = "cache" + """Deprecated: Replaced by `intersystems_cache`.""" + INTERSYSTEMS_CACHE = "intersystems_cache" + """InterSystems Caché.""" + CASSANDRA = "cassandra" + """Apache Cassandra.""" + CLICKHOUSE = "clickhouse" + """ClickHouse.""" + CLOUDSCAPE = "cloudscape" + """Deprecated: Replaced by `other_sql`.""" + COCKROACHDB = "cockroachdb" + """CockroachDB.""" + COLDFUSION = "coldfusion" + """Deprecated: Removed.""" + COSMOSDB = "cosmosdb" + """Microsoft Azure Cosmos DB.""" + COUCHBASE = "couchbase" + """Couchbase.""" + COUCHDB = "couchdb" + """CouchDB.""" + DB2 = "db2" + """IBM Db2.""" DERBY = "derby" """Apache Derby.""" + DYNAMODB = "dynamodb" + """Amazon DynamoDB.""" + EDB = "edb" + """EnterpriseDB.""" + ELASTICSEARCH = "elasticsearch" + """Elasticsearch.""" FILEMAKER = "filemaker" """FileMaker.""" + FIREBIRD = "firebird" + """Firebird.""" + FIRSTSQL = "firstsql" + """Deprecated: Replaced by `other_sql`.""" + GEODE = "geode" + """Apache Geode.""" + H2 = "h2" + """H2.""" + HANADB = "hanadb" + """SAP HANA.""" + HBASE = "hbase" + """Apache HBase.""" + HIVE = "hive" + """Apache Hive.""" + HSQLDB = "hsqldb" + """HyperSQL DataBase.""" + INFLUXDB = "influxdb" + """InfluxDB.""" INFORMIX = "informix" """Informix.""" + INGRES = "ingres" + """Ingres.""" INSTANTDB = "instantdb" """InstantDB.""" INTERBASE = "interbase" """InterBase.""" MARIADB = "mariadb" """MariaDB.""" + MAXDB = "maxdb" + """SAP MaxDB.""" + MEMCACHED = "memcached" + """Memcached.""" + MONGODB = "mongodb" + """MongoDB.""" + MSSQL = "mssql" + """Microsoft SQL Server.""" + MSSQLCOMPACT = "mssqlcompact" + """Deprecated: Removed, use `other_sql` instead.""" + MYSQL = "mysql" + """MySQL.""" + NEO4J = "neo4j" + """Neo4j.""" NETEZZA = "netezza" """Netezza.""" + OPENSEARCH = "opensearch" + """OpenSearch.""" + ORACLE = "oracle" + """Oracle Database.""" PERVASIVE = "pervasive" """Pervasive PSQL.""" POINTBASE = "pointbase" """PointBase.""" + POSTGRESQL = "postgresql" + """PostgreSQL.""" + PROGRESS = "progress" + """Progress Database.""" + REDIS = "redis" + """Redis.""" + REDSHIFT = "redshift" + """Amazon Redshift.""" + SPANNER = "spanner" + """Cloud Spanner.""" SQLITE = "sqlite" """SQLite.""" SYBASE = "sybase" """Sybase.""" TERADATA = "teradata" """Teradata.""" - VERTICA = "vertica" - """Vertica.""" - H2 = "h2" - """H2.""" - COLDFUSION = "coldfusion" - """ColdFusion IMQ.""" - CASSANDRA = "cassandra" - """Apache Cassandra.""" - HBASE = "hbase" - """Apache HBase.""" - MONGODB = "mongodb" - """MongoDB.""" - REDIS = "redis" - """Redis.""" - COUCHBASE = "couchbase" - """Couchbase.""" - COUCHDB = "couchdb" - """CouchDB.""" - COSMOSDB = "cosmosdb" - """Microsoft Azure Cosmos DB.""" - DYNAMODB = "dynamodb" - """Amazon DynamoDB.""" - NEO4J = "neo4j" - """Neo4j.""" - GEODE = "geode" - """Apache Geode.""" - ELASTICSEARCH = "elasticsearch" - """Elasticsearch.""" - MEMCACHED = "memcached" - """Memcached.""" - COCKROACHDB = "cockroachdb" - """CockroachDB.""" - OPENSEARCH = "opensearch" - """OpenSearch.""" - CLICKHOUSE = "clickhouse" - """ClickHouse.""" - SPANNER = "spanner" - """Cloud Spanner.""" TRINO = "trino" """Trino.""" + VERTICA = "vertica" + """Vertica.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/deployment_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/deployment_attributes.py index 3890c5b71e..3909329c76 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/deployment_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/deployment_attributes.py @@ -12,16 +12,44 @@ # See the License for the specific language governing permissions and # limitations under the License. +from enum import Enum from typing import Final DEPLOYMENT_ENVIRONMENT: Final = "deployment.environment" """ +Deprecated: Deprecated, use `deployment.environment.name` instead. +""" + +DEPLOYMENT_ENVIRONMENT_NAME: Final = "deployment.environment.name" +""" Name of the [deployment environment](https://wikipedia.org/wiki/Deployment_environment) (aka deployment tier). -Note: `deployment.environment` does not affect the uniqueness constraints defined through +Note: `deployment.environment.name` does not affect the uniqueness constraints defined through the `service.namespace`, `service.name` and `service.instance.id` resource attributes. This implies that resources carrying the following attribute combinations MUST be considered to be identifying the same service: -* `service.name=frontend`, `deployment.environment=production` -* `service.name=frontend`, `deployment.environment=staging`. +* `service.name=frontend`, `deployment.environment.name=production` +* `service.name=frontend`, `deployment.environment.name=staging`. +""" + +DEPLOYMENT_ID: Final = "deployment.id" +""" +The id of the deployment. +""" + +DEPLOYMENT_NAME: Final = "deployment.name" +""" +The name of the deployment. +""" + +DEPLOYMENT_STATUS: Final = "deployment.status" """ +The status of the deployment. +""" + + +class DeploymentStatusValues(Enum): + FAILED = "failed" + """failed.""" + SUCCEEDED = "succeeded" + """succeeded.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/enduser_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/enduser_attributes.py index d7e58c8095..1fb02f8d54 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/enduser_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/enduser_attributes.py @@ -16,15 +16,15 @@ ENDUSER_ID: Final = "enduser.id" """ -Username or client_id extracted from the access token or [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in the inbound request from outside the system. +Deprecated: Replaced by `user.id` attribute. """ ENDUSER_ROLE: Final = "enduser.role" """ -Actual/assumed role the client is making the request under extracted from token or application security context. +Deprecated: Replaced by `user.roles` attribute. """ ENDUSER_SCOPE: Final = "enduser.scope" """ -Scopes or granted authorities the client currently possesses extracted from token or application security context. The value would come from the scope associated with an [OAuth 2.0 Access Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute value in a [SAML 2.0 Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html). +Deprecated: Removed. """ diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/event_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/event_attributes.py index 7950283d6a..24b16cf52b 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/event_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/event_attributes.py @@ -17,5 +17,5 @@ EVENT_NAME: Final = "event.name" """ Identifies the class / type of event. -Note: Event names are subject to the same rules as [attribute names](https://github.com/open-telemetry/opentelemetry-specification/tree/v1.33.0/specification/common/attribute-naming.md). Notably, event names are namespaced to avoid collisions and provide a clean separation of semantics for events in separate domains like browser, mobile, and kubernetes. +Note: Event names are subject to the same rules as [attribute names](/docs/general/attribute-naming.md). Notably, event names are namespaced to avoid collisions and provide a clean separation of semantics for events in separate domains like browser, mobile, and kubernetes. """ diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gcp_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gcp_attributes.py index 1a17e3ee2f..3dcd23f03c 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gcp_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gcp_attributes.py @@ -14,6 +14,12 @@ from typing import Final +GCP_CLIENT_SERVICE: Final = "gcp.client.service" +""" +Identifies the Google Cloud service for which the official client library is intended. +Note: Intended to be a stable identifier for Google Cloud client libraries that is uniform across implementation languages. The value should be derived from the canonical service domain for the service; for example, 'foo.googleapis.com' should result in a value of 'foo'. +""" + GCP_CLOUD_RUN_JOB_EXECUTION: Final = "gcp.cloud_run.job.execution" """ The name of the Cloud Run [execution](https://cloud.google.com/run/docs/managing/job-executions) being run for the Job, as set by the [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) environment variable. diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gen_ai_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gen_ai_attributes.py index cbdae684d6..9f8e13b16e 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gen_ai_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/gen_ai_attributes.py @@ -17,34 +17,60 @@ GEN_AI_COMPLETION: Final = "gen_ai.completion" """ -The full response received from the LLM. +The full response received from the GenAI model. Note: It's RECOMMENDED to format completions as JSON string matching [OpenAI messages format](https://platform.openai.com/docs/guides/text-generation). """ +GEN_AI_OPERATION_NAME: Final = "gen_ai.operation.name" +""" +The name of the operation being performed. +Note: If one of the predefined values applies, but specific system uses a different name it's RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value. +""" + GEN_AI_PROMPT: Final = "gen_ai.prompt" """ -The full prompt sent to an LLM. +The full prompt sent to the GenAI model. Note: It's RECOMMENDED to format prompts as JSON string matching [OpenAI messages format](https://platform.openai.com/docs/guides/text-generation). """ +GEN_AI_REQUEST_FREQUENCY_PENALTY: Final = "gen_ai.request.frequency_penalty" +""" +The frequency penalty setting for the GenAI request. +""" + GEN_AI_REQUEST_MAX_TOKENS: Final = "gen_ai.request.max_tokens" """ -The maximum number of tokens the LLM generates for a request. +The maximum number of tokens the model generates for a request. """ GEN_AI_REQUEST_MODEL: Final = "gen_ai.request.model" """ -The name of the LLM a request is being made to. +The name of the GenAI model a request is being made to. +""" + +GEN_AI_REQUEST_PRESENCE_PENALTY: Final = "gen_ai.request.presence_penalty" +""" +The presence penalty setting for the GenAI request. +""" + +GEN_AI_REQUEST_STOP_SEQUENCES: Final = "gen_ai.request.stop_sequences" +""" +List of sequences that the model will use to stop generating further tokens. """ GEN_AI_REQUEST_TEMPERATURE: Final = "gen_ai.request.temperature" """ -The temperature setting for the LLM request. +The temperature setting for the GenAI request. +""" + +GEN_AI_REQUEST_TOP_K: Final = "gen_ai.request.top_k" +""" +The top_k sampling setting for the GenAI request. """ GEN_AI_REQUEST_TOP_P: Final = "gen_ai.request.top_p" """ -The top_p sampling setting for the LLM request. +The top_p sampling setting for the GenAI request. """ GEN_AI_RESPONSE_FINISH_REASONS: Final = "gen_ai.response.finish_reasons" @@ -59,26 +85,69 @@ GEN_AI_RESPONSE_MODEL: Final = "gen_ai.response.model" """ -The name of the LLM a response was generated from. +The name of the model that generated the response. """ GEN_AI_SYSTEM: Final = "gen_ai.system" """ -The Generative AI product as identified by the client instrumentation. -Note: The actual GenAI product may differ from the one identified by the client. For example, when using OpenAI client libraries to communicate with Mistral, the `gen_ai.system` is set to `openai` based on the instrumentation's best knowledge. +The Generative AI product as identified by the client or server instrumentation. +Note: The `gen_ai.system` describes a family of GenAI models with specific model identified +by `gen_ai.request.model` and `gen_ai.response.model` attributes. + +The actual GenAI product may differ from the one identified by the client. +For example, when using OpenAI client libraries to communicate with Mistral, the `gen_ai.system` +is set to `openai` based on the instrumentation's best knowledge. + +For custom model, a custom friendly name SHOULD be used. +If none of these options apply, the `gen_ai.system` SHOULD be set to `_OTHER`. +""" + +GEN_AI_TOKEN_TYPE: Final = "gen_ai.token.type" +""" +The type of token being counted. """ GEN_AI_USAGE_COMPLETION_TOKENS: Final = "gen_ai.usage.completion_tokens" """ -The number of tokens used in the LLM response (completion). +Deprecated: Replaced by `gen_ai.usage.output_tokens` attribute. +""" + +GEN_AI_USAGE_INPUT_TOKENS: Final = "gen_ai.usage.input_tokens" +""" +The number of tokens used in the GenAI input (prompt). +""" + +GEN_AI_USAGE_OUTPUT_TOKENS: Final = "gen_ai.usage.output_tokens" +""" +The number of tokens used in the GenAI response (completion). """ GEN_AI_USAGE_PROMPT_TOKENS: Final = "gen_ai.usage.prompt_tokens" """ -The number of tokens used in the LLM prompt. +Deprecated: Replaced by `gen_ai.usage.input_tokens` attribute. """ +class GenAiOperationNameValues(Enum): + CHAT = "chat" + """Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat).""" + TEXT_COMPLETION = "text_completion" + """Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions).""" + + class GenAiSystemValues(Enum): OPENAI = "openai" """OpenAI.""" + VERTEX_AI = "vertex_ai" + """Vertex AI.""" + ANTHROPIC = "anthropic" + """Anthropic.""" + COHERE = "cohere" + """Cohere.""" + + +class GenAiTokenTypeValues(Enum): + INPUT = "input" + """Input tokens (prompt, input, etc.).""" + COMPLETION = "output" + """Output tokens (completion, response, etc.).""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/linux_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/linux_attributes.py new file mode 100644 index 0000000000..d10147d8b1 --- /dev/null +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/linux_attributes.py @@ -0,0 +1,28 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from enum import Enum +from typing import Final + +LINUX_MEMORY_SLAB_STATE: Final = "linux.memory.slab.state" +""" +The Linux Slab memory state. +""" + + +class LinuxMemorySlabStateValues(Enum): + RECLAIMABLE = "reclaimable" + """reclaimable.""" + UNRECLAIMABLE = "unreclaimable" + """unreclaimable.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/log_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/log_attributes.py index ae713923b4..7655bf6b7c 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/log_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/log_attributes.py @@ -40,6 +40,12 @@ The stream associated with the log. See below for a list of well-known values. """ +LOG_RECORD_ORIGINAL: Final = "log.record.original" +""" +The complete orignal Log Record. +Note: This value MAY be added when processing a Log Record which was originally transmitted as a string or equivalent data type AND the Body field of the Log Record does not contain the same value. (e.g. a syslog or a log record read from a file.). +""" + LOG_RECORD_UID: Final = "log.record.uid" """ A unique identifier for the Log Record. diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/messaging_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/messaging_attributes.py index 9ac4205caa..a5f422eb89 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/messaging_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/messaging_attributes.py @@ -29,6 +29,12 @@ # MESSAGING_CLIENT_ID : Final = "messaging.client_id" # Deprecated: Replaced by `messaging.client.id`. +MESSAGING_CONSUMER_GROUP_NAME: Final = "messaging.consumer.group.name" +""" +The name of the consumer group with which a consumer is associated. +Note: Semantic conventions for individual messaging systems SHOULD document whether `messaging.consumer.group.name` is applicable and what it means in the context of that system. +""" + MESSAGING_DESTINATION_ANONYMOUS: Final = "messaging.destination.anonymous" """ A boolean that is true if the message destination is anonymous (could be unnamed or have auto-generated name). @@ -48,6 +54,14 @@ The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`. """ +MESSAGING_DESTINATION_SUBSCRIPTION_NAME: Final = ( + "messaging.destination.subscription.name" +) +""" +The name of the destination subscription from which a message is consumed. +Note: Semantic conventions for individual messaging systems SHOULD document whether `messaging.destination.subscription.name` is applicable and what it means in the context of that system. +""" + MESSAGING_DESTINATION_TEMPLATE: Final = "messaging.destination.template" """ Low cardinality representation of the messaging destination name. @@ -63,23 +77,21 @@ "messaging.destination_publish.anonymous" ) """ -A boolean that is true if the publish message destination is anonymous (could be unnamed or have auto-generated name). +Deprecated: No replacement at this time. """ MESSAGING_DESTINATION_PUBLISH_NAME: Final = ( "messaging.destination_publish.name" ) """ -The name of the original destination the message was published to. -Note: The name SHOULD uniquely identify a specific queue, topic, or other entity within the broker. If -the broker doesn't have such notion, the original destination name SHOULD uniquely identify the broker. +Deprecated: No replacement at this time. """ MESSAGING_EVENTHUBS_CONSUMER_GROUP: Final = ( "messaging.eventhubs.consumer.group" ) """ -The name of the consumer group the event consumer is associated with. +Deprecated: Replaced by `messaging.consumer.group.name`. """ MESSAGING_EVENTHUBS_MESSAGE_ENQUEUED_TIME: Final = ( @@ -119,7 +131,7 @@ MESSAGING_KAFKA_CONSUMER_GROUP: Final = "messaging.kafka.consumer.group" """ -Name of the Kafka Consumer Group that is handling the message. Only applies to consumers, not producers. +Deprecated: Replaced by `messaging.consumer.group.name`. """ MESSAGING_KAFKA_DESTINATION_PARTITION: Final = ( @@ -137,7 +149,7 @@ MESSAGING_KAFKA_MESSAGE_OFFSET: Final = "messaging.kafka.message.offset" """ -The offset of a record in the corresponding Kafka partition. +Deprecated: Replaced by `messaging.kafka.offset`. """ MESSAGING_KAFKA_MESSAGE_TOMBSTONE: Final = "messaging.kafka.message.tombstone" @@ -145,6 +157,11 @@ A boolean that is true if the message is a tombstone. """ +MESSAGING_KAFKA_OFFSET: Final = "messaging.kafka.offset" +""" +The offset of a record in the corresponding Kafka partition. +""" + MESSAGING_MESSAGE_BODY_SIZE: Final = "messaging.message.body.size" """ The size of the message body in bytes. @@ -201,7 +218,7 @@ MESSAGING_ROCKETMQ_CLIENT_GROUP: Final = "messaging.rocketmq.client_group" """ -Name of the RocketMQ producer/consumer group that is handling the message. The client type is identified by the SpanKind. +Deprecated: Replaced by `messaging.consumer.group.name` on the consumer spans. No replacement for producer spans. """ MESSAGING_ROCKETMQ_CONSUMPTION_MODEL: Final = ( @@ -254,7 +271,7 @@ "messaging.servicebus.destination.subscription_name" ) """ -The name of the subscription in the topic messages are received from. +Deprecated: Replaced by `messaging.servicebus.destination.subscription_name`. """ MESSAGING_SERVICEBUS_DISPOSITION_STATUS: Final = ( @@ -292,10 +309,12 @@ class MessagingOperationTypeValues(Enum): """A message is created. "Create" spans always refer to a single message and are used to provide a unique creation context for messages in batch publishing scenarios.""" RECEIVE = "receive" """One or more messages are requested by a consumer. This operation refers to pull-based scenarios, where consumers explicitly call methods of messaging SDKs to receive messages.""" - DELIVER = "process" - """One or more messages are delivered to or processed by a consumer.""" + PROCESS = "process" + """One or more messages are processed by a consumer.""" SETTLE = "settle" """One or more messages are settled.""" + DELIVER = "deliver" + """Deprecated: Replaced by `process`.""" class MessagingRocketmqConsumptionModelValues(Enum): @@ -348,3 +367,5 @@ class MessagingSystemValues(Enum): """RabbitMQ.""" ROCKETMQ = "rocketmq" """Apache RocketMQ.""" + PULSAR = "pulsar" + """Apache Pulsar.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/network_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/network_attributes.py index 76b804a04d..354356d622 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/network_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/network_attributes.py @@ -168,6 +168,8 @@ class NetworkTransportValues(Enum): """Deprecated in favor of stable :py:const:`opentelemetry.semconv.attributes.network_attributes.NetworkTransportValues.PIPE`.""" UNIX = "unix" """Deprecated in favor of stable :py:const:`opentelemetry.semconv.attributes.network_attributes.NetworkTransportValues.UNIX`.""" + QUIC = "quic" + """QUIC.""" @deprecated(reason="Deprecated in favor of stable :py:const:`opentelemetry.semconv.attributes.network_attributes.NetworkTypeValues`.") # type: ignore diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/other_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/other_attributes.py index 82eda34bc5..510d792608 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/other_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/other_attributes.py @@ -19,11 +19,11 @@ STATE: Final = "state" """ -Deprecated: Replaced by `db.client.connections.state`. +Deprecated: Replaced by `db.client.connection.state`. """ -@deprecated(reason="The attribute state is deprecated - Replaced by `db.client.connections.state`") # type: ignore +@deprecated(reason="The attribute state is deprecated - Replaced by `db.client.connection.state`") # type: ignore class StateValues(Enum): IDLE = "idle" """idle.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/pool_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/pool_attributes.py index 8feecee761..6e0d70fad8 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/pool_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/pool_attributes.py @@ -16,5 +16,5 @@ POOL_NAME: Final = "pool.name" """ -Deprecated: Replaced by `db.client.connections.pool.name`. +Deprecated: Replaced by `db.client.connection.pool.name`. """ diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/process_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/process_attributes.py index 2f99608c47..1c6fd42bc2 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/process_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/process_attributes.py @@ -15,6 +15,8 @@ from enum import Enum from typing import Final +from deprecated import deprecated + PROCESS_COMMAND: Final = "process.command" """ The command used to launch the process (i.e. the command name). On Linux based systems, can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to the first parameter extracted from `GetCommandLineW`. @@ -37,7 +39,7 @@ PROCESS_CPU_STATE: Final = "process.cpu.state" """ -The CPU state of the process. +Deprecated: Replaced by `cpu.mode`. """ PROCESS_CREATION_TIME: Final = "process.creation.time" @@ -112,7 +114,7 @@ PROCESS_RUNTIME_NAME: Final = "process.runtime.name" """ -The name of the runtime of this process. For compiled native binaries, this SHOULD be the name of the compiler. +The name of the runtime of this process. """ PROCESS_RUNTIME_VERSION: Final = "process.runtime.version" @@ -159,6 +161,7 @@ class ProcessContextSwitchTypeValues(Enum): """involuntary.""" +@deprecated(reason="The attribute process.cpu.state is deprecated - Replaced by `cpu.mode`") # type: ignore class ProcessCpuStateValues(Enum): SYSTEM = "system" """system.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/system_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/system_attributes.py index f93a62c7bc..b4cae15809 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/system_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/system_attributes.py @@ -24,7 +24,7 @@ SYSTEM_CPU_STATE: Final = "system.cpu.state" """ -The state of the CPU. +Deprecated: Replaced by `cpu.mode`. """ SYSTEM_DEVICE: Final = "system.device" @@ -88,6 +88,7 @@ """ +@deprecated(reason="The attribute system.cpu.state is deprecated - Replaced by `cpu.mode`") # type: ignore class SystemCpuStateValues(Enum): USER = "user" """user.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/test_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/test_attributes.py new file mode 100644 index 0000000000..43e017ff8d --- /dev/null +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/test_attributes.py @@ -0,0 +1,58 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from enum import Enum +from typing import Final + +TEST_CASE_NAME: Final = "test.case.name" +""" +The fully qualified human readable name of the [test case](https://en.wikipedia.org/wiki/Test_case). +""" + +TEST_CASE_RESULT_STATUS: Final = "test.case.result.status" +""" +The status of the actual test case result from test execution. +""" + +TEST_SUITE_NAME: Final = "test.suite.name" +""" +The human readable name of a [test suite](https://en.wikipedia.org/wiki/Test_suite). +""" + +TEST_SUITE_RUN_STATUS: Final = "test.suite.run.status" +""" +The status of the test suite run. +""" + + +class TestCaseResultStatusValues(Enum): + PASS = "pass" + """pass.""" + FAIL = "fail" + """fail.""" + + +class TestSuiteRunStatusValues(Enum): + SUCCESS = "success" + """success.""" + FAILURE = "failure" + """failure.""" + SKIPPED = "skipped" + """skipped.""" + ABORTED = "aborted" + """aborted.""" + TIMED_OUT = "timed_out" + """timed_out.""" + IN_PROGRESS = "in_progress" + """in_progress.""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/tls_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/tls_attributes.py index c182fb5228..076c3e6a4f 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/tls_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/tls_attributes.py @@ -68,7 +68,7 @@ TLS_CLIENT_SERVER_NAME: Final = "tls.client.server_name" """ -Also called an SNI, this tells the server which hostname to which the client is attempting to connect to. +Deprecated: Replaced by `server.address. """ TLS_CLIENT_SUBJECT: Final = "tls.client.subject" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/user_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/user_attributes.py new file mode 100644 index 0000000000..4d3e8a2816 --- /dev/null +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/user_attributes.py @@ -0,0 +1,46 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import Final + +USER_EMAIL: Final = "user.email" +""" +User email address. +""" + +USER_FULL_NAME: Final = "user.full_name" +""" +User's full name. +""" + +USER_HASH: Final = "user.hash" +""" +Unique user hash to correlate information for a user in anonymized form. +Note: Useful if `user.id` or `user.name` contain confidential information and cannot be used. +""" + +USER_ID: Final = "user.id" +""" +Unique identifier of the user. +""" + +USER_NAME: Final = "user.name" +""" +Short name or login/username of the user. +""" + +USER_ROLES: Final = "user.roles" +""" +Array of user roles at the time of the event. +""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/vcs_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/vcs_attributes.py new file mode 100644 index 0000000000..e075ceb9cc --- /dev/null +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/attributes/vcs_attributes.py @@ -0,0 +1,62 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from enum import Enum +from typing import Final + +VCS_REPOSITORY_CHANGE_ID: Final = "vcs.repository.change.id" +""" +The ID of the change (pull request/merge request) if applicable. This is usually a unique (within repository) identifier generated by the VCS system. +""" + +VCS_REPOSITORY_CHANGE_TITLE: Final = "vcs.repository.change.title" +""" +The human readable title of the change (pull request/merge request). This title is often a brief summary of the change and may get merged in to a ref as the commit summary. +""" + +VCS_REPOSITORY_REF_NAME: Final = "vcs.repository.ref.name" +""" +The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository. +""" + +VCS_REPOSITORY_REF_REVISION: Final = "vcs.repository.ref.revision" +""" +The revision, literally [revised version](https://www.merriam-webster.com/dictionary/revision), The revision most often refers to a commit object in Git, or a revision number in SVN. +Note: The revision can be a full [hash value (see glossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf), +of the recorded change to a ref within a repository pointing to a +commit [commit](https://git-scm.com/docs/git-commit) object. It does +not necessarily have to be a hash; it can simply define a +[revision number](https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html) +which is an integer that is monotonically increasing. In cases where +it is identical to the `ref.name`, it SHOULD still be included. It is +up to the implementer to decide which value to set as the revision +based on the VCS system and situational context. +""" + +VCS_REPOSITORY_REF_TYPE: Final = "vcs.repository.ref.type" +""" +The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository. +""" + +VCS_REPOSITORY_URL_FULL: Final = "vcs.repository.url.full" +""" +The [URL](https://en.wikipedia.org/wiki/URL) of the repository providing the complete address in order to locate and identify the repository. +""" + + +class VcsRepositoryRefTypeValues(Enum): + BRANCH = "branch" + """[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch).""" + TAG = "tag" + """[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag).""" diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/db_metrics.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/db_metrics.py index 1d959d1bde..350fb06289 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/db_metrics.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/db_metrics.py @@ -318,6 +318,7 @@ def create_db_client_connections_wait_time(meter: Meter) -> Histogram: Duration of database client operations Instrument: histogram Unit: s +Note: Batch operations SHOULD be recorded as a single operation. """ diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/gen_ai_metrics.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/gen_ai_metrics.py new file mode 100644 index 0000000000..97d9dd00af --- /dev/null +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/gen_ai_metrics.py @@ -0,0 +1,104 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from typing import Final + +from opentelemetry.metrics import Histogram, Meter + +GEN_AI_CLIENT_OPERATION_DURATION: Final = "gen_ai.client.operation.duration" +""" +GenAI operation duration +Instrument: histogram +Unit: s +""" + + +def create_gen_ai_client_operation_duration(meter: Meter) -> Histogram: + """GenAI operation duration""" + return meter.create_histogram( + name=GEN_AI_CLIENT_OPERATION_DURATION, + description="GenAI operation duration", + unit="s", + ) + + +GEN_AI_CLIENT_TOKEN_USAGE: Final = "gen_ai.client.token.usage" +""" +Measures number of input and output tokens used +Instrument: histogram +Unit: {token} +""" + + +def create_gen_ai_client_token_usage(meter: Meter) -> Histogram: + """Measures number of input and output tokens used""" + return meter.create_histogram( + name=GEN_AI_CLIENT_TOKEN_USAGE, + description="Measures number of input and output tokens used", + unit="{token}", + ) + + +GEN_AI_SERVER_REQUEST_DURATION: Final = "gen_ai.server.request.duration" +""" +Generative AI server request duration such as time-to-last byte or last output token +Instrument: histogram +Unit: s +""" + + +def create_gen_ai_server_request_duration(meter: Meter) -> Histogram: + """Generative AI server request duration such as time-to-last byte or last output token""" + return meter.create_histogram( + name=GEN_AI_SERVER_REQUEST_DURATION, + description="Generative AI server request duration such as time-to-last byte or last output token", + unit="s", + ) + + +GEN_AI_SERVER_TIME_PER_OUTPUT_TOKEN: Final = ( + "gen_ai.server.time_per_output_token" +) +""" +Time per output token generated after the first token for successful responses +Instrument: histogram +Unit: s +""" + + +def create_gen_ai_server_time_per_output_token(meter: Meter) -> Histogram: + """Time per output token generated after the first token for successful responses""" + return meter.create_histogram( + name=GEN_AI_SERVER_TIME_PER_OUTPUT_TOKEN, + description="Time per output token generated after the first token for successful responses", + unit="s", + ) + + +GEN_AI_SERVER_TIME_TO_FIRST_TOKEN: Final = "gen_ai.server.time_to_first_token" +""" +Time to generate first token for successful responses +Instrument: histogram +Unit: s +""" + + +def create_gen_ai_server_time_to_first_token(meter: Meter) -> Histogram: + """Time to generate first token for successful responses""" + return meter.create_histogram( + name=GEN_AI_SERVER_TIME_TO_FIRST_TOKEN, + description="Time to generate first token for successful responses", + unit="s", + ) diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/messaging_metrics.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/messaging_metrics.py index 0ca50f28a2..2db60b053a 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/messaging_metrics.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/messaging_metrics.py @@ -17,103 +17,155 @@ from opentelemetry.metrics import Counter, Histogram, Meter +MESSAGING_CLIENT_CONSUMED_MESSAGES: Final = ( + "messaging.client.consumed.messages" +) +""" +Number of messages that were delivered to the application +Instrument: counter +Unit: {message} +Note: Records the number of messages pulled from the broker or number of messages dispatched to the application in push-based scenarios. +The metric SHOULD be reported once per message delivery. For example, if receiving and processing operations are both instrumented for a single message delivery, this counter is incremented when the message is received and not reported when it is processed. +""" + + +def create_messaging_client_consumed_messages(meter: Meter) -> Counter: + """Number of messages that were delivered to the application""" + return meter.create_counter( + name=MESSAGING_CLIENT_CONSUMED_MESSAGES, + description="Number of messages that were delivered to the application.", + unit="{message}", + ) + + +MESSAGING_CLIENT_OPERATION_DURATION: Final = ( + "messaging.client.operation.duration" +) +""" +Duration of messaging operation initiated by a producer or consumer client +Instrument: histogram +Unit: s +Note: This metric SHOULD NOT be used to report processing duration - processing duration is reported in `messaging.process.duration` metric. +""" + + +def create_messaging_client_operation_duration(meter: Meter) -> Histogram: + """Duration of messaging operation initiated by a producer or consumer client""" + return meter.create_histogram( + name=MESSAGING_CLIENT_OPERATION_DURATION, + description="Duration of messaging operation initiated by a producer or consumer client.", + unit="s", + ) + + +MESSAGING_CLIENT_PUBLISHED_MESSAGES: Final = ( + "messaging.client.published.messages" +) +""" +Number of messages producer attempted to publish to the broker +Instrument: counter +Unit: {message} +Note: This metric MUST NOT count messages that were created haven't yet been attempted to be published. +""" + + +def create_messaging_client_published_messages(meter: Meter) -> Counter: + """Number of messages producer attempted to publish to the broker""" + return meter.create_counter( + name=MESSAGING_CLIENT_PUBLISHED_MESSAGES, + description="Number of messages producer attempted to publish to the broker.", + unit="{message}", + ) + + MESSAGING_PROCESS_DURATION: Final = "messaging.process.duration" """ -Measures the duration of process operation +Duration of processing operation Instrument: histogram Unit: s +Note: This metric MUST be reported for operations with `messaging.operation.type` that matches `process`. """ def create_messaging_process_duration(meter: Meter) -> Histogram: - """Measures the duration of process operation""" + """Duration of processing operation""" return meter.create_histogram( name=MESSAGING_PROCESS_DURATION, - description="Measures the duration of process operation.", + description="Duration of processing operation.", unit="s", ) MESSAGING_PROCESS_MESSAGES: Final = "messaging.process.messages" """ -Measures the number of processed messages -Instrument: counter -Unit: {message} +Deprecated: Replaced by `messaging.client.consumed.messages`. """ def create_messaging_process_messages(meter: Meter) -> Counter: - """Measures the number of processed messages""" + """Deprecated. Use `messaging.client.consumed.messages` instead""" return meter.create_counter( name=MESSAGING_PROCESS_MESSAGES, - description="Measures the number of processed messages.", + description="Deprecated. Use `messaging.client.consumed.messages` instead.", unit="{message}", ) MESSAGING_PUBLISH_DURATION: Final = "messaging.publish.duration" """ -Measures the duration of publish operation -Instrument: histogram -Unit: s +Deprecated: Replaced by `messaging.client.operation.duration`. """ def create_messaging_publish_duration(meter: Meter) -> Histogram: - """Measures the duration of publish operation""" + """Deprecated. Use `messaging.client.operation.duration` instead""" return meter.create_histogram( name=MESSAGING_PUBLISH_DURATION, - description="Measures the duration of publish operation.", + description="Deprecated. Use `messaging.client.operation.duration` instead.", unit="s", ) MESSAGING_PUBLISH_MESSAGES: Final = "messaging.publish.messages" """ -Measures the number of published messages -Instrument: counter -Unit: {message} +Deprecated: Replaced by `messaging.client.produced.messages`. """ def create_messaging_publish_messages(meter: Meter) -> Counter: - """Measures the number of published messages""" + """Deprecated. Use `messaging.client.produced.messages` instead""" return meter.create_counter( name=MESSAGING_PUBLISH_MESSAGES, - description="Measures the number of published messages.", + description="Deprecated. Use `messaging.client.produced.messages` instead.", unit="{message}", ) MESSAGING_RECEIVE_DURATION: Final = "messaging.receive.duration" """ -Measures the duration of receive operation -Instrument: histogram -Unit: s +Deprecated: Replaced by `messaging.client.operation.duration`. """ def create_messaging_receive_duration(meter: Meter) -> Histogram: - """Measures the duration of receive operation""" + """Deprecated. Use `messaging.client.operation.duration` instead""" return meter.create_histogram( name=MESSAGING_RECEIVE_DURATION, - description="Measures the duration of receive operation.", + description="Deprecated. Use `messaging.client.operation.duration` instead.", unit="s", ) MESSAGING_RECEIVE_MESSAGES: Final = "messaging.receive.messages" """ -Measures the number of received messages -Instrument: counter -Unit: {message} +Deprecated: Replaced by `messaging.client.consumed.messages`. """ def create_messaging_receive_messages(meter: Meter) -> Counter: - """Measures the number of received messages""" + """Deprecated. Use `messaging.client.consumed.messages` instead""" return meter.create_counter( name=MESSAGING_RECEIVE_MESSAGES, - description="Measures the number of received messages.", + description="Deprecated. Use `messaging.client.consumed.messages` instead.", unit="{message}", ) diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/system_metrics.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/system_metrics.py index ba8d940209..f641a7fe80 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/system_metrics.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/_incubating/metrics/system_metrics.py @@ -273,6 +273,26 @@ def create_system_linux_memory_available(meter: Meter) -> UpDownCounter: ) +SYSTEM_LINUX_MEMORY_SLAB_USAGE: Final = "system.linux.memory.slab.usage" +""" +Reports the memory used by the Linux kernel for managing caches of frequently used objects +Instrument: updowncounter +Unit: By +Note: The sum over the `reclaimable` and `unreclaimable` state values in `linux.memory.slab.usage` SHOULD be equal to the total slab memory available on the system. +Note that the total slab memory is not constant and may vary over time. +See also the [Slab allocator](https://blogs.oracle.com/linux/post/understanding-linux-kernel-memory-statistics) and `Slab` in [/proc/meminfo](https://man7.org/linux/man-pages/man5/proc.5.html). +""" + + +def create_system_linux_memory_slab_usage(meter: Meter) -> UpDownCounter: + """Reports the memory used by the Linux kernel for managing caches of frequently used objects""" + return meter.create_up_down_counter( + name=SYSTEM_LINUX_MEMORY_SLAB_USAGE, + description="Reports the memory used by the Linux kernel for managing caches of frequently used objects.", + unit="By", + ) + + SYSTEM_MEMORY_LIMIT: Final = "system.memory.limit" """ Total memory available in the system diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/attributes/network_attributes.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/attributes/network_attributes.py index 0181958a7c..9d10cf8ca0 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/attributes/network_attributes.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/attributes/network_attributes.py @@ -73,6 +73,8 @@ class NetworkTransportValues(Enum): """Named or anonymous pipe.""" UNIX = "unix" """Unix domain socket.""" + QUIC = "quic" + """QUIC.""" class NetworkTypeValues(Enum): diff --git a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/schemas.py b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/schemas.py index 0e45ae806b..31a3447945 100644 --- a/opentelemetry-semantic-conventions/src/opentelemetry/semconv/schemas.py +++ b/opentelemetry-semantic-conventions/src/opentelemetry/semconv/schemas.py @@ -31,5 +31,10 @@ class Schemas(Enum): The URL of the OpenTelemetry schema version 1.26.0. """ + V1_27_0 = "https://opentelemetry.io/schemas/1.27.0" + """ + The URL of the OpenTelemetry schema version 1.27.0. + """ + # when generating new semantic conventions, # make sure to add new versions version here. diff --git a/scripts/semconv/generate.sh b/scripts/semconv/generate.sh index 26a582ac09..a04cc105ae 100755 --- a/scripts/semconv/generate.sh +++ b/scripts/semconv/generate.sh @@ -5,9 +5,9 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ROOT_DIR="${SCRIPT_DIR}/../.." # freeze the spec version to make SemanticAttributes generation reproducible -SEMCONV_VERSION=1.26.0 +SEMCONV_VERSION=1.27.0 SEMCONV_VERSION_TAG=v$SEMCONV_VERSION -OTEL_WEAVER_IMG_VERSION=0.7.0 +OTEL_WEAVER_IMG_VERSION=0.8.0 INCUBATING_DIR=_incubating cd ${SCRIPT_DIR} diff --git a/scripts/semconv/templates/registry/common.j2 b/scripts/semconv/templates/registry/common.j2 index 323e2bcdfa..99dcf1495d 100644 --- a/scripts/semconv/templates/registry/common.j2 +++ b/scripts/semconv/templates/registry/common.j2 @@ -15,10 +15,6 @@ {% endmacro -%} -{%- macro to_const_name(attr_name) -%} -{{attr_name | upper | replace('.', '_')}} -{%- endmacro %} - {%- macro str_or_empty(str) -%} {% if str is none %}{{""}}{% else %}{{str}}{% endif %} {%- endmacro %} @@ -36,7 +32,3 @@ from deprecated import deprecated {%- endif -%} {%- endmacro-%} - -{%- macro print_value(type, value) -%} -{%- if type == "string" -%}"{{value}}"{%-else-%}{{value}}{%-endif-%} -{%- endmacro -%} diff --git a/scripts/semconv/templates/registry/semantic_attributes.j2 b/scripts/semconv/templates/registry/semantic_attributes.j2 index fa7f80ca47..1cc155712b 100644 --- a/scripts/semconv/templates/registry/semantic_attributes.j2 +++ b/scripts/semconv/templates/registry/semantic_attributes.j2 @@ -14,7 +14,7 @@ from typing import Final -{% set file_name = ctx.output + (ctx.root_namespace | kebab_case | replace('-', '_')) ~ "_attributes.py" -%} +{% set file_name = ctx.output + (ctx.root_namespace | snake_case) ~ "_attributes.py" -%} {{- template.set_file_name(file_name) -}} {%- import 'common.j2' as c %} @@ -24,7 +24,7 @@ from typing import Final {{c.import_deprecated(enum_attributes)}} {%- macro attribute_name(attribute) -%} -{{c.to_const_name(attribute.name)}}{%- if attribute.type is template_type -%}_TEMPLATE{%- endif -%} +{{ attribute.name | screaming_snake_case }}{%- if attribute.type is template_type -%}_TEMPLATE{%- endif -%} {%- endmacro -%} {%- macro stable_class_ref(const_name, separator) -%} @@ -65,9 +65,9 @@ from typing import Final {%- endif %} class {{class_name}}(Enum): {%- for member in attribute.type.members %} - {% set member_name = c.to_const_name(member.id) -%} + {% set member_name = member.id | screaming_snake_case -%} {%- set doc_string=write_docstring(class_name + '.' + member_name, member.brief or member.id, "", member.deprecated, member.stability, false)-%} - {{member_name}} = {{c.print_value(attribute.type | instantiated_type, member.value) }} + {{member_name}} = {{ member.value | print_member_value }} {% if doc_string %}"""{{doc_string}}"""{% endif %} {%- endfor %} {% endfor %} \ No newline at end of file diff --git a/scripts/semconv/templates/registry/semantic_metrics.j2 b/scripts/semconv/templates/registry/semantic_metrics.j2 index 0fe6a61eb8..49550cf538 100644 --- a/scripts/semconv/templates/registry/semantic_metrics.j2 +++ b/scripts/semconv/templates/registry/semantic_metrics.j2 @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -{% set file_name = ctx.output + ctx.root_namespace | kebab_case | replace('-', '_') ~ "_metrics.py" -%} +{% set file_name = ctx.output + ctx.root_namespace | snake_case ~ "_metrics.py" -%} {{- template.set_file_name(file_name) -}} {% import 'common.j2' as c -%} @@ -66,8 +66,8 @@ CallbackT = Union[ from typing import Final {{ import_instrument_classes(filtered_metrics) }} -{%- for metric in ctx.metrics | sort(attribute="metric_name") %} -{% set const_name = c.to_const_name(metric.metric_name) %} +{%- for metric in ctx.metrics %} +{% set const_name = metric.metric_name | screaming_snake_case %} {{const_name}}: Final = "{{metric.metric_name}}" {%- set doc_string=write_docstring(metric, const_name, "")-%}{%- if doc_string %} """{{doc_string}} diff --git a/scripts/semconv/templates/registry/weaver.yaml b/scripts/semconv/templates/registry/weaver.yaml index dd7f708beb..fb6b7b1aa9 100644 --- a/scripts/semconv/templates/registry/weaver.yaml +++ b/scripts/semconv/templates/registry/weaver.yaml @@ -1,7 +1,6 @@ params: # excluded namespaces will not be generated - # this behavior is fully controlled by jinja templates - excluded_namespaces: [ios, aspnetcore, signalr, android, dotnet, jvm, kestrel] + excluded_namespaces: [ios, aspnetcore, signalr, android, dotnet, jvm, kestrel, v8js, veightjs, go, nodejs] # excluded attributes will be commented out in the generated code # this behavior is fully controlled by jinja templates