diff --git a/CHANGELOG.md b/CHANGELOG.md index c765a6f3..0a058f3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ What's changed * `experimental` is still accepted when parsing but aliased to `development`. * The minijinja test, `experimental`, now returns true for any variant other than `stable`. * EBNF and JSON schema updated to define the new enum without the `experimental` variant. +* Issue [#301](https://github.com/open-telemetry/weaver/issues/301) - Warn against usage of `allow_custom_values`. ([#514](https://github.com/open-telemetry/weaver/pull/514) by @jerbly). ## [0.11.0] - 2024-12-05 diff --git a/crates/weaver_forge/data/jvm-metrics.yaml b/crates/weaver_forge/data/jvm-metrics.yaml index efa190e3..b3bdefd9 100644 --- a/crates/weaver_forge/data/jvm-metrics.yaml +++ b/crates/weaver_forge/data/jvm-metrics.yaml @@ -6,7 +6,6 @@ groups: - id: jvm.memory.type stability: stable type: - allow_custom_values: false members: - id: heap value: 'heap' @@ -106,7 +105,6 @@ groups: stability: stable requirement_level: recommended type: - allow_custom_values: false members: - id: new value: 'new' diff --git a/crates/weaver_forge/data/registry-db.yaml b/crates/weaver_forge/data/registry-db.yaml index dc2ef871..aeb403f5 100644 --- a/crates/weaver_forge/data/registry-db.yaml +++ b/crates/weaver_forge/data/registry-db.yaml @@ -87,7 +87,6 @@ groups: tag: tech-specific-cosmosdb - id: db.cosmosdb.connection_mode type: - allow_custom_values: false members: - id: gateway value: 'gateway' @@ -104,7 +103,6 @@ groups: tag: tech-specific-cosmosdb - id: db.cosmosdb.operation_type type: - allow_custom_values: true members: - id: invalid value: 'Invalid' @@ -256,7 +254,6 @@ groups: - id: db.system brief: An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers. type: - allow_custom_values: true members: - id: other_sql value: 'other_sql' diff --git a/crates/weaver_forge/data/registry-http.yaml b/crates/weaver_forge/data/registry-http.yaml index df798f18..d6ce19da 100644 --- a/crates/weaver_forge/data/registry-http.yaml +++ b/crates/weaver_forge/data/registry-http.yaml @@ -30,7 +30,6 @@ groups: - id: http.request.method stability: stable type: - allow_custom_values: true members: - id: connect value: "CONNECT" diff --git a/crates/weaver_forge/data/registry-network.yaml b/crates/weaver_forge/data/registry-network.yaml index 7a4bf35f..d9434db2 100644 --- a/crates/weaver_forge/data/registry-network.yaml +++ b/crates/weaver_forge/data/registry-network.yaml @@ -22,7 +22,6 @@ groups: examples: "sprint" - id: network.connection.subtype type: - allow_custom_values: true members: - id: gprs brief: GPRS @@ -91,7 +90,6 @@ groups: examples: 'LTE' - id: network.connection.type type: - allow_custom_values: true members: - id: wifi value: "wifi" @@ -143,7 +141,6 @@ groups: - id: network.transport stability: stable type: - allow_custom_values: true members: - id: tcp value: 'tcp' @@ -170,7 +167,6 @@ groups: - id: network.type stability: stable type: - allow_custom_values: true members: - id: ipv4 value: 'ipv4' @@ -183,7 +179,6 @@ groups: examples: ['ipv4', 'ipv6'] - id: network.io.direction type: - allow_custom_values: false members: - id: transmit value: 'transmit' diff --git a/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_attributes.json b/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_attributes.json index c3db55af..a565b74b 100644 --- a/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_attributes.json +++ b/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_attributes.json @@ -1 +1 @@ -[{"brief":"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).\n","name":"db.cassandra.consistency_level","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":{"allow_custom_values":true,"members":[{"brief":null,"deprecated":null,"id":"all","note":null,"stability":null,"value":"all"},{"brief":null,"deprecated":null,"id":"each_quorum","note":null,"stability":null,"value":"each_quorum"},{"brief":null,"deprecated":null,"id":"quorum","note":null,"stability":null,"value":"quorum"},{"brief":null,"deprecated":null,"id":"local_quorum","note":null,"stability":null,"value":"local_quorum"},{"brief":null,"deprecated":null,"id":"one","note":null,"stability":null,"value":"one"},{"brief":null,"deprecated":null,"id":"two","note":null,"stability":null,"value":"two"},{"brief":null,"deprecated":null,"id":"three","note":null,"stability":null,"value":"three"},{"brief":null,"deprecated":null,"id":"local_one","note":null,"stability":null,"value":"local_one"},{"brief":null,"deprecated":null,"id":"any","note":null,"stability":null,"value":"any"},{"brief":null,"deprecated":null,"id":"serial","note":null,"stability":null,"value":"serial"},{"brief":null,"deprecated":null,"id":"local_serial","note":null,"stability":null,"value":"local_serial"}]}},{"brief":"The data center of the coordinating node for a query.\n","examples":"us-west-2","name":"db.cassandra.coordinator.dc","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The ID of the coordinating node for a query.\n","examples":"be13faa2-8574-4d71-926d-27f16cf8a7af","name":"db.cassandra.coordinator.id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"Whether or not the query is idempotent.\n","name":"db.cassandra.idempotence","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"boolean"},{"brief":"The fetch size used for paging, i.e. how many rows will be returned at once.\n","examples":[5000],"name":"db.cassandra.page_size","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The number of times a query was speculatively executed. Not set or `0` if the query was not executed speculatively.\n","examples":[0,2],"name":"db.cassandra.speculative_execution_count","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The name of the primary Cassandra table that the operation is acting upon, including the keyspace name (if applicable).","examples":"mytable","name":"db.cassandra.table","note":"This mirrors the db.sql.table attribute but references cassandra rather than sql. It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The connection string used to connect to the database. It is recommended to remove embedded credentials.\n","examples":"Server=(localdb)\\v11.0;Integrated Security=true;","name":"db.connection_string","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"Unique Cosmos client instance id.","examples":"3ba4827d-4422-483f-b59f-85b74211c11d","name":"db.cosmosdb.client_id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"Cosmos client connection mode.","name":"db.cosmosdb.connection_mode","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":false,"members":[{"brief":"Gateway (HTTP) connections mode","deprecated":null,"id":"gateway","note":null,"stability":null,"value":"gateway"},{"brief":"Direct connection.","deprecated":null,"id":"direct","note":null,"stability":null,"value":"direct"}]}},{"brief":"Cosmos DB container name.","examples":"anystring","name":"db.cosmosdb.container","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"CosmosDB Operation Type.","name":"db.cosmosdb.operation_type","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":true,"members":[{"brief":null,"deprecated":null,"id":"invalid","note":null,"stability":null,"value":"Invalid"},{"brief":null,"deprecated":null,"id":"create","note":null,"stability":null,"value":"Create"},{"brief":null,"deprecated":null,"id":"patch","note":null,"stability":null,"value":"Patch"},{"brief":null,"deprecated":null,"id":"read","note":null,"stability":null,"value":"Read"},{"brief":null,"deprecated":null,"id":"read_feed","note":null,"stability":null,"value":"ReadFeed"},{"brief":null,"deprecated":null,"id":"delete","note":null,"stability":null,"value":"Delete"},{"brief":null,"deprecated":null,"id":"replace","note":null,"stability":null,"value":"Replace"},{"brief":null,"deprecated":null,"id":"execute","note":null,"stability":null,"value":"Execute"},{"brief":null,"deprecated":null,"id":"query","note":null,"stability":null,"value":"Query"},{"brief":null,"deprecated":null,"id":"head","note":null,"stability":null,"value":"Head"},{"brief":null,"deprecated":null,"id":"head_feed","note":null,"stability":null,"value":"HeadFeed"},{"brief":null,"deprecated":null,"id":"upsert","note":null,"stability":null,"value":"Upsert"},{"brief":null,"deprecated":null,"id":"batch","note":null,"stability":null,"value":"Batch"},{"brief":null,"deprecated":null,"id":"query_plan","note":null,"stability":null,"value":"QueryPlan"},{"brief":null,"deprecated":null,"id":"execute_javascript","note":null,"stability":null,"value":"ExecuteJavaScript"}]}},{"brief":"RU consumed for that operation","examples":[46.18,1.0],"name":"db.cosmosdb.request_charge","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"double"},{"brief":"Request payload size in bytes","name":"db.cosmosdb.request_content_length","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB status code.","examples":[200,201],"name":"db.cosmosdb.status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB sub status code.","examples":[1000,1002],"name":"db.cosmosdb.sub_status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Represents the identifier of an Elasticsearch cluster.\n","examples":["e9106fc68e3044f0b1475b04bf4ffd5f"],"name":"db.elasticsearch.cluster.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"Represents the human-readable identifier of the node/instance to which a request was routed.\n","examples":["instance-0000000001"],"name":"db.elasticsearch.node.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"A dynamic value in the url path.\n","examples":["db.elasticsearch.path_parts.index=test-index","db.elasticsearch.path_parts.doc_id=123"],"name":"db.elasticsearch.path_parts","note":"Many Elasticsearch url paths allow dynamic values. These SHOULD be recorded in span attributes in the format `db.elasticsearch.path_parts.\u003ckey\u003e`, where `\u003ckey\u003e` is the url path part name. The implementation SHOULD reference the [elasticsearch schema](https://raw.githubusercontent.com/elastic/elasticsearch-specification/main/output/schema/schema.json) in order to map the path part values to their names.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"template[string]"},{"brief":"An identifier (address, unique name, or any other identifier) of the database instance that is executing queries or mutations on the current connection. This is useful in cases where the database is running in a clustered environment and the instrumentation is able to record the node executing the query. The client may obtain this value in databases like MySQL using queries like `select @@hostname`.\n","examples":"mysql-e26b99z.example.com","name":"db.instance.id","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The fully-qualified class name of the [Java Database Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to connect.\n","examples":["org.postgresql.Driver","com.microsoft.sqlserver.jdbc.SQLServerDriver"],"name":"db.jdbc.driver_classname","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-jdbc","type":"string"},{"brief":"The MongoDB collection being accessed within the database stated in `db.name`.\n","examples":["customers","products"],"name":"db.mongodb.collection","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mongodb","type":"string"},{"brief":"The Microsoft SQL Server [instance name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) connecting to. This name is used to determine the port of a named instance.\n","examples":"MSSQLSERVER","name":"db.mssql.instance_name","note":"If setting a `db.mssql.instance_name`, `server.port` is no longer required (but still recommended if non-standard).\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mssql","type":"string"},{"brief":"This attribute is used to report the name of the database being accessed. For commands that switch the database, this should be set to the target database (even if the command fails).\n","examples":["customers","main"],"name":"db.name","note":"In some SQL databases, the database name to be used is called \"schema name\". In case there are multiple layers that could be considered for database name (e.g. Oracle instance name and schema name), the database name to be used is the more specific layer (e.g. Oracle schema name).\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The name of the operation being executed, e.g. the [MongoDB command name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as `findAndModify`, or the SQL keyword.\n","examples":["findAndModify","HMSET","SELECT"],"name":"db.operation","note":"When setting this to an SQL keyword, it is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if the operation name is provided by the library being instrumented. If the SQL statement has an ambiguous operation, or performs more than one operation, this value may be omitted.\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The index of the database being accessed as used in the [`SELECT` command](https://redis.io/commands/select), provided as an integer. To be used instead of the generic `db.name` attribute.\n","examples":[0,1,15],"name":"db.redis.database_index","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-redis","type":"int"},{"brief":"The name of the primary table that the operation is acting upon, including the database name (if applicable).","examples":["public.users","customers"],"name":"db.sql.table","note":"It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-sql","type":"string"},{"brief":"The database statement being executed.\n","examples":["SELECT * FROM wuser_table","SET mykey \"WuValue\""],"name":"db.statement","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.","name":"db.system","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":{"allow_custom_values":true,"members":[{"brief":"Some other SQL database. Fallback only. See notes.","deprecated":null,"id":"other_sql","note":null,"stability":null,"value":"other_sql"},{"brief":"Microsoft SQL Server","deprecated":null,"id":"mssql","note":null,"stability":null,"value":"mssql"},{"brief":"Microsoft SQL Server Compact","deprecated":null,"id":"mssqlcompact","note":null,"stability":null,"value":"mssqlcompact"},{"brief":"MySQL","deprecated":null,"id":"mysql","note":null,"stability":null,"value":"mysql"},{"brief":"Oracle Database","deprecated":null,"id":"oracle","note":null,"stability":null,"value":"oracle"},{"brief":"IBM Db2","deprecated":null,"id":"db2","note":null,"stability":null,"value":"db2"},{"brief":"PostgreSQL","deprecated":null,"id":"postgresql","note":null,"stability":null,"value":"postgresql"},{"brief":"Amazon Redshift","deprecated":null,"id":"redshift","note":null,"stability":null,"value":"redshift"},{"brief":"Apache Hive","deprecated":null,"id":"hive","note":null,"stability":null,"value":"hive"},{"brief":"Cloudscape","deprecated":null,"id":"cloudscape","note":null,"stability":null,"value":"cloudscape"},{"brief":"HyperSQL DataBase","deprecated":null,"id":"hsqldb","note":null,"stability":null,"value":"hsqldb"},{"brief":"Progress Database","deprecated":null,"id":"progress","note":null,"stability":null,"value":"progress"},{"brief":"SAP MaxDB","deprecated":null,"id":"maxdb","note":null,"stability":null,"value":"maxdb"},{"brief":"SAP HANA","deprecated":null,"id":"hanadb","note":null,"stability":null,"value":"hanadb"},{"brief":"Ingres","deprecated":null,"id":"ingres","note":null,"stability":null,"value":"ingres"},{"brief":"FirstSQL","deprecated":null,"id":"firstsql","note":null,"stability":null,"value":"firstsql"},{"brief":"EnterpriseDB","deprecated":null,"id":"edb","note":null,"stability":null,"value":"edb"},{"brief":"InterSystems Caché","deprecated":null,"id":"cache","note":null,"stability":null,"value":"cache"},{"brief":"Adabas (Adaptable Database System)","deprecated":null,"id":"adabas","note":null,"stability":null,"value":"adabas"},{"brief":"Firebird","deprecated":null,"id":"firebird","note":null,"stability":null,"value":"firebird"},{"brief":"Apache Derby","deprecated":null,"id":"derby","note":null,"stability":null,"value":"derby"},{"brief":"FileMaker","deprecated":null,"id":"filemaker","note":null,"stability":null,"value":"filemaker"},{"brief":"Informix","deprecated":null,"id":"informix","note":null,"stability":null,"value":"informix"},{"brief":"InstantDB","deprecated":null,"id":"instantdb","note":null,"stability":null,"value":"instantdb"},{"brief":"InterBase","deprecated":null,"id":"interbase","note":null,"stability":null,"value":"interbase"},{"brief":"MariaDB","deprecated":null,"id":"mariadb","note":null,"stability":null,"value":"mariadb"},{"brief":"Netezza","deprecated":null,"id":"netezza","note":null,"stability":null,"value":"netezza"},{"brief":"Pervasive PSQL","deprecated":null,"id":"pervasive","note":null,"stability":null,"value":"pervasive"},{"brief":"PointBase","deprecated":null,"id":"pointbase","note":null,"stability":null,"value":"pointbase"},{"brief":"SQLite","deprecated":null,"id":"sqlite","note":null,"stability":null,"value":"sqlite"},{"brief":"Sybase","deprecated":null,"id":"sybase","note":null,"stability":null,"value":"sybase"},{"brief":"Teradata","deprecated":null,"id":"teradata","note":null,"stability":null,"value":"teradata"},{"brief":"Vertica","deprecated":null,"id":"vertica","note":null,"stability":null,"value":"vertica"},{"brief":"H2","deprecated":null,"id":"h2","note":null,"stability":null,"value":"h2"},{"brief":"ColdFusion IMQ","deprecated":null,"id":"coldfusion","note":null,"stability":null,"value":"coldfusion"},{"brief":"Apache Cassandra","deprecated":null,"id":"cassandra","note":null,"stability":null,"value":"cassandra"},{"brief":"Apache HBase","deprecated":null,"id":"hbase","note":null,"stability":null,"value":"hbase"},{"brief":"MongoDB","deprecated":null,"id":"mongodb","note":null,"stability":null,"value":"mongodb"},{"brief":"Redis","deprecated":null,"id":"redis","note":null,"stability":null,"value":"redis"},{"brief":"Couchbase","deprecated":null,"id":"couchbase","note":null,"stability":null,"value":"couchbase"},{"brief":"CouchDB","deprecated":null,"id":"couchdb","note":null,"stability":null,"value":"couchdb"},{"brief":"Microsoft Azure Cosmos DB","deprecated":null,"id":"cosmosdb","note":null,"stability":null,"value":"cosmosdb"},{"brief":"Amazon DynamoDB","deprecated":null,"id":"dynamodb","note":null,"stability":null,"value":"dynamodb"},{"brief":"Neo4j","deprecated":null,"id":"neo4j","note":null,"stability":null,"value":"neo4j"},{"brief":"Apache Geode","deprecated":null,"id":"geode","note":null,"stability":null,"value":"geode"},{"brief":"Elasticsearch","deprecated":null,"id":"elasticsearch","note":null,"stability":null,"value":"elasticsearch"},{"brief":"Memcached","deprecated":null,"id":"memcached","note":null,"stability":null,"value":"memcached"},{"brief":"CockroachDB","deprecated":null,"id":"cockroachdb","note":null,"stability":null,"value":"cockroachdb"},{"brief":"OpenSearch","deprecated":null,"id":"opensearch","note":null,"stability":null,"value":"opensearch"},{"brief":"ClickHouse","deprecated":null,"id":"clickhouse","note":null,"stability":null,"value":"clickhouse"},{"brief":"Cloud Spanner","deprecated":null,"id":"spanner","note":null,"stability":null,"value":"spanner"},{"brief":"Trino","deprecated":null,"id":"trino","note":null,"stability":null,"value":"trino"}]}},{"brief":"Username for accessing the database.\n","examples":["readonly_user","reporting_user"],"name":"db.user","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"SHOULD be set to true if the exception event is recorded at a point where it is known that the exception is escaping the scope of the span.\n","name":"exception.escaped","note":"An exception is considered to have escaped (or left) the scope of a span,\nif that span is ended while the exception is still logically \"in flight\".\nThis may be actually \"in flight\" in some languages (e.g. if the exception\nis passed to a Context manager\u0027s `__exit__` method in Python) but will\nusually be caught at the point of recording the exception in most languages.\n\nIt is usually not possible to determine at the point where an exception is thrown\nwhether it will escape the scope of a span.\nHowever, it is trivial to know that an exception\nwill escape, if one checks for an active exception just before ending the span,\nas done in the [example for recording span exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#recording-an-exception).\n\nIt follows that an exception may still escape the scope of the span\neven if the `exception.escaped` attribute was not set or set to false,\nsince the event might have been recorded at a time where it was not\nclear whether the exception will escape.","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"boolean"},{"brief":"The exception message.","examples":["Division by zero","Can\u0027t convert \u0027int\u0027 object to str implicitly"],"name":"exception.message","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.\n","examples":"Exception in thread \"main\" java.lang.RuntimeException: Test exception\\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at com.example.GenerateTrace.main(GenerateTrace.java:5)","name":"exception.stacktrace","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.\n","examples":["java.net.ConnectException","OSError"],"name":"exception.type","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n","examples":3495,"name":"http.request.body.size","requirement_level":"recommended","root_namespace":"http","stability":"development","type":"int"},{"brief":"HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.request.header.content-type=[\"application/json\"]","http.request.header.x-forwarded-for=[\"1.2.3.4\", \"1.2.3.5\"]"],"name":"http.request.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nThe `User-Agent` header is already captured in the `user_agent.original` attribute. Users MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"HTTP request method.","examples":["GET","POST","HEAD"],"name":"http.request.method","note":"HTTP request method value SHOULD be \"known\" to the instrumentation.\nBy default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)\nand the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).\n\nIf the HTTP request method is not known to instrumentation, it MUST set the `http.request.method` attribute to `_OTHER`.\n\nIf the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it MUST provide a way to override\nthe list of known HTTP methods. If this override is done via environment variable, then the environment variable MUST be named\nOTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods\n(this list MUST be a full override of the default known method, it is not a list of known methods in addition to the defaults).\n\nHTTP method names are case-sensitive and `http.request.method` attribute value MUST match a known HTTP method name exactly.\nInstrumentations for specific web frameworks that consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent.\nTracing instrumentations that do so, MUST also set `http.request.method_original` to the original value.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":{"allow_custom_values":true,"members":[{"brief":"CONNECT method.","deprecated":null,"id":"connect","note":null,"stability":null,"value":"CONNECT"},{"brief":"DELETE method.","deprecated":null,"id":"delete","note":null,"stability":null,"value":"DELETE"},{"brief":"GET method.","deprecated":null,"id":"get","note":null,"stability":null,"value":"GET"},{"brief":"HEAD method.","deprecated":null,"id":"head","note":null,"stability":null,"value":"HEAD"},{"brief":"OPTIONS method.","deprecated":null,"id":"options","note":null,"stability":null,"value":"OPTIONS"},{"brief":"PATCH method.","deprecated":null,"id":"patch","note":null,"stability":null,"value":"PATCH"},{"brief":"POST method.","deprecated":null,"id":"post","note":null,"stability":null,"value":"POST"},{"brief":"PUT method.","deprecated":null,"id":"put","note":null,"stability":null,"value":"PUT"},{"brief":"TRACE method.","deprecated":null,"id":"trace","note":null,"stability":null,"value":"TRACE"},{"brief":"Any HTTP method that the instrumentation has no prior knowledge of.","deprecated":null,"id":"other","note":null,"stability":null,"value":"_OTHER"}]}},{"brief":"Original HTTP method sent by the client in the request line.","examples":["GeT","ACL","foo"],"name":"http.request.method_original","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"},{"brief":"The ordinal number of request resending attempt (for any reason, including redirects).\n","examples":3,"name":"http.request.resend_count","note":"The resend count SHOULD be updated each time an HTTP request gets resent by the client, regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503 Server Unavailable, network issues, or any other).\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n","examples":3495,"name":"http.response.body.size","requirement_level":"recommended","root_namespace":"http","stability":"development","type":"int"},{"brief":"HTTP response headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.response.header.content-type=[\"application/json\"]","http.response.header.my-custom-header=[\"abc\", \"def\"]"],"name":"http.response.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).","examples":[200],"name":"http.response.status_code","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The matched route, that is, the path template in the format used by the respective server framework.\n","examples":["/users/:userID?","{controller}/{action}/{id?}"],"name":"http.route","note":"MUST NOT be populated when this is not supported by the HTTP server framework as the route attribute should have low-cardinality and the URI path can NOT substitute it.\nSHOULD include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one.","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"},{"brief":"The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.","examples":"DE","name":"network.carrier.icc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The mobile carrier country code.","examples":"310","name":"network.carrier.mcc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The mobile carrier network code.","examples":"001","name":"network.carrier.mnc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The name of the mobile carrier.","examples":"sprint","name":"network.carrier.name","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.","examples":"LTE","name":"network.connection.subtype","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":true,"members":[{"brief":"GPRS","deprecated":null,"id":"gprs","note":null,"stability":null,"value":"gprs"},{"brief":"EDGE","deprecated":null,"id":"edge","note":null,"stability":null,"value":"edge"},{"brief":"UMTS","deprecated":null,"id":"umts","note":null,"stability":null,"value":"umts"},{"brief":"CDMA","deprecated":null,"id":"cdma","note":null,"stability":null,"value":"cdma"},{"brief":"EVDO Rel. 0","deprecated":null,"id":"evdo_0","note":null,"stability":null,"value":"evdo_0"},{"brief":"EVDO Rev. A","deprecated":null,"id":"evdo_a","note":null,"stability":null,"value":"evdo_a"},{"brief":"CDMA2000 1XRTT","deprecated":null,"id":"cdma2000_1xrtt","note":null,"stability":null,"value":"cdma2000_1xrtt"},{"brief":"HSDPA","deprecated":null,"id":"hsdpa","note":null,"stability":null,"value":"hsdpa"},{"brief":"HSUPA","deprecated":null,"id":"hsupa","note":null,"stability":null,"value":"hsupa"},{"brief":"HSPA","deprecated":null,"id":"hspa","note":null,"stability":null,"value":"hspa"},{"brief":"IDEN","deprecated":null,"id":"iden","note":null,"stability":null,"value":"iden"},{"brief":"EVDO Rev. B","deprecated":null,"id":"evdo_b","note":null,"stability":null,"value":"evdo_b"},{"brief":"LTE","deprecated":null,"id":"lte","note":null,"stability":null,"value":"lte"},{"brief":"EHRPD","deprecated":null,"id":"ehrpd","note":null,"stability":null,"value":"ehrpd"},{"brief":"HSPAP","deprecated":null,"id":"hspap","note":null,"stability":null,"value":"hspap"},{"brief":"GSM","deprecated":null,"id":"gsm","note":null,"stability":null,"value":"gsm"},{"brief":"TD-SCDMA","deprecated":null,"id":"td_scdma","note":null,"stability":null,"value":"td_scdma"},{"brief":"IWLAN","deprecated":null,"id":"iwlan","note":null,"stability":null,"value":"iwlan"},{"brief":"5G NR (New Radio)","deprecated":null,"id":"nr","note":null,"stability":null,"value":"nr"},{"brief":"5G NRNSA (New Radio Non-Standalone)","deprecated":null,"id":"nrnsa","note":null,"stability":null,"value":"nrnsa"},{"brief":"LTE CA","deprecated":null,"id":"lte_ca","note":null,"stability":null,"value":"lte_ca"}]}},{"brief":"The internet connection type.","examples":"wifi","name":"network.connection.type","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":true,"members":[{"brief":null,"deprecated":null,"id":"wifi","note":null,"stability":null,"value":"wifi"},{"brief":null,"deprecated":null,"id":"wired","note":null,"stability":null,"value":"wired"},{"brief":null,"deprecated":null,"id":"cell","note":null,"stability":null,"value":"cell"},{"brief":null,"deprecated":null,"id":"unavailable","note":null,"stability":null,"value":"unavailable"},{"brief":null,"deprecated":null,"id":"unknown","note":null,"stability":null,"value":"unknown"}]}},{"brief":"The network IO operation direction.","examples":["transmit"],"name":"network.io.direction","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":false,"members":[{"brief":null,"deprecated":null,"id":"transmit","note":null,"stability":null,"value":"transmit"},{"brief":null,"deprecated":null,"id":"receive","note":null,"stability":null,"value":"receive"}]}},{"brief":"Local address of the network connection - IP address or Unix domain socket name.","examples":["10.1.2.80","/tmp/my.sock"],"name":"network.local.address","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Local port number of the network connection.","examples":[65123],"name":"network.local.port","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"int"},{"brief":"Peer address of the network connection - IP address or Unix domain socket name.","examples":["10.1.2.80","/tmp/my.sock"],"name":"network.peer.address","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Peer port number of the network connection.","examples":[65123],"name":"network.peer.port","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"int"},{"brief":"[OSI application layer](https://osi-model.com/application-layer/) or non-OSI equivalent.","examples":["amqp","http","mqtt"],"name":"network.protocol.name","note":"The value SHOULD be normalized to lowercase.","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Version of the protocol specified in `network.protocol.name`.","examples":"3.1.1","name":"network.protocol.version","note":"`network.protocol.version` refers to the version of the protocol used and might be different from the protocol client\u0027s version. If the HTTP client has a version of `0.27.2`, but sends HTTP version `1.1`, this attribute should be set to `1.1`.\n","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"[OSI transport layer](https://osi-model.com/transport-layer/) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n","examples":["tcp","udp"],"name":"network.transport","note":"The value SHOULD be normalized to lowercase.\n\nConsider always setting the transport when setting a port number, since\na port number is ambiguous without knowing the transport. For example\ndifferent processes could be listening on TCP port 12345 and UDP port 12345.\n","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":{"allow_custom_values":true,"members":[{"brief":"TCP","deprecated":null,"id":"tcp","note":null,"stability":null,"value":"tcp"},{"brief":"UDP","deprecated":null,"id":"udp","note":null,"stability":null,"value":"udp"},{"brief":"Named or anonymous pipe.","deprecated":null,"id":"pipe","note":null,"stability":null,"value":"pipe"},{"brief":"Unix domain socket","deprecated":null,"id":"unix","note":null,"stability":null,"value":"unix"}]}},{"brief":"[OSI network layer](https://osi-model.com/network-layer/) or non-OSI equivalent.","examples":["ipv4","ipv6"],"name":"network.type","note":"The value SHOULD be normalized to lowercase.","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":{"allow_custom_values":true,"members":[{"brief":"IPv4","deprecated":null,"id":"ipv4","note":null,"stability":null,"value":"ipv4"},{"brief":"IPv6","deprecated":null,"id":"ipv6","note":null,"stability":null,"value":"ipv6"}]}},{"brief":"The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component","examples":["SemConv"],"name":"url.fragment","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"Absolute URL describing a network resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)","examples":["https://www.foo.bar/search?q=OpenTelemetry#SemConv","//localhost"],"name":"url.full","note":"For network calls, URL usually has `scheme://host[:port][path][?query][#fragment]` format, where the fragment is not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`. In such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed) and SHOULD NOT be validated or modified except for sanitizing purposes.\n","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component","examples":["/search"],"name":"url.path","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component","examples":["q=OpenTelemetry"],"name":"url.query","note":"Sensitive content provided in query string SHOULD be scrubbed when instrumentations can identify it.","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.","examples":["https","ftp","telnet"],"name":"url.scheme","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client.\n","examples":["CERN-LineMode/2.15 libwww/2.17b3","Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1"],"name":"user_agent.original","requirement_level":"recommended","root_namespace":"user_agent","stability":"stable","type":"string"}] \ No newline at end of file +[{"brief":"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).\n","name":"db.cassandra.consistency_level","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"all","note":null,"stability":null,"value":"all"},{"brief":null,"deprecated":null,"id":"each_quorum","note":null,"stability":null,"value":"each_quorum"},{"brief":null,"deprecated":null,"id":"quorum","note":null,"stability":null,"value":"quorum"},{"brief":null,"deprecated":null,"id":"local_quorum","note":null,"stability":null,"value":"local_quorum"},{"brief":null,"deprecated":null,"id":"one","note":null,"stability":null,"value":"one"},{"brief":null,"deprecated":null,"id":"two","note":null,"stability":null,"value":"two"},{"brief":null,"deprecated":null,"id":"three","note":null,"stability":null,"value":"three"},{"brief":null,"deprecated":null,"id":"local_one","note":null,"stability":null,"value":"local_one"},{"brief":null,"deprecated":null,"id":"any","note":null,"stability":null,"value":"any"},{"brief":null,"deprecated":null,"id":"serial","note":null,"stability":null,"value":"serial"},{"brief":null,"deprecated":null,"id":"local_serial","note":null,"stability":null,"value":"local_serial"}]}},{"brief":"The data center of the coordinating node for a query.\n","examples":"us-west-2","name":"db.cassandra.coordinator.dc","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The ID of the coordinating node for a query.\n","examples":"be13faa2-8574-4d71-926d-27f16cf8a7af","name":"db.cassandra.coordinator.id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"Whether or not the query is idempotent.\n","name":"db.cassandra.idempotence","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"boolean"},{"brief":"The fetch size used for paging, i.e. how many rows will be returned at once.\n","examples":[5000],"name":"db.cassandra.page_size","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The number of times a query was speculatively executed. Not set or `0` if the query was not executed speculatively.\n","examples":[0,2],"name":"db.cassandra.speculative_execution_count","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The name of the primary Cassandra table that the operation is acting upon, including the keyspace name (if applicable).","examples":"mytable","name":"db.cassandra.table","note":"This mirrors the db.sql.table attribute but references cassandra rather than sql. It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The connection string used to connect to the database. It is recommended to remove embedded credentials.\n","examples":"Server=(localdb)\\v11.0;Integrated Security=true;","name":"db.connection_string","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"Unique Cosmos client instance id.","examples":"3ba4827d-4422-483f-b59f-85b74211c11d","name":"db.cosmosdb.client_id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"Cosmos client connection mode.","name":"db.cosmosdb.connection_mode","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":null,"members":[{"brief":"Gateway (HTTP) connections mode","deprecated":null,"id":"gateway","note":null,"stability":null,"value":"gateway"},{"brief":"Direct connection.","deprecated":null,"id":"direct","note":null,"stability":null,"value":"direct"}]}},{"brief":"Cosmos DB container name.","examples":"anystring","name":"db.cosmosdb.container","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"CosmosDB Operation Type.","name":"db.cosmosdb.operation_type","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"invalid","note":null,"stability":null,"value":"Invalid"},{"brief":null,"deprecated":null,"id":"create","note":null,"stability":null,"value":"Create"},{"brief":null,"deprecated":null,"id":"patch","note":null,"stability":null,"value":"Patch"},{"brief":null,"deprecated":null,"id":"read","note":null,"stability":null,"value":"Read"},{"brief":null,"deprecated":null,"id":"read_feed","note":null,"stability":null,"value":"ReadFeed"},{"brief":null,"deprecated":null,"id":"delete","note":null,"stability":null,"value":"Delete"},{"brief":null,"deprecated":null,"id":"replace","note":null,"stability":null,"value":"Replace"},{"brief":null,"deprecated":null,"id":"execute","note":null,"stability":null,"value":"Execute"},{"brief":null,"deprecated":null,"id":"query","note":null,"stability":null,"value":"Query"},{"brief":null,"deprecated":null,"id":"head","note":null,"stability":null,"value":"Head"},{"brief":null,"deprecated":null,"id":"head_feed","note":null,"stability":null,"value":"HeadFeed"},{"brief":null,"deprecated":null,"id":"upsert","note":null,"stability":null,"value":"Upsert"},{"brief":null,"deprecated":null,"id":"batch","note":null,"stability":null,"value":"Batch"},{"brief":null,"deprecated":null,"id":"query_plan","note":null,"stability":null,"value":"QueryPlan"},{"brief":null,"deprecated":null,"id":"execute_javascript","note":null,"stability":null,"value":"ExecuteJavaScript"}]}},{"brief":"RU consumed for that operation","examples":[46.18,1.0],"name":"db.cosmosdb.request_charge","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"double"},{"brief":"Request payload size in bytes","name":"db.cosmosdb.request_content_length","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB status code.","examples":[200,201],"name":"db.cosmosdb.status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB sub status code.","examples":[1000,1002],"name":"db.cosmosdb.sub_status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Represents the identifier of an Elasticsearch cluster.\n","examples":["e9106fc68e3044f0b1475b04bf4ffd5f"],"name":"db.elasticsearch.cluster.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"Represents the human-readable identifier of the node/instance to which a request was routed.\n","examples":["instance-0000000001"],"name":"db.elasticsearch.node.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"A dynamic value in the url path.\n","examples":["db.elasticsearch.path_parts.index=test-index","db.elasticsearch.path_parts.doc_id=123"],"name":"db.elasticsearch.path_parts","note":"Many Elasticsearch url paths allow dynamic values. These SHOULD be recorded in span attributes in the format `db.elasticsearch.path_parts.\u003ckey\u003e`, where `\u003ckey\u003e` is the url path part name. The implementation SHOULD reference the [elasticsearch schema](https://raw.githubusercontent.com/elastic/elasticsearch-specification/main/output/schema/schema.json) in order to map the path part values to their names.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"template[string]"},{"brief":"An identifier (address, unique name, or any other identifier) of the database instance that is executing queries or mutations on the current connection. This is useful in cases where the database is running in a clustered environment and the instrumentation is able to record the node executing the query. The client may obtain this value in databases like MySQL using queries like `select @@hostname`.\n","examples":"mysql-e26b99z.example.com","name":"db.instance.id","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The fully-qualified class name of the [Java Database Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to connect.\n","examples":["org.postgresql.Driver","com.microsoft.sqlserver.jdbc.SQLServerDriver"],"name":"db.jdbc.driver_classname","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-jdbc","type":"string"},{"brief":"The MongoDB collection being accessed within the database stated in `db.name`.\n","examples":["customers","products"],"name":"db.mongodb.collection","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mongodb","type":"string"},{"brief":"The Microsoft SQL Server [instance name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) connecting to. This name is used to determine the port of a named instance.\n","examples":"MSSQLSERVER","name":"db.mssql.instance_name","note":"If setting a `db.mssql.instance_name`, `server.port` is no longer required (but still recommended if non-standard).\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mssql","type":"string"},{"brief":"This attribute is used to report the name of the database being accessed. For commands that switch the database, this should be set to the target database (even if the command fails).\n","examples":["customers","main"],"name":"db.name","note":"In some SQL databases, the database name to be used is called \"schema name\". In case there are multiple layers that could be considered for database name (e.g. Oracle instance name and schema name), the database name to be used is the more specific layer (e.g. Oracle schema name).\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The name of the operation being executed, e.g. the [MongoDB command name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as `findAndModify`, or the SQL keyword.\n","examples":["findAndModify","HMSET","SELECT"],"name":"db.operation","note":"When setting this to an SQL keyword, it is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if the operation name is provided by the library being instrumented. If the SQL statement has an ambiguous operation, or performs more than one operation, this value may be omitted.\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The index of the database being accessed as used in the [`SELECT` command](https://redis.io/commands/select), provided as an integer. To be used instead of the generic `db.name` attribute.\n","examples":[0,1,15],"name":"db.redis.database_index","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-redis","type":"int"},{"brief":"The name of the primary table that the operation is acting upon, including the database name (if applicable).","examples":["public.users","customers"],"name":"db.sql.table","note":"It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-sql","type":"string"},{"brief":"The database statement being executed.\n","examples":["SELECT * FROM wuser_table","SET mykey \"WuValue\""],"name":"db.statement","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.","name":"db.system","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":{"allow_custom_values":null,"members":[{"brief":"Some other SQL database. Fallback only. See notes.","deprecated":null,"id":"other_sql","note":null,"stability":null,"value":"other_sql"},{"brief":"Microsoft SQL Server","deprecated":null,"id":"mssql","note":null,"stability":null,"value":"mssql"},{"brief":"Microsoft SQL Server Compact","deprecated":null,"id":"mssqlcompact","note":null,"stability":null,"value":"mssqlcompact"},{"brief":"MySQL","deprecated":null,"id":"mysql","note":null,"stability":null,"value":"mysql"},{"brief":"Oracle Database","deprecated":null,"id":"oracle","note":null,"stability":null,"value":"oracle"},{"brief":"IBM Db2","deprecated":null,"id":"db2","note":null,"stability":null,"value":"db2"},{"brief":"PostgreSQL","deprecated":null,"id":"postgresql","note":null,"stability":null,"value":"postgresql"},{"brief":"Amazon Redshift","deprecated":null,"id":"redshift","note":null,"stability":null,"value":"redshift"},{"brief":"Apache Hive","deprecated":null,"id":"hive","note":null,"stability":null,"value":"hive"},{"brief":"Cloudscape","deprecated":null,"id":"cloudscape","note":null,"stability":null,"value":"cloudscape"},{"brief":"HyperSQL DataBase","deprecated":null,"id":"hsqldb","note":null,"stability":null,"value":"hsqldb"},{"brief":"Progress Database","deprecated":null,"id":"progress","note":null,"stability":null,"value":"progress"},{"brief":"SAP MaxDB","deprecated":null,"id":"maxdb","note":null,"stability":null,"value":"maxdb"},{"brief":"SAP HANA","deprecated":null,"id":"hanadb","note":null,"stability":null,"value":"hanadb"},{"brief":"Ingres","deprecated":null,"id":"ingres","note":null,"stability":null,"value":"ingres"},{"brief":"FirstSQL","deprecated":null,"id":"firstsql","note":null,"stability":null,"value":"firstsql"},{"brief":"EnterpriseDB","deprecated":null,"id":"edb","note":null,"stability":null,"value":"edb"},{"brief":"InterSystems Caché","deprecated":null,"id":"cache","note":null,"stability":null,"value":"cache"},{"brief":"Adabas (Adaptable Database System)","deprecated":null,"id":"adabas","note":null,"stability":null,"value":"adabas"},{"brief":"Firebird","deprecated":null,"id":"firebird","note":null,"stability":null,"value":"firebird"},{"brief":"Apache Derby","deprecated":null,"id":"derby","note":null,"stability":null,"value":"derby"},{"brief":"FileMaker","deprecated":null,"id":"filemaker","note":null,"stability":null,"value":"filemaker"},{"brief":"Informix","deprecated":null,"id":"informix","note":null,"stability":null,"value":"informix"},{"brief":"InstantDB","deprecated":null,"id":"instantdb","note":null,"stability":null,"value":"instantdb"},{"brief":"InterBase","deprecated":null,"id":"interbase","note":null,"stability":null,"value":"interbase"},{"brief":"MariaDB","deprecated":null,"id":"mariadb","note":null,"stability":null,"value":"mariadb"},{"brief":"Netezza","deprecated":null,"id":"netezza","note":null,"stability":null,"value":"netezza"},{"brief":"Pervasive PSQL","deprecated":null,"id":"pervasive","note":null,"stability":null,"value":"pervasive"},{"brief":"PointBase","deprecated":null,"id":"pointbase","note":null,"stability":null,"value":"pointbase"},{"brief":"SQLite","deprecated":null,"id":"sqlite","note":null,"stability":null,"value":"sqlite"},{"brief":"Sybase","deprecated":null,"id":"sybase","note":null,"stability":null,"value":"sybase"},{"brief":"Teradata","deprecated":null,"id":"teradata","note":null,"stability":null,"value":"teradata"},{"brief":"Vertica","deprecated":null,"id":"vertica","note":null,"stability":null,"value":"vertica"},{"brief":"H2","deprecated":null,"id":"h2","note":null,"stability":null,"value":"h2"},{"brief":"ColdFusion IMQ","deprecated":null,"id":"coldfusion","note":null,"stability":null,"value":"coldfusion"},{"brief":"Apache Cassandra","deprecated":null,"id":"cassandra","note":null,"stability":null,"value":"cassandra"},{"brief":"Apache HBase","deprecated":null,"id":"hbase","note":null,"stability":null,"value":"hbase"},{"brief":"MongoDB","deprecated":null,"id":"mongodb","note":null,"stability":null,"value":"mongodb"},{"brief":"Redis","deprecated":null,"id":"redis","note":null,"stability":null,"value":"redis"},{"brief":"Couchbase","deprecated":null,"id":"couchbase","note":null,"stability":null,"value":"couchbase"},{"brief":"CouchDB","deprecated":null,"id":"couchdb","note":null,"stability":null,"value":"couchdb"},{"brief":"Microsoft Azure Cosmos DB","deprecated":null,"id":"cosmosdb","note":null,"stability":null,"value":"cosmosdb"},{"brief":"Amazon DynamoDB","deprecated":null,"id":"dynamodb","note":null,"stability":null,"value":"dynamodb"},{"brief":"Neo4j","deprecated":null,"id":"neo4j","note":null,"stability":null,"value":"neo4j"},{"brief":"Apache Geode","deprecated":null,"id":"geode","note":null,"stability":null,"value":"geode"},{"brief":"Elasticsearch","deprecated":null,"id":"elasticsearch","note":null,"stability":null,"value":"elasticsearch"},{"brief":"Memcached","deprecated":null,"id":"memcached","note":null,"stability":null,"value":"memcached"},{"brief":"CockroachDB","deprecated":null,"id":"cockroachdb","note":null,"stability":null,"value":"cockroachdb"},{"brief":"OpenSearch","deprecated":null,"id":"opensearch","note":null,"stability":null,"value":"opensearch"},{"brief":"ClickHouse","deprecated":null,"id":"clickhouse","note":null,"stability":null,"value":"clickhouse"},{"brief":"Cloud Spanner","deprecated":null,"id":"spanner","note":null,"stability":null,"value":"spanner"},{"brief":"Trino","deprecated":null,"id":"trino","note":null,"stability":null,"value":"trino"}]}},{"brief":"Username for accessing the database.\n","examples":["readonly_user","reporting_user"],"name":"db.user","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"SHOULD be set to true if the exception event is recorded at a point where it is known that the exception is escaping the scope of the span.\n","name":"exception.escaped","note":"An exception is considered to have escaped (or left) the scope of a span,\nif that span is ended while the exception is still logically \"in flight\".\nThis may be actually \"in flight\" in some languages (e.g. if the exception\nis passed to a Context manager\u0027s `__exit__` method in Python) but will\nusually be caught at the point of recording the exception in most languages.\n\nIt is usually not possible to determine at the point where an exception is thrown\nwhether it will escape the scope of a span.\nHowever, it is trivial to know that an exception\nwill escape, if one checks for an active exception just before ending the span,\nas done in the [example for recording span exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#recording-an-exception).\n\nIt follows that an exception may still escape the scope of the span\neven if the `exception.escaped` attribute was not set or set to false,\nsince the event might have been recorded at a time where it was not\nclear whether the exception will escape.","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"boolean"},{"brief":"The exception message.","examples":["Division by zero","Can\u0027t convert \u0027int\u0027 object to str implicitly"],"name":"exception.message","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.\n","examples":"Exception in thread \"main\" java.lang.RuntimeException: Test exception\\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at com.example.GenerateTrace.main(GenerateTrace.java:5)","name":"exception.stacktrace","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.\n","examples":["java.net.ConnectException","OSError"],"name":"exception.type","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n","examples":3495,"name":"http.request.body.size","requirement_level":"recommended","root_namespace":"http","stability":"development","type":"int"},{"brief":"HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.request.header.content-type=[\"application/json\"]","http.request.header.x-forwarded-for=[\"1.2.3.4\", \"1.2.3.5\"]"],"name":"http.request.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nThe `User-Agent` header is already captured in the `user_agent.original` attribute. Users MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"HTTP request method.","examples":["GET","POST","HEAD"],"name":"http.request.method","note":"HTTP request method value SHOULD be \"known\" to the instrumentation.\nBy default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)\nand the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).\n\nIf the HTTP request method is not known to instrumentation, it MUST set the `http.request.method` attribute to `_OTHER`.\n\nIf the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it MUST provide a way to override\nthe list of known HTTP methods. If this override is done via environment variable, then the environment variable MUST be named\nOTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods\n(this list MUST be a full override of the default known method, it is not a list of known methods in addition to the defaults).\n\nHTTP method names are case-sensitive and `http.request.method` attribute value MUST match a known HTTP method name exactly.\nInstrumentations for specific web frameworks that consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent.\nTracing instrumentations that do so, MUST also set `http.request.method_original` to the original value.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"CONNECT method.","deprecated":null,"id":"connect","note":null,"stability":null,"value":"CONNECT"},{"brief":"DELETE method.","deprecated":null,"id":"delete","note":null,"stability":null,"value":"DELETE"},{"brief":"GET method.","deprecated":null,"id":"get","note":null,"stability":null,"value":"GET"},{"brief":"HEAD method.","deprecated":null,"id":"head","note":null,"stability":null,"value":"HEAD"},{"brief":"OPTIONS method.","deprecated":null,"id":"options","note":null,"stability":null,"value":"OPTIONS"},{"brief":"PATCH method.","deprecated":null,"id":"patch","note":null,"stability":null,"value":"PATCH"},{"brief":"POST method.","deprecated":null,"id":"post","note":null,"stability":null,"value":"POST"},{"brief":"PUT method.","deprecated":null,"id":"put","note":null,"stability":null,"value":"PUT"},{"brief":"TRACE method.","deprecated":null,"id":"trace","note":null,"stability":null,"value":"TRACE"},{"brief":"Any HTTP method that the instrumentation has no prior knowledge of.","deprecated":null,"id":"other","note":null,"stability":null,"value":"_OTHER"}]}},{"brief":"Original HTTP method sent by the client in the request line.","examples":["GeT","ACL","foo"],"name":"http.request.method_original","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"},{"brief":"The ordinal number of request resending attempt (for any reason, including redirects).\n","examples":3,"name":"http.request.resend_count","note":"The resend count SHOULD be updated each time an HTTP request gets resent by the client, regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503 Server Unavailable, network issues, or any other).\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n","examples":3495,"name":"http.response.body.size","requirement_level":"recommended","root_namespace":"http","stability":"development","type":"int"},{"brief":"HTTP response headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.response.header.content-type=[\"application/json\"]","http.response.header.my-custom-header=[\"abc\", \"def\"]"],"name":"http.response.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).","examples":[200],"name":"http.response.status_code","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The matched route, that is, the path template in the format used by the respective server framework.\n","examples":["/users/:userID?","{controller}/{action}/{id?}"],"name":"http.route","note":"MUST NOT be populated when this is not supported by the HTTP server framework as the route attribute should have low-cardinality and the URI path can NOT substitute it.\nSHOULD include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one.","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"},{"brief":"The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.","examples":"DE","name":"network.carrier.icc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The mobile carrier country code.","examples":"310","name":"network.carrier.mcc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The mobile carrier network code.","examples":"001","name":"network.carrier.mnc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The name of the mobile carrier.","examples":"sprint","name":"network.carrier.name","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.","examples":"LTE","name":"network.connection.subtype","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":null,"members":[{"brief":"GPRS","deprecated":null,"id":"gprs","note":null,"stability":null,"value":"gprs"},{"brief":"EDGE","deprecated":null,"id":"edge","note":null,"stability":null,"value":"edge"},{"brief":"UMTS","deprecated":null,"id":"umts","note":null,"stability":null,"value":"umts"},{"brief":"CDMA","deprecated":null,"id":"cdma","note":null,"stability":null,"value":"cdma"},{"brief":"EVDO Rel. 0","deprecated":null,"id":"evdo_0","note":null,"stability":null,"value":"evdo_0"},{"brief":"EVDO Rev. A","deprecated":null,"id":"evdo_a","note":null,"stability":null,"value":"evdo_a"},{"brief":"CDMA2000 1XRTT","deprecated":null,"id":"cdma2000_1xrtt","note":null,"stability":null,"value":"cdma2000_1xrtt"},{"brief":"HSDPA","deprecated":null,"id":"hsdpa","note":null,"stability":null,"value":"hsdpa"},{"brief":"HSUPA","deprecated":null,"id":"hsupa","note":null,"stability":null,"value":"hsupa"},{"brief":"HSPA","deprecated":null,"id":"hspa","note":null,"stability":null,"value":"hspa"},{"brief":"IDEN","deprecated":null,"id":"iden","note":null,"stability":null,"value":"iden"},{"brief":"EVDO Rev. B","deprecated":null,"id":"evdo_b","note":null,"stability":null,"value":"evdo_b"},{"brief":"LTE","deprecated":null,"id":"lte","note":null,"stability":null,"value":"lte"},{"brief":"EHRPD","deprecated":null,"id":"ehrpd","note":null,"stability":null,"value":"ehrpd"},{"brief":"HSPAP","deprecated":null,"id":"hspap","note":null,"stability":null,"value":"hspap"},{"brief":"GSM","deprecated":null,"id":"gsm","note":null,"stability":null,"value":"gsm"},{"brief":"TD-SCDMA","deprecated":null,"id":"td_scdma","note":null,"stability":null,"value":"td_scdma"},{"brief":"IWLAN","deprecated":null,"id":"iwlan","note":null,"stability":null,"value":"iwlan"},{"brief":"5G NR (New Radio)","deprecated":null,"id":"nr","note":null,"stability":null,"value":"nr"},{"brief":"5G NRNSA (New Radio Non-Standalone)","deprecated":null,"id":"nrnsa","note":null,"stability":null,"value":"nrnsa"},{"brief":"LTE CA","deprecated":null,"id":"lte_ca","note":null,"stability":null,"value":"lte_ca"}]}},{"brief":"The internet connection type.","examples":"wifi","name":"network.connection.type","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"wifi","note":null,"stability":null,"value":"wifi"},{"brief":null,"deprecated":null,"id":"wired","note":null,"stability":null,"value":"wired"},{"brief":null,"deprecated":null,"id":"cell","note":null,"stability":null,"value":"cell"},{"brief":null,"deprecated":null,"id":"unavailable","note":null,"stability":null,"value":"unavailable"},{"brief":null,"deprecated":null,"id":"unknown","note":null,"stability":null,"value":"unknown"}]}},{"brief":"The network IO operation direction.","examples":["transmit"],"name":"network.io.direction","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"transmit","note":null,"stability":null,"value":"transmit"},{"brief":null,"deprecated":null,"id":"receive","note":null,"stability":null,"value":"receive"}]}},{"brief":"Local address of the network connection - IP address or Unix domain socket name.","examples":["10.1.2.80","/tmp/my.sock"],"name":"network.local.address","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Local port number of the network connection.","examples":[65123],"name":"network.local.port","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"int"},{"brief":"Peer address of the network connection - IP address or Unix domain socket name.","examples":["10.1.2.80","/tmp/my.sock"],"name":"network.peer.address","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Peer port number of the network connection.","examples":[65123],"name":"network.peer.port","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"int"},{"brief":"[OSI application layer](https://osi-model.com/application-layer/) or non-OSI equivalent.","examples":["amqp","http","mqtt"],"name":"network.protocol.name","note":"The value SHOULD be normalized to lowercase.","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Version of the protocol specified in `network.protocol.name`.","examples":"3.1.1","name":"network.protocol.version","note":"`network.protocol.version` refers to the version of the protocol used and might be different from the protocol client\u0027s version. If the HTTP client has a version of `0.27.2`, but sends HTTP version `1.1`, this attribute should be set to `1.1`.\n","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"[OSI transport layer](https://osi-model.com/transport-layer/) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n","examples":["tcp","udp"],"name":"network.transport","note":"The value SHOULD be normalized to lowercase.\n\nConsider always setting the transport when setting a port number, since\na port number is ambiguous without knowing the transport. For example\ndifferent processes could be listening on TCP port 12345 and UDP port 12345.\n","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"TCP","deprecated":null,"id":"tcp","note":null,"stability":null,"value":"tcp"},{"brief":"UDP","deprecated":null,"id":"udp","note":null,"stability":null,"value":"udp"},{"brief":"Named or anonymous pipe.","deprecated":null,"id":"pipe","note":null,"stability":null,"value":"pipe"},{"brief":"Unix domain socket","deprecated":null,"id":"unix","note":null,"stability":null,"value":"unix"}]}},{"brief":"[OSI network layer](https://osi-model.com/network-layer/) or non-OSI equivalent.","examples":["ipv4","ipv6"],"name":"network.type","note":"The value SHOULD be normalized to lowercase.","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"IPv4","deprecated":null,"id":"ipv4","note":null,"stability":null,"value":"ipv4"},{"brief":"IPv6","deprecated":null,"id":"ipv6","note":null,"stability":null,"value":"ipv6"}]}},{"brief":"The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component","examples":["SemConv"],"name":"url.fragment","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"Absolute URL describing a network resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)","examples":["https://www.foo.bar/search?q=OpenTelemetry#SemConv","//localhost"],"name":"url.full","note":"For network calls, URL usually has `scheme://host[:port][path][?query][#fragment]` format, where the fragment is not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`. In such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed) and SHOULD NOT be validated or modified except for sanitizing purposes.\n","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component","examples":["/search"],"name":"url.path","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component","examples":["q=OpenTelemetry"],"name":"url.query","note":"Sensitive content provided in query string SHOULD be scrubbed when instrumentations can identify it.","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.","examples":["https","ftp","telnet"],"name":"url.scheme","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client.\n","examples":["CERN-LineMode/2.15 libwww/2.17b3","Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1"],"name":"user_agent.original","requirement_level":"recommended","root_namespace":"user_agent","stability":"stable","type":"string"}] \ No newline at end of file diff --git a/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_grouped_attributes.json b/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_grouped_attributes.json index 8d0acef8..7bf188e9 100644 --- a/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_grouped_attributes.json +++ b/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_grouped_attributes.json @@ -1 +1 @@ -[{"attributes":[{"brief":"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).\n","name":"db.cassandra.consistency_level","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":{"allow_custom_values":true,"members":[{"brief":null,"deprecated":null,"id":"all","note":null,"stability":null,"value":"all"},{"brief":null,"deprecated":null,"id":"each_quorum","note":null,"stability":null,"value":"each_quorum"},{"brief":null,"deprecated":null,"id":"quorum","note":null,"stability":null,"value":"quorum"},{"brief":null,"deprecated":null,"id":"local_quorum","note":null,"stability":null,"value":"local_quorum"},{"brief":null,"deprecated":null,"id":"one","note":null,"stability":null,"value":"one"},{"brief":null,"deprecated":null,"id":"two","note":null,"stability":null,"value":"two"},{"brief":null,"deprecated":null,"id":"three","note":null,"stability":null,"value":"three"},{"brief":null,"deprecated":null,"id":"local_one","note":null,"stability":null,"value":"local_one"},{"brief":null,"deprecated":null,"id":"any","note":null,"stability":null,"value":"any"},{"brief":null,"deprecated":null,"id":"serial","note":null,"stability":null,"value":"serial"},{"brief":null,"deprecated":null,"id":"local_serial","note":null,"stability":null,"value":"local_serial"}]}},{"brief":"The data center of the coordinating node for a query.\n","examples":"us-west-2","name":"db.cassandra.coordinator.dc","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The ID of the coordinating node for a query.\n","examples":"be13faa2-8574-4d71-926d-27f16cf8a7af","name":"db.cassandra.coordinator.id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"Whether or not the query is idempotent.\n","name":"db.cassandra.idempotence","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"boolean"},{"brief":"The fetch size used for paging, i.e. how many rows will be returned at once.\n","examples":[5000],"name":"db.cassandra.page_size","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The number of times a query was speculatively executed. Not set or `0` if the query was not executed speculatively.\n","examples":[0,2],"name":"db.cassandra.speculative_execution_count","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The name of the primary Cassandra table that the operation is acting upon, including the keyspace name (if applicable).","examples":"mytable","name":"db.cassandra.table","note":"This mirrors the db.sql.table attribute but references cassandra rather than sql. It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The connection string used to connect to the database. It is recommended to remove embedded credentials.\n","examples":"Server=(localdb)\\v11.0;Integrated Security=true;","name":"db.connection_string","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"Unique Cosmos client instance id.","examples":"3ba4827d-4422-483f-b59f-85b74211c11d","name":"db.cosmosdb.client_id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"Cosmos client connection mode.","name":"db.cosmosdb.connection_mode","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":false,"members":[{"brief":"Gateway (HTTP) connections mode","deprecated":null,"id":"gateway","note":null,"stability":null,"value":"gateway"},{"brief":"Direct connection.","deprecated":null,"id":"direct","note":null,"stability":null,"value":"direct"}]}},{"brief":"Cosmos DB container name.","examples":"anystring","name":"db.cosmosdb.container","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"CosmosDB Operation Type.","name":"db.cosmosdb.operation_type","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":true,"members":[{"brief":null,"deprecated":null,"id":"invalid","note":null,"stability":null,"value":"Invalid"},{"brief":null,"deprecated":null,"id":"create","note":null,"stability":null,"value":"Create"},{"brief":null,"deprecated":null,"id":"patch","note":null,"stability":null,"value":"Patch"},{"brief":null,"deprecated":null,"id":"read","note":null,"stability":null,"value":"Read"},{"brief":null,"deprecated":null,"id":"read_feed","note":null,"stability":null,"value":"ReadFeed"},{"brief":null,"deprecated":null,"id":"delete","note":null,"stability":null,"value":"Delete"},{"brief":null,"deprecated":null,"id":"replace","note":null,"stability":null,"value":"Replace"},{"brief":null,"deprecated":null,"id":"execute","note":null,"stability":null,"value":"Execute"},{"brief":null,"deprecated":null,"id":"query","note":null,"stability":null,"value":"Query"},{"brief":null,"deprecated":null,"id":"head","note":null,"stability":null,"value":"Head"},{"brief":null,"deprecated":null,"id":"head_feed","note":null,"stability":null,"value":"HeadFeed"},{"brief":null,"deprecated":null,"id":"upsert","note":null,"stability":null,"value":"Upsert"},{"brief":null,"deprecated":null,"id":"batch","note":null,"stability":null,"value":"Batch"},{"brief":null,"deprecated":null,"id":"query_plan","note":null,"stability":null,"value":"QueryPlan"},{"brief":null,"deprecated":null,"id":"execute_javascript","note":null,"stability":null,"value":"ExecuteJavaScript"}]}},{"brief":"RU consumed for that operation","examples":[46.18,1.0],"name":"db.cosmosdb.request_charge","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"double"},{"brief":"Request payload size in bytes","name":"db.cosmosdb.request_content_length","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB status code.","examples":[200,201],"name":"db.cosmosdb.status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB sub status code.","examples":[1000,1002],"name":"db.cosmosdb.sub_status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Represents the identifier of an Elasticsearch cluster.\n","examples":["e9106fc68e3044f0b1475b04bf4ffd5f"],"name":"db.elasticsearch.cluster.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"Represents the human-readable identifier of the node/instance to which a request was routed.\n","examples":["instance-0000000001"],"name":"db.elasticsearch.node.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"A dynamic value in the url path.\n","examples":["db.elasticsearch.path_parts.index=test-index","db.elasticsearch.path_parts.doc_id=123"],"name":"db.elasticsearch.path_parts","note":"Many Elasticsearch url paths allow dynamic values. These SHOULD be recorded in span attributes in the format `db.elasticsearch.path_parts.\u003ckey\u003e`, where `\u003ckey\u003e` is the url path part name. The implementation SHOULD reference the [elasticsearch schema](https://raw.githubusercontent.com/elastic/elasticsearch-specification/main/output/schema/schema.json) in order to map the path part values to their names.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"template[string]"},{"brief":"An identifier (address, unique name, or any other identifier) of the database instance that is executing queries or mutations on the current connection. This is useful in cases where the database is running in a clustered environment and the instrumentation is able to record the node executing the query. The client may obtain this value in databases like MySQL using queries like `select @@hostname`.\n","examples":"mysql-e26b99z.example.com","name":"db.instance.id","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The fully-qualified class name of the [Java Database Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to connect.\n","examples":["org.postgresql.Driver","com.microsoft.sqlserver.jdbc.SQLServerDriver"],"name":"db.jdbc.driver_classname","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-jdbc","type":"string"},{"brief":"The MongoDB collection being accessed within the database stated in `db.name`.\n","examples":["customers","products"],"name":"db.mongodb.collection","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mongodb","type":"string"},{"brief":"The Microsoft SQL Server [instance name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) connecting to. This name is used to determine the port of a named instance.\n","examples":"MSSQLSERVER","name":"db.mssql.instance_name","note":"If setting a `db.mssql.instance_name`, `server.port` is no longer required (but still recommended if non-standard).\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mssql","type":"string"},{"brief":"This attribute is used to report the name of the database being accessed. For commands that switch the database, this should be set to the target database (even if the command fails).\n","examples":["customers","main"],"name":"db.name","note":"In some SQL databases, the database name to be used is called \"schema name\". In case there are multiple layers that could be considered for database name (e.g. Oracle instance name and schema name), the database name to be used is the more specific layer (e.g. Oracle schema name).\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The name of the operation being executed, e.g. the [MongoDB command name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as `findAndModify`, or the SQL keyword.\n","examples":["findAndModify","HMSET","SELECT"],"name":"db.operation","note":"When setting this to an SQL keyword, it is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if the operation name is provided by the library being instrumented. If the SQL statement has an ambiguous operation, or performs more than one operation, this value may be omitted.\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The index of the database being accessed as used in the [`SELECT` command](https://redis.io/commands/select), provided as an integer. To be used instead of the generic `db.name` attribute.\n","examples":[0,1,15],"name":"db.redis.database_index","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-redis","type":"int"},{"brief":"The name of the primary table that the operation is acting upon, including the database name (if applicable).","examples":["public.users","customers"],"name":"db.sql.table","note":"It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-sql","type":"string"},{"brief":"The database statement being executed.\n","examples":["SELECT * FROM wuser_table","SET mykey \"WuValue\""],"name":"db.statement","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.","name":"db.system","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":{"allow_custom_values":true,"members":[{"brief":"Some other SQL database. Fallback only. See notes.","deprecated":null,"id":"other_sql","note":null,"stability":null,"value":"other_sql"},{"brief":"Microsoft SQL Server","deprecated":null,"id":"mssql","note":null,"stability":null,"value":"mssql"},{"brief":"Microsoft SQL Server Compact","deprecated":null,"id":"mssqlcompact","note":null,"stability":null,"value":"mssqlcompact"},{"brief":"MySQL","deprecated":null,"id":"mysql","note":null,"stability":null,"value":"mysql"},{"brief":"Oracle Database","deprecated":null,"id":"oracle","note":null,"stability":null,"value":"oracle"},{"brief":"IBM Db2","deprecated":null,"id":"db2","note":null,"stability":null,"value":"db2"},{"brief":"PostgreSQL","deprecated":null,"id":"postgresql","note":null,"stability":null,"value":"postgresql"},{"brief":"Amazon Redshift","deprecated":null,"id":"redshift","note":null,"stability":null,"value":"redshift"},{"brief":"Apache Hive","deprecated":null,"id":"hive","note":null,"stability":null,"value":"hive"},{"brief":"Cloudscape","deprecated":null,"id":"cloudscape","note":null,"stability":null,"value":"cloudscape"},{"brief":"HyperSQL DataBase","deprecated":null,"id":"hsqldb","note":null,"stability":null,"value":"hsqldb"},{"brief":"Progress Database","deprecated":null,"id":"progress","note":null,"stability":null,"value":"progress"},{"brief":"SAP MaxDB","deprecated":null,"id":"maxdb","note":null,"stability":null,"value":"maxdb"},{"brief":"SAP HANA","deprecated":null,"id":"hanadb","note":null,"stability":null,"value":"hanadb"},{"brief":"Ingres","deprecated":null,"id":"ingres","note":null,"stability":null,"value":"ingres"},{"brief":"FirstSQL","deprecated":null,"id":"firstsql","note":null,"stability":null,"value":"firstsql"},{"brief":"EnterpriseDB","deprecated":null,"id":"edb","note":null,"stability":null,"value":"edb"},{"brief":"InterSystems Caché","deprecated":null,"id":"cache","note":null,"stability":null,"value":"cache"},{"brief":"Adabas (Adaptable Database System)","deprecated":null,"id":"adabas","note":null,"stability":null,"value":"adabas"},{"brief":"Firebird","deprecated":null,"id":"firebird","note":null,"stability":null,"value":"firebird"},{"brief":"Apache Derby","deprecated":null,"id":"derby","note":null,"stability":null,"value":"derby"},{"brief":"FileMaker","deprecated":null,"id":"filemaker","note":null,"stability":null,"value":"filemaker"},{"brief":"Informix","deprecated":null,"id":"informix","note":null,"stability":null,"value":"informix"},{"brief":"InstantDB","deprecated":null,"id":"instantdb","note":null,"stability":null,"value":"instantdb"},{"brief":"InterBase","deprecated":null,"id":"interbase","note":null,"stability":null,"value":"interbase"},{"brief":"MariaDB","deprecated":null,"id":"mariadb","note":null,"stability":null,"value":"mariadb"},{"brief":"Netezza","deprecated":null,"id":"netezza","note":null,"stability":null,"value":"netezza"},{"brief":"Pervasive PSQL","deprecated":null,"id":"pervasive","note":null,"stability":null,"value":"pervasive"},{"brief":"PointBase","deprecated":null,"id":"pointbase","note":null,"stability":null,"value":"pointbase"},{"brief":"SQLite","deprecated":null,"id":"sqlite","note":null,"stability":null,"value":"sqlite"},{"brief":"Sybase","deprecated":null,"id":"sybase","note":null,"stability":null,"value":"sybase"},{"brief":"Teradata","deprecated":null,"id":"teradata","note":null,"stability":null,"value":"teradata"},{"brief":"Vertica","deprecated":null,"id":"vertica","note":null,"stability":null,"value":"vertica"},{"brief":"H2","deprecated":null,"id":"h2","note":null,"stability":null,"value":"h2"},{"brief":"ColdFusion IMQ","deprecated":null,"id":"coldfusion","note":null,"stability":null,"value":"coldfusion"},{"brief":"Apache Cassandra","deprecated":null,"id":"cassandra","note":null,"stability":null,"value":"cassandra"},{"brief":"Apache HBase","deprecated":null,"id":"hbase","note":null,"stability":null,"value":"hbase"},{"brief":"MongoDB","deprecated":null,"id":"mongodb","note":null,"stability":null,"value":"mongodb"},{"brief":"Redis","deprecated":null,"id":"redis","note":null,"stability":null,"value":"redis"},{"brief":"Couchbase","deprecated":null,"id":"couchbase","note":null,"stability":null,"value":"couchbase"},{"brief":"CouchDB","deprecated":null,"id":"couchdb","note":null,"stability":null,"value":"couchdb"},{"brief":"Microsoft Azure Cosmos DB","deprecated":null,"id":"cosmosdb","note":null,"stability":null,"value":"cosmosdb"},{"brief":"Amazon DynamoDB","deprecated":null,"id":"dynamodb","note":null,"stability":null,"value":"dynamodb"},{"brief":"Neo4j","deprecated":null,"id":"neo4j","note":null,"stability":null,"value":"neo4j"},{"brief":"Apache Geode","deprecated":null,"id":"geode","note":null,"stability":null,"value":"geode"},{"brief":"Elasticsearch","deprecated":null,"id":"elasticsearch","note":null,"stability":null,"value":"elasticsearch"},{"brief":"Memcached","deprecated":null,"id":"memcached","note":null,"stability":null,"value":"memcached"},{"brief":"CockroachDB","deprecated":null,"id":"cockroachdb","note":null,"stability":null,"value":"cockroachdb"},{"brief":"OpenSearch","deprecated":null,"id":"opensearch","note":null,"stability":null,"value":"opensearch"},{"brief":"ClickHouse","deprecated":null,"id":"clickhouse","note":null,"stability":null,"value":"clickhouse"},{"brief":"Cloud Spanner","deprecated":null,"id":"spanner","note":null,"stability":null,"value":"spanner"},{"brief":"Trino","deprecated":null,"id":"trino","note":null,"stability":null,"value":"trino"}]}},{"brief":"Username for accessing the database.\n","examples":["readonly_user","reporting_user"],"name":"db.user","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"}],"root_namespace":"db"},{"attributes":[{"brief":"SHOULD be set to true if the exception event is recorded at a point where it is known that the exception is escaping the scope of the span.\n","name":"exception.escaped","note":"An exception is considered to have escaped (or left) the scope of a span,\nif that span is ended while the exception is still logically \"in flight\".\nThis may be actually \"in flight\" in some languages (e.g. if the exception\nis passed to a Context manager\u0027s `__exit__` method in Python) but will\nusually be caught at the point of recording the exception in most languages.\n\nIt is usually not possible to determine at the point where an exception is thrown\nwhether it will escape the scope of a span.\nHowever, it is trivial to know that an exception\nwill escape, if one checks for an active exception just before ending the span,\nas done in the [example for recording span exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#recording-an-exception).\n\nIt follows that an exception may still escape the scope of the span\neven if the `exception.escaped` attribute was not set or set to false,\nsince the event might have been recorded at a time where it was not\nclear whether the exception will escape.","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"boolean"},{"brief":"The exception message.","examples":["Division by zero","Can\u0027t convert \u0027int\u0027 object to str implicitly"],"name":"exception.message","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.\n","examples":"Exception in thread \"main\" java.lang.RuntimeException: Test exception\\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at com.example.GenerateTrace.main(GenerateTrace.java:5)","name":"exception.stacktrace","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.\n","examples":["java.net.ConnectException","OSError"],"name":"exception.type","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"}],"root_namespace":"exception"},{"attributes":[{"brief":"The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n","examples":3495,"name":"http.request.body.size","requirement_level":"recommended","root_namespace":"http","stability":"development","type":"int"},{"brief":"HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.request.header.content-type=[\"application/json\"]","http.request.header.x-forwarded-for=[\"1.2.3.4\", \"1.2.3.5\"]"],"name":"http.request.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nThe `User-Agent` header is already captured in the `user_agent.original` attribute. Users MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"HTTP request method.","examples":["GET","POST","HEAD"],"name":"http.request.method","note":"HTTP request method value SHOULD be \"known\" to the instrumentation.\nBy default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)\nand the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).\n\nIf the HTTP request method is not known to instrumentation, it MUST set the `http.request.method` attribute to `_OTHER`.\n\nIf the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it MUST provide a way to override\nthe list of known HTTP methods. If this override is done via environment variable, then the environment variable MUST be named\nOTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods\n(this list MUST be a full override of the default known method, it is not a list of known methods in addition to the defaults).\n\nHTTP method names are case-sensitive and `http.request.method` attribute value MUST match a known HTTP method name exactly.\nInstrumentations for specific web frameworks that consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent.\nTracing instrumentations that do so, MUST also set `http.request.method_original` to the original value.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":{"allow_custom_values":true,"members":[{"brief":"CONNECT method.","deprecated":null,"id":"connect","note":null,"stability":null,"value":"CONNECT"},{"brief":"DELETE method.","deprecated":null,"id":"delete","note":null,"stability":null,"value":"DELETE"},{"brief":"GET method.","deprecated":null,"id":"get","note":null,"stability":null,"value":"GET"},{"brief":"HEAD method.","deprecated":null,"id":"head","note":null,"stability":null,"value":"HEAD"},{"brief":"OPTIONS method.","deprecated":null,"id":"options","note":null,"stability":null,"value":"OPTIONS"},{"brief":"PATCH method.","deprecated":null,"id":"patch","note":null,"stability":null,"value":"PATCH"},{"brief":"POST method.","deprecated":null,"id":"post","note":null,"stability":null,"value":"POST"},{"brief":"PUT method.","deprecated":null,"id":"put","note":null,"stability":null,"value":"PUT"},{"brief":"TRACE method.","deprecated":null,"id":"trace","note":null,"stability":null,"value":"TRACE"},{"brief":"Any HTTP method that the instrumentation has no prior knowledge of.","deprecated":null,"id":"other","note":null,"stability":null,"value":"_OTHER"}]}},{"brief":"Original HTTP method sent by the client in the request line.","examples":["GeT","ACL","foo"],"name":"http.request.method_original","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"},{"brief":"The ordinal number of request resending attempt (for any reason, including redirects).\n","examples":3,"name":"http.request.resend_count","note":"The resend count SHOULD be updated each time an HTTP request gets resent by the client, regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503 Server Unavailable, network issues, or any other).\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n","examples":3495,"name":"http.response.body.size","requirement_level":"recommended","root_namespace":"http","stability":"development","type":"int"},{"brief":"HTTP response headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.response.header.content-type=[\"application/json\"]","http.response.header.my-custom-header=[\"abc\", \"def\"]"],"name":"http.response.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).","examples":[200],"name":"http.response.status_code","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The matched route, that is, the path template in the format used by the respective server framework.\n","examples":["/users/:userID?","{controller}/{action}/{id?}"],"name":"http.route","note":"MUST NOT be populated when this is not supported by the HTTP server framework as the route attribute should have low-cardinality and the URI path can NOT substitute it.\nSHOULD include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one.","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"}],"root_namespace":"http"},{"attributes":[{"brief":"The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.","examples":"DE","name":"network.carrier.icc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The mobile carrier country code.","examples":"310","name":"network.carrier.mcc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The mobile carrier network code.","examples":"001","name":"network.carrier.mnc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The name of the mobile carrier.","examples":"sprint","name":"network.carrier.name","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.","examples":"LTE","name":"network.connection.subtype","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":true,"members":[{"brief":"GPRS","deprecated":null,"id":"gprs","note":null,"stability":null,"value":"gprs"},{"brief":"EDGE","deprecated":null,"id":"edge","note":null,"stability":null,"value":"edge"},{"brief":"UMTS","deprecated":null,"id":"umts","note":null,"stability":null,"value":"umts"},{"brief":"CDMA","deprecated":null,"id":"cdma","note":null,"stability":null,"value":"cdma"},{"brief":"EVDO Rel. 0","deprecated":null,"id":"evdo_0","note":null,"stability":null,"value":"evdo_0"},{"brief":"EVDO Rev. A","deprecated":null,"id":"evdo_a","note":null,"stability":null,"value":"evdo_a"},{"brief":"CDMA2000 1XRTT","deprecated":null,"id":"cdma2000_1xrtt","note":null,"stability":null,"value":"cdma2000_1xrtt"},{"brief":"HSDPA","deprecated":null,"id":"hsdpa","note":null,"stability":null,"value":"hsdpa"},{"brief":"HSUPA","deprecated":null,"id":"hsupa","note":null,"stability":null,"value":"hsupa"},{"brief":"HSPA","deprecated":null,"id":"hspa","note":null,"stability":null,"value":"hspa"},{"brief":"IDEN","deprecated":null,"id":"iden","note":null,"stability":null,"value":"iden"},{"brief":"EVDO Rev. B","deprecated":null,"id":"evdo_b","note":null,"stability":null,"value":"evdo_b"},{"brief":"LTE","deprecated":null,"id":"lte","note":null,"stability":null,"value":"lte"},{"brief":"EHRPD","deprecated":null,"id":"ehrpd","note":null,"stability":null,"value":"ehrpd"},{"brief":"HSPAP","deprecated":null,"id":"hspap","note":null,"stability":null,"value":"hspap"},{"brief":"GSM","deprecated":null,"id":"gsm","note":null,"stability":null,"value":"gsm"},{"brief":"TD-SCDMA","deprecated":null,"id":"td_scdma","note":null,"stability":null,"value":"td_scdma"},{"brief":"IWLAN","deprecated":null,"id":"iwlan","note":null,"stability":null,"value":"iwlan"},{"brief":"5G NR (New Radio)","deprecated":null,"id":"nr","note":null,"stability":null,"value":"nr"},{"brief":"5G NRNSA (New Radio Non-Standalone)","deprecated":null,"id":"nrnsa","note":null,"stability":null,"value":"nrnsa"},{"brief":"LTE CA","deprecated":null,"id":"lte_ca","note":null,"stability":null,"value":"lte_ca"}]}},{"brief":"The internet connection type.","examples":"wifi","name":"network.connection.type","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":true,"members":[{"brief":null,"deprecated":null,"id":"wifi","note":null,"stability":null,"value":"wifi"},{"brief":null,"deprecated":null,"id":"wired","note":null,"stability":null,"value":"wired"},{"brief":null,"deprecated":null,"id":"cell","note":null,"stability":null,"value":"cell"},{"brief":null,"deprecated":null,"id":"unavailable","note":null,"stability":null,"value":"unavailable"},{"brief":null,"deprecated":null,"id":"unknown","note":null,"stability":null,"value":"unknown"}]}},{"brief":"The network IO operation direction.","examples":["transmit"],"name":"network.io.direction","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":false,"members":[{"brief":null,"deprecated":null,"id":"transmit","note":null,"stability":null,"value":"transmit"},{"brief":null,"deprecated":null,"id":"receive","note":null,"stability":null,"value":"receive"}]}},{"brief":"Local address of the network connection - IP address or Unix domain socket name.","examples":["10.1.2.80","/tmp/my.sock"],"name":"network.local.address","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Local port number of the network connection.","examples":[65123],"name":"network.local.port","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"int"},{"brief":"Peer address of the network connection - IP address or Unix domain socket name.","examples":["10.1.2.80","/tmp/my.sock"],"name":"network.peer.address","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Peer port number of the network connection.","examples":[65123],"name":"network.peer.port","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"int"},{"brief":"[OSI application layer](https://osi-model.com/application-layer/) or non-OSI equivalent.","examples":["amqp","http","mqtt"],"name":"network.protocol.name","note":"The value SHOULD be normalized to lowercase.","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Version of the protocol specified in `network.protocol.name`.","examples":"3.1.1","name":"network.protocol.version","note":"`network.protocol.version` refers to the version of the protocol used and might be different from the protocol client\u0027s version. If the HTTP client has a version of `0.27.2`, but sends HTTP version `1.1`, this attribute should be set to `1.1`.\n","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"[OSI transport layer](https://osi-model.com/transport-layer/) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n","examples":["tcp","udp"],"name":"network.transport","note":"The value SHOULD be normalized to lowercase.\n\nConsider always setting the transport when setting a port number, since\na port number is ambiguous without knowing the transport. For example\ndifferent processes could be listening on TCP port 12345 and UDP port 12345.\n","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":{"allow_custom_values":true,"members":[{"brief":"TCP","deprecated":null,"id":"tcp","note":null,"stability":null,"value":"tcp"},{"brief":"UDP","deprecated":null,"id":"udp","note":null,"stability":null,"value":"udp"},{"brief":"Named or anonymous pipe.","deprecated":null,"id":"pipe","note":null,"stability":null,"value":"pipe"},{"brief":"Unix domain socket","deprecated":null,"id":"unix","note":null,"stability":null,"value":"unix"}]}},{"brief":"[OSI network layer](https://osi-model.com/network-layer/) or non-OSI equivalent.","examples":["ipv4","ipv6"],"name":"network.type","note":"The value SHOULD be normalized to lowercase.","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":{"allow_custom_values":true,"members":[{"brief":"IPv4","deprecated":null,"id":"ipv4","note":null,"stability":null,"value":"ipv4"},{"brief":"IPv6","deprecated":null,"id":"ipv6","note":null,"stability":null,"value":"ipv6"}]}}],"root_namespace":"network"},{"attributes":[{"brief":"The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component","examples":["SemConv"],"name":"url.fragment","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"Absolute URL describing a network resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)","examples":["https://www.foo.bar/search?q=OpenTelemetry#SemConv","//localhost"],"name":"url.full","note":"For network calls, URL usually has `scheme://host[:port][path][?query][#fragment]` format, where the fragment is not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`. In such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed) and SHOULD NOT be validated or modified except for sanitizing purposes.\n","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component","examples":["/search"],"name":"url.path","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component","examples":["q=OpenTelemetry"],"name":"url.query","note":"Sensitive content provided in query string SHOULD be scrubbed when instrumentations can identify it.","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.","examples":["https","ftp","telnet"],"name":"url.scheme","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"}],"root_namespace":"url"},{"attributes":[{"brief":"Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client.\n","examples":["CERN-LineMode/2.15 libwww/2.17b3","Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1"],"name":"user_agent.original","requirement_level":"recommended","root_namespace":"user_agent","stability":"stable","type":"string"}],"root_namespace":"user_agent"}] \ No newline at end of file +[{"attributes":[{"brief":"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).\n","name":"db.cassandra.consistency_level","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"all","note":null,"stability":null,"value":"all"},{"brief":null,"deprecated":null,"id":"each_quorum","note":null,"stability":null,"value":"each_quorum"},{"brief":null,"deprecated":null,"id":"quorum","note":null,"stability":null,"value":"quorum"},{"brief":null,"deprecated":null,"id":"local_quorum","note":null,"stability":null,"value":"local_quorum"},{"brief":null,"deprecated":null,"id":"one","note":null,"stability":null,"value":"one"},{"brief":null,"deprecated":null,"id":"two","note":null,"stability":null,"value":"two"},{"brief":null,"deprecated":null,"id":"three","note":null,"stability":null,"value":"three"},{"brief":null,"deprecated":null,"id":"local_one","note":null,"stability":null,"value":"local_one"},{"brief":null,"deprecated":null,"id":"any","note":null,"stability":null,"value":"any"},{"brief":null,"deprecated":null,"id":"serial","note":null,"stability":null,"value":"serial"},{"brief":null,"deprecated":null,"id":"local_serial","note":null,"stability":null,"value":"local_serial"}]}},{"brief":"The data center of the coordinating node for a query.\n","examples":"us-west-2","name":"db.cassandra.coordinator.dc","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The ID of the coordinating node for a query.\n","examples":"be13faa2-8574-4d71-926d-27f16cf8a7af","name":"db.cassandra.coordinator.id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"Whether or not the query is idempotent.\n","name":"db.cassandra.idempotence","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"boolean"},{"brief":"The fetch size used for paging, i.e. how many rows will be returned at once.\n","examples":[5000],"name":"db.cassandra.page_size","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The number of times a query was speculatively executed. Not set or `0` if the query was not executed speculatively.\n","examples":[0,2],"name":"db.cassandra.speculative_execution_count","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The name of the primary Cassandra table that the operation is acting upon, including the keyspace name (if applicable).","examples":"mytable","name":"db.cassandra.table","note":"This mirrors the db.sql.table attribute but references cassandra rather than sql. It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The connection string used to connect to the database. It is recommended to remove embedded credentials.\n","examples":"Server=(localdb)\\v11.0;Integrated Security=true;","name":"db.connection_string","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"Unique Cosmos client instance id.","examples":"3ba4827d-4422-483f-b59f-85b74211c11d","name":"db.cosmosdb.client_id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"Cosmos client connection mode.","name":"db.cosmosdb.connection_mode","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":null,"members":[{"brief":"Gateway (HTTP) connections mode","deprecated":null,"id":"gateway","note":null,"stability":null,"value":"gateway"},{"brief":"Direct connection.","deprecated":null,"id":"direct","note":null,"stability":null,"value":"direct"}]}},{"brief":"Cosmos DB container name.","examples":"anystring","name":"db.cosmosdb.container","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"CosmosDB Operation Type.","name":"db.cosmosdb.operation_type","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"invalid","note":null,"stability":null,"value":"Invalid"},{"brief":null,"deprecated":null,"id":"create","note":null,"stability":null,"value":"Create"},{"brief":null,"deprecated":null,"id":"patch","note":null,"stability":null,"value":"Patch"},{"brief":null,"deprecated":null,"id":"read","note":null,"stability":null,"value":"Read"},{"brief":null,"deprecated":null,"id":"read_feed","note":null,"stability":null,"value":"ReadFeed"},{"brief":null,"deprecated":null,"id":"delete","note":null,"stability":null,"value":"Delete"},{"brief":null,"deprecated":null,"id":"replace","note":null,"stability":null,"value":"Replace"},{"brief":null,"deprecated":null,"id":"execute","note":null,"stability":null,"value":"Execute"},{"brief":null,"deprecated":null,"id":"query","note":null,"stability":null,"value":"Query"},{"brief":null,"deprecated":null,"id":"head","note":null,"stability":null,"value":"Head"},{"brief":null,"deprecated":null,"id":"head_feed","note":null,"stability":null,"value":"HeadFeed"},{"brief":null,"deprecated":null,"id":"upsert","note":null,"stability":null,"value":"Upsert"},{"brief":null,"deprecated":null,"id":"batch","note":null,"stability":null,"value":"Batch"},{"brief":null,"deprecated":null,"id":"query_plan","note":null,"stability":null,"value":"QueryPlan"},{"brief":null,"deprecated":null,"id":"execute_javascript","note":null,"stability":null,"value":"ExecuteJavaScript"}]}},{"brief":"RU consumed for that operation","examples":[46.18,1.0],"name":"db.cosmosdb.request_charge","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"double"},{"brief":"Request payload size in bytes","name":"db.cosmosdb.request_content_length","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB status code.","examples":[200,201],"name":"db.cosmosdb.status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB sub status code.","examples":[1000,1002],"name":"db.cosmosdb.sub_status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Represents the identifier of an Elasticsearch cluster.\n","examples":["e9106fc68e3044f0b1475b04bf4ffd5f"],"name":"db.elasticsearch.cluster.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"Represents the human-readable identifier of the node/instance to which a request was routed.\n","examples":["instance-0000000001"],"name":"db.elasticsearch.node.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"A dynamic value in the url path.\n","examples":["db.elasticsearch.path_parts.index=test-index","db.elasticsearch.path_parts.doc_id=123"],"name":"db.elasticsearch.path_parts","note":"Many Elasticsearch url paths allow dynamic values. These SHOULD be recorded in span attributes in the format `db.elasticsearch.path_parts.\u003ckey\u003e`, where `\u003ckey\u003e` is the url path part name. The implementation SHOULD reference the [elasticsearch schema](https://raw.githubusercontent.com/elastic/elasticsearch-specification/main/output/schema/schema.json) in order to map the path part values to their names.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"template[string]"},{"brief":"An identifier (address, unique name, or any other identifier) of the database instance that is executing queries or mutations on the current connection. This is useful in cases where the database is running in a clustered environment and the instrumentation is able to record the node executing the query. The client may obtain this value in databases like MySQL using queries like `select @@hostname`.\n","examples":"mysql-e26b99z.example.com","name":"db.instance.id","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The fully-qualified class name of the [Java Database Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to connect.\n","examples":["org.postgresql.Driver","com.microsoft.sqlserver.jdbc.SQLServerDriver"],"name":"db.jdbc.driver_classname","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-jdbc","type":"string"},{"brief":"The MongoDB collection being accessed within the database stated in `db.name`.\n","examples":["customers","products"],"name":"db.mongodb.collection","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mongodb","type":"string"},{"brief":"The Microsoft SQL Server [instance name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) connecting to. This name is used to determine the port of a named instance.\n","examples":"MSSQLSERVER","name":"db.mssql.instance_name","note":"If setting a `db.mssql.instance_name`, `server.port` is no longer required (but still recommended if non-standard).\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mssql","type":"string"},{"brief":"This attribute is used to report the name of the database being accessed. For commands that switch the database, this should be set to the target database (even if the command fails).\n","examples":["customers","main"],"name":"db.name","note":"In some SQL databases, the database name to be used is called \"schema name\". In case there are multiple layers that could be considered for database name (e.g. Oracle instance name and schema name), the database name to be used is the more specific layer (e.g. Oracle schema name).\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The name of the operation being executed, e.g. the [MongoDB command name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as `findAndModify`, or the SQL keyword.\n","examples":["findAndModify","HMSET","SELECT"],"name":"db.operation","note":"When setting this to an SQL keyword, it is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if the operation name is provided by the library being instrumented. If the SQL statement has an ambiguous operation, or performs more than one operation, this value may be omitted.\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The index of the database being accessed as used in the [`SELECT` command](https://redis.io/commands/select), provided as an integer. To be used instead of the generic `db.name` attribute.\n","examples":[0,1,15],"name":"db.redis.database_index","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-redis","type":"int"},{"brief":"The name of the primary table that the operation is acting upon, including the database name (if applicable).","examples":["public.users","customers"],"name":"db.sql.table","note":"It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-sql","type":"string"},{"brief":"The database statement being executed.\n","examples":["SELECT * FROM wuser_table","SET mykey \"WuValue\""],"name":"db.statement","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.","name":"db.system","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":{"allow_custom_values":null,"members":[{"brief":"Some other SQL database. Fallback only. See notes.","deprecated":null,"id":"other_sql","note":null,"stability":null,"value":"other_sql"},{"brief":"Microsoft SQL Server","deprecated":null,"id":"mssql","note":null,"stability":null,"value":"mssql"},{"brief":"Microsoft SQL Server Compact","deprecated":null,"id":"mssqlcompact","note":null,"stability":null,"value":"mssqlcompact"},{"brief":"MySQL","deprecated":null,"id":"mysql","note":null,"stability":null,"value":"mysql"},{"brief":"Oracle Database","deprecated":null,"id":"oracle","note":null,"stability":null,"value":"oracle"},{"brief":"IBM Db2","deprecated":null,"id":"db2","note":null,"stability":null,"value":"db2"},{"brief":"PostgreSQL","deprecated":null,"id":"postgresql","note":null,"stability":null,"value":"postgresql"},{"brief":"Amazon Redshift","deprecated":null,"id":"redshift","note":null,"stability":null,"value":"redshift"},{"brief":"Apache Hive","deprecated":null,"id":"hive","note":null,"stability":null,"value":"hive"},{"brief":"Cloudscape","deprecated":null,"id":"cloudscape","note":null,"stability":null,"value":"cloudscape"},{"brief":"HyperSQL DataBase","deprecated":null,"id":"hsqldb","note":null,"stability":null,"value":"hsqldb"},{"brief":"Progress Database","deprecated":null,"id":"progress","note":null,"stability":null,"value":"progress"},{"brief":"SAP MaxDB","deprecated":null,"id":"maxdb","note":null,"stability":null,"value":"maxdb"},{"brief":"SAP HANA","deprecated":null,"id":"hanadb","note":null,"stability":null,"value":"hanadb"},{"brief":"Ingres","deprecated":null,"id":"ingres","note":null,"stability":null,"value":"ingres"},{"brief":"FirstSQL","deprecated":null,"id":"firstsql","note":null,"stability":null,"value":"firstsql"},{"brief":"EnterpriseDB","deprecated":null,"id":"edb","note":null,"stability":null,"value":"edb"},{"brief":"InterSystems Caché","deprecated":null,"id":"cache","note":null,"stability":null,"value":"cache"},{"brief":"Adabas (Adaptable Database System)","deprecated":null,"id":"adabas","note":null,"stability":null,"value":"adabas"},{"brief":"Firebird","deprecated":null,"id":"firebird","note":null,"stability":null,"value":"firebird"},{"brief":"Apache Derby","deprecated":null,"id":"derby","note":null,"stability":null,"value":"derby"},{"brief":"FileMaker","deprecated":null,"id":"filemaker","note":null,"stability":null,"value":"filemaker"},{"brief":"Informix","deprecated":null,"id":"informix","note":null,"stability":null,"value":"informix"},{"brief":"InstantDB","deprecated":null,"id":"instantdb","note":null,"stability":null,"value":"instantdb"},{"brief":"InterBase","deprecated":null,"id":"interbase","note":null,"stability":null,"value":"interbase"},{"brief":"MariaDB","deprecated":null,"id":"mariadb","note":null,"stability":null,"value":"mariadb"},{"brief":"Netezza","deprecated":null,"id":"netezza","note":null,"stability":null,"value":"netezza"},{"brief":"Pervasive PSQL","deprecated":null,"id":"pervasive","note":null,"stability":null,"value":"pervasive"},{"brief":"PointBase","deprecated":null,"id":"pointbase","note":null,"stability":null,"value":"pointbase"},{"brief":"SQLite","deprecated":null,"id":"sqlite","note":null,"stability":null,"value":"sqlite"},{"brief":"Sybase","deprecated":null,"id":"sybase","note":null,"stability":null,"value":"sybase"},{"brief":"Teradata","deprecated":null,"id":"teradata","note":null,"stability":null,"value":"teradata"},{"brief":"Vertica","deprecated":null,"id":"vertica","note":null,"stability":null,"value":"vertica"},{"brief":"H2","deprecated":null,"id":"h2","note":null,"stability":null,"value":"h2"},{"brief":"ColdFusion IMQ","deprecated":null,"id":"coldfusion","note":null,"stability":null,"value":"coldfusion"},{"brief":"Apache Cassandra","deprecated":null,"id":"cassandra","note":null,"stability":null,"value":"cassandra"},{"brief":"Apache HBase","deprecated":null,"id":"hbase","note":null,"stability":null,"value":"hbase"},{"brief":"MongoDB","deprecated":null,"id":"mongodb","note":null,"stability":null,"value":"mongodb"},{"brief":"Redis","deprecated":null,"id":"redis","note":null,"stability":null,"value":"redis"},{"brief":"Couchbase","deprecated":null,"id":"couchbase","note":null,"stability":null,"value":"couchbase"},{"brief":"CouchDB","deprecated":null,"id":"couchdb","note":null,"stability":null,"value":"couchdb"},{"brief":"Microsoft Azure Cosmos DB","deprecated":null,"id":"cosmosdb","note":null,"stability":null,"value":"cosmosdb"},{"brief":"Amazon DynamoDB","deprecated":null,"id":"dynamodb","note":null,"stability":null,"value":"dynamodb"},{"brief":"Neo4j","deprecated":null,"id":"neo4j","note":null,"stability":null,"value":"neo4j"},{"brief":"Apache Geode","deprecated":null,"id":"geode","note":null,"stability":null,"value":"geode"},{"brief":"Elasticsearch","deprecated":null,"id":"elasticsearch","note":null,"stability":null,"value":"elasticsearch"},{"brief":"Memcached","deprecated":null,"id":"memcached","note":null,"stability":null,"value":"memcached"},{"brief":"CockroachDB","deprecated":null,"id":"cockroachdb","note":null,"stability":null,"value":"cockroachdb"},{"brief":"OpenSearch","deprecated":null,"id":"opensearch","note":null,"stability":null,"value":"opensearch"},{"brief":"ClickHouse","deprecated":null,"id":"clickhouse","note":null,"stability":null,"value":"clickhouse"},{"brief":"Cloud Spanner","deprecated":null,"id":"spanner","note":null,"stability":null,"value":"spanner"},{"brief":"Trino","deprecated":null,"id":"trino","note":null,"stability":null,"value":"trino"}]}},{"brief":"Username for accessing the database.\n","examples":["readonly_user","reporting_user"],"name":"db.user","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"}],"root_namespace":"db"},{"attributes":[{"brief":"SHOULD be set to true if the exception event is recorded at a point where it is known that the exception is escaping the scope of the span.\n","name":"exception.escaped","note":"An exception is considered to have escaped (or left) the scope of a span,\nif that span is ended while the exception is still logically \"in flight\".\nThis may be actually \"in flight\" in some languages (e.g. if the exception\nis passed to a Context manager\u0027s `__exit__` method in Python) but will\nusually be caught at the point of recording the exception in most languages.\n\nIt is usually not possible to determine at the point where an exception is thrown\nwhether it will escape the scope of a span.\nHowever, it is trivial to know that an exception\nwill escape, if one checks for an active exception just before ending the span,\nas done in the [example for recording span exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#recording-an-exception).\n\nIt follows that an exception may still escape the scope of the span\neven if the `exception.escaped` attribute was not set or set to false,\nsince the event might have been recorded at a time where it was not\nclear whether the exception will escape.","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"boolean"},{"brief":"The exception message.","examples":["Division by zero","Can\u0027t convert \u0027int\u0027 object to str implicitly"],"name":"exception.message","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.\n","examples":"Exception in thread \"main\" java.lang.RuntimeException: Test exception\\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at com.example.GenerateTrace.main(GenerateTrace.java:5)","name":"exception.stacktrace","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.\n","examples":["java.net.ConnectException","OSError"],"name":"exception.type","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"}],"root_namespace":"exception"},{"attributes":[{"brief":"The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n","examples":3495,"name":"http.request.body.size","requirement_level":"recommended","root_namespace":"http","stability":"development","type":"int"},{"brief":"HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.request.header.content-type=[\"application/json\"]","http.request.header.x-forwarded-for=[\"1.2.3.4\", \"1.2.3.5\"]"],"name":"http.request.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nThe `User-Agent` header is already captured in the `user_agent.original` attribute. Users MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"HTTP request method.","examples":["GET","POST","HEAD"],"name":"http.request.method","note":"HTTP request method value SHOULD be \"known\" to the instrumentation.\nBy default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)\nand the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).\n\nIf the HTTP request method is not known to instrumentation, it MUST set the `http.request.method` attribute to `_OTHER`.\n\nIf the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it MUST provide a way to override\nthe list of known HTTP methods. If this override is done via environment variable, then the environment variable MUST be named\nOTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods\n(this list MUST be a full override of the default known method, it is not a list of known methods in addition to the defaults).\n\nHTTP method names are case-sensitive and `http.request.method` attribute value MUST match a known HTTP method name exactly.\nInstrumentations for specific web frameworks that consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent.\nTracing instrumentations that do so, MUST also set `http.request.method_original` to the original value.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"CONNECT method.","deprecated":null,"id":"connect","note":null,"stability":null,"value":"CONNECT"},{"brief":"DELETE method.","deprecated":null,"id":"delete","note":null,"stability":null,"value":"DELETE"},{"brief":"GET method.","deprecated":null,"id":"get","note":null,"stability":null,"value":"GET"},{"brief":"HEAD method.","deprecated":null,"id":"head","note":null,"stability":null,"value":"HEAD"},{"brief":"OPTIONS method.","deprecated":null,"id":"options","note":null,"stability":null,"value":"OPTIONS"},{"brief":"PATCH method.","deprecated":null,"id":"patch","note":null,"stability":null,"value":"PATCH"},{"brief":"POST method.","deprecated":null,"id":"post","note":null,"stability":null,"value":"POST"},{"brief":"PUT method.","deprecated":null,"id":"put","note":null,"stability":null,"value":"PUT"},{"brief":"TRACE method.","deprecated":null,"id":"trace","note":null,"stability":null,"value":"TRACE"},{"brief":"Any HTTP method that the instrumentation has no prior knowledge of.","deprecated":null,"id":"other","note":null,"stability":null,"value":"_OTHER"}]}},{"brief":"Original HTTP method sent by the client in the request line.","examples":["GeT","ACL","foo"],"name":"http.request.method_original","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"},{"brief":"The ordinal number of request resending attempt (for any reason, including redirects).\n","examples":3,"name":"http.request.resend_count","note":"The resend count SHOULD be updated each time an HTTP request gets resent by the client, regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503 Server Unavailable, network issues, or any other).\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n","examples":3495,"name":"http.response.body.size","requirement_level":"recommended","root_namespace":"http","stability":"development","type":"int"},{"brief":"HTTP response headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.response.header.content-type=[\"application/json\"]","http.response.header.my-custom-header=[\"abc\", \"def\"]"],"name":"http.response.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).","examples":[200],"name":"http.response.status_code","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The matched route, that is, the path template in the format used by the respective server framework.\n","examples":["/users/:userID?","{controller}/{action}/{id?}"],"name":"http.route","note":"MUST NOT be populated when this is not supported by the HTTP server framework as the route attribute should have low-cardinality and the URI path can NOT substitute it.\nSHOULD include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one.","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"}],"root_namespace":"http"},{"attributes":[{"brief":"The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.","examples":"DE","name":"network.carrier.icc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The mobile carrier country code.","examples":"310","name":"network.carrier.mcc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The mobile carrier network code.","examples":"001","name":"network.carrier.mnc","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"The name of the mobile carrier.","examples":"sprint","name":"network.carrier.name","requirement_level":"recommended","root_namespace":"network","type":"string"},{"brief":"This describes more details regarding the connection.type. It may be the type of cell technology connection, but it could be used for describing details about a wifi connection.","examples":"LTE","name":"network.connection.subtype","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":null,"members":[{"brief":"GPRS","deprecated":null,"id":"gprs","note":null,"stability":null,"value":"gprs"},{"brief":"EDGE","deprecated":null,"id":"edge","note":null,"stability":null,"value":"edge"},{"brief":"UMTS","deprecated":null,"id":"umts","note":null,"stability":null,"value":"umts"},{"brief":"CDMA","deprecated":null,"id":"cdma","note":null,"stability":null,"value":"cdma"},{"brief":"EVDO Rel. 0","deprecated":null,"id":"evdo_0","note":null,"stability":null,"value":"evdo_0"},{"brief":"EVDO Rev. A","deprecated":null,"id":"evdo_a","note":null,"stability":null,"value":"evdo_a"},{"brief":"CDMA2000 1XRTT","deprecated":null,"id":"cdma2000_1xrtt","note":null,"stability":null,"value":"cdma2000_1xrtt"},{"brief":"HSDPA","deprecated":null,"id":"hsdpa","note":null,"stability":null,"value":"hsdpa"},{"brief":"HSUPA","deprecated":null,"id":"hsupa","note":null,"stability":null,"value":"hsupa"},{"brief":"HSPA","deprecated":null,"id":"hspa","note":null,"stability":null,"value":"hspa"},{"brief":"IDEN","deprecated":null,"id":"iden","note":null,"stability":null,"value":"iden"},{"brief":"EVDO Rev. B","deprecated":null,"id":"evdo_b","note":null,"stability":null,"value":"evdo_b"},{"brief":"LTE","deprecated":null,"id":"lte","note":null,"stability":null,"value":"lte"},{"brief":"EHRPD","deprecated":null,"id":"ehrpd","note":null,"stability":null,"value":"ehrpd"},{"brief":"HSPAP","deprecated":null,"id":"hspap","note":null,"stability":null,"value":"hspap"},{"brief":"GSM","deprecated":null,"id":"gsm","note":null,"stability":null,"value":"gsm"},{"brief":"TD-SCDMA","deprecated":null,"id":"td_scdma","note":null,"stability":null,"value":"td_scdma"},{"brief":"IWLAN","deprecated":null,"id":"iwlan","note":null,"stability":null,"value":"iwlan"},{"brief":"5G NR (New Radio)","deprecated":null,"id":"nr","note":null,"stability":null,"value":"nr"},{"brief":"5G NRNSA (New Radio Non-Standalone)","deprecated":null,"id":"nrnsa","note":null,"stability":null,"value":"nrnsa"},{"brief":"LTE CA","deprecated":null,"id":"lte_ca","note":null,"stability":null,"value":"lte_ca"}]}},{"brief":"The internet connection type.","examples":"wifi","name":"network.connection.type","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"wifi","note":null,"stability":null,"value":"wifi"},{"brief":null,"deprecated":null,"id":"wired","note":null,"stability":null,"value":"wired"},{"brief":null,"deprecated":null,"id":"cell","note":null,"stability":null,"value":"cell"},{"brief":null,"deprecated":null,"id":"unavailable","note":null,"stability":null,"value":"unavailable"},{"brief":null,"deprecated":null,"id":"unknown","note":null,"stability":null,"value":"unknown"}]}},{"brief":"The network IO operation direction.","examples":["transmit"],"name":"network.io.direction","requirement_level":"recommended","root_namespace":"network","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"transmit","note":null,"stability":null,"value":"transmit"},{"brief":null,"deprecated":null,"id":"receive","note":null,"stability":null,"value":"receive"}]}},{"brief":"Local address of the network connection - IP address or Unix domain socket name.","examples":["10.1.2.80","/tmp/my.sock"],"name":"network.local.address","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Local port number of the network connection.","examples":[65123],"name":"network.local.port","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"int"},{"brief":"Peer address of the network connection - IP address or Unix domain socket name.","examples":["10.1.2.80","/tmp/my.sock"],"name":"network.peer.address","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Peer port number of the network connection.","examples":[65123],"name":"network.peer.port","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"int"},{"brief":"[OSI application layer](https://osi-model.com/application-layer/) or non-OSI equivalent.","examples":["amqp","http","mqtt"],"name":"network.protocol.name","note":"The value SHOULD be normalized to lowercase.","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"Version of the protocol specified in `network.protocol.name`.","examples":"3.1.1","name":"network.protocol.version","note":"`network.protocol.version` refers to the version of the protocol used and might be different from the protocol client\u0027s version. If the HTTP client has a version of `0.27.2`, but sends HTTP version `1.1`, this attribute should be set to `1.1`.\n","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":"string"},{"brief":"[OSI transport layer](https://osi-model.com/transport-layer/) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n","examples":["tcp","udp"],"name":"network.transport","note":"The value SHOULD be normalized to lowercase.\n\nConsider always setting the transport when setting a port number, since\na port number is ambiguous without knowing the transport. For example\ndifferent processes could be listening on TCP port 12345 and UDP port 12345.\n","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"TCP","deprecated":null,"id":"tcp","note":null,"stability":null,"value":"tcp"},{"brief":"UDP","deprecated":null,"id":"udp","note":null,"stability":null,"value":"udp"},{"brief":"Named or anonymous pipe.","deprecated":null,"id":"pipe","note":null,"stability":null,"value":"pipe"},{"brief":"Unix domain socket","deprecated":null,"id":"unix","note":null,"stability":null,"value":"unix"}]}},{"brief":"[OSI network layer](https://osi-model.com/network-layer/) or non-OSI equivalent.","examples":["ipv4","ipv6"],"name":"network.type","note":"The value SHOULD be normalized to lowercase.","requirement_level":"recommended","root_namespace":"network","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"IPv4","deprecated":null,"id":"ipv4","note":null,"stability":null,"value":"ipv4"},{"brief":"IPv6","deprecated":null,"id":"ipv6","note":null,"stability":null,"value":"ipv6"}]}}],"root_namespace":"network"},{"attributes":[{"brief":"The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component","examples":["SemConv"],"name":"url.fragment","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"Absolute URL describing a network resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)","examples":["https://www.foo.bar/search?q=OpenTelemetry#SemConv","//localhost"],"name":"url.full","note":"For network calls, URL usually has `scheme://host[:port][path][?query][#fragment]` format, where the fragment is not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`. In such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed) and SHOULD NOT be validated or modified except for sanitizing purposes.\n","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component","examples":["/search"],"name":"url.path","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component","examples":["q=OpenTelemetry"],"name":"url.query","note":"Sensitive content provided in query string SHOULD be scrubbed when instrumentations can identify it.","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"},{"brief":"The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.","examples":["https","ftp","telnet"],"name":"url.scheme","requirement_level":"recommended","root_namespace":"url","stability":"stable","type":"string"}],"root_namespace":"url"},{"attributes":[{"brief":"Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client.\n","examples":["CERN-LineMode/2.15 libwww/2.17b3","Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1"],"name":"user_agent.original","requirement_level":"recommended","root_namespace":"user_agent","stability":"stable","type":"string"}],"root_namespace":"user_agent"}] \ No newline at end of file diff --git a/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_grouped_attributes_without_experimental.json b/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_grouped_attributes_without_experimental.json index b3113708..8ca4f487 100644 --- a/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_grouped_attributes_without_experimental.json +++ b/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_grouped_attributes_without_experimental.json @@ -1 +1 @@ -[{"attributes":[{"brief":"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).\n","name":"db.cassandra.consistency_level","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":{"allow_custom_values":true,"members":[{"brief":null,"deprecated":null,"id":"all","note":null,"stability":null,"value":"all"},{"brief":null,"deprecated":null,"id":"each_quorum","note":null,"stability":null,"value":"each_quorum"},{"brief":null,"deprecated":null,"id":"quorum","note":null,"stability":null,"value":"quorum"},{"brief":null,"deprecated":null,"id":"local_quorum","note":null,"stability":null,"value":"local_quorum"},{"brief":null,"deprecated":null,"id":"one","note":null,"stability":null,"value":"one"},{"brief":null,"deprecated":null,"id":"two","note":null,"stability":null,"value":"two"},{"brief":null,"deprecated":null,"id":"three","note":null,"stability":null,"value":"three"},{"brief":null,"deprecated":null,"id":"local_one","note":null,"stability":null,"value":"local_one"},{"brief":null,"deprecated":null,"id":"any","note":null,"stability":null,"value":"any"},{"brief":null,"deprecated":null,"id":"serial","note":null,"stability":null,"value":"serial"},{"brief":null,"deprecated":null,"id":"local_serial","note":null,"stability":null,"value":"local_serial"}]}},{"brief":"The data center of the coordinating node for a query.\n","examples":"us-west-2","name":"db.cassandra.coordinator.dc","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The ID of the coordinating node for a query.\n","examples":"be13faa2-8574-4d71-926d-27f16cf8a7af","name":"db.cassandra.coordinator.id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"Whether or not the query is idempotent.\n","name":"db.cassandra.idempotence","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"boolean"},{"brief":"The fetch size used for paging, i.e. how many rows will be returned at once.\n","examples":[5000],"name":"db.cassandra.page_size","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The number of times a query was speculatively executed. Not set or `0` if the query was not executed speculatively.\n","examples":[0,2],"name":"db.cassandra.speculative_execution_count","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The name of the primary Cassandra table that the operation is acting upon, including the keyspace name (if applicable).","examples":"mytable","name":"db.cassandra.table","note":"This mirrors the db.sql.table attribute but references cassandra rather than sql. It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The connection string used to connect to the database. It is recommended to remove embedded credentials.\n","examples":"Server=(localdb)\\v11.0;Integrated Security=true;","name":"db.connection_string","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"Unique Cosmos client instance id.","examples":"3ba4827d-4422-483f-b59f-85b74211c11d","name":"db.cosmosdb.client_id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"Cosmos client connection mode.","name":"db.cosmosdb.connection_mode","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":false,"members":[{"brief":"Gateway (HTTP) connections mode","deprecated":null,"id":"gateway","note":null,"stability":null,"value":"gateway"},{"brief":"Direct connection.","deprecated":null,"id":"direct","note":null,"stability":null,"value":"direct"}]}},{"brief":"Cosmos DB container name.","examples":"anystring","name":"db.cosmosdb.container","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"CosmosDB Operation Type.","name":"db.cosmosdb.operation_type","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":true,"members":[{"brief":null,"deprecated":null,"id":"invalid","note":null,"stability":null,"value":"Invalid"},{"brief":null,"deprecated":null,"id":"create","note":null,"stability":null,"value":"Create"},{"brief":null,"deprecated":null,"id":"patch","note":null,"stability":null,"value":"Patch"},{"brief":null,"deprecated":null,"id":"read","note":null,"stability":null,"value":"Read"},{"brief":null,"deprecated":null,"id":"read_feed","note":null,"stability":null,"value":"ReadFeed"},{"brief":null,"deprecated":null,"id":"delete","note":null,"stability":null,"value":"Delete"},{"brief":null,"deprecated":null,"id":"replace","note":null,"stability":null,"value":"Replace"},{"brief":null,"deprecated":null,"id":"execute","note":null,"stability":null,"value":"Execute"},{"brief":null,"deprecated":null,"id":"query","note":null,"stability":null,"value":"Query"},{"brief":null,"deprecated":null,"id":"head","note":null,"stability":null,"value":"Head"},{"brief":null,"deprecated":null,"id":"head_feed","note":null,"stability":null,"value":"HeadFeed"},{"brief":null,"deprecated":null,"id":"upsert","note":null,"stability":null,"value":"Upsert"},{"brief":null,"deprecated":null,"id":"batch","note":null,"stability":null,"value":"Batch"},{"brief":null,"deprecated":null,"id":"query_plan","note":null,"stability":null,"value":"QueryPlan"},{"brief":null,"deprecated":null,"id":"execute_javascript","note":null,"stability":null,"value":"ExecuteJavaScript"}]}},{"brief":"RU consumed for that operation","examples":[46.18,1.0],"name":"db.cosmosdb.request_charge","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"double"},{"brief":"Request payload size in bytes","name":"db.cosmosdb.request_content_length","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB status code.","examples":[200,201],"name":"db.cosmosdb.status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB sub status code.","examples":[1000,1002],"name":"db.cosmosdb.sub_status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Represents the identifier of an Elasticsearch cluster.\n","examples":["e9106fc68e3044f0b1475b04bf4ffd5f"],"name":"db.elasticsearch.cluster.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"Represents the human-readable identifier of the node/instance to which a request was routed.\n","examples":["instance-0000000001"],"name":"db.elasticsearch.node.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"A dynamic value in the url path.\n","examples":["db.elasticsearch.path_parts.index=test-index","db.elasticsearch.path_parts.doc_id=123"],"name":"db.elasticsearch.path_parts","note":"Many Elasticsearch url paths allow dynamic values. These SHOULD be recorded in span attributes in the format `db.elasticsearch.path_parts.\u003ckey\u003e`, where `\u003ckey\u003e` is the url path part name. The implementation SHOULD reference the [elasticsearch schema](https://raw.githubusercontent.com/elastic/elasticsearch-specification/main/output/schema/schema.json) in order to map the path part values to their names.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"template[string]"},{"brief":"An identifier (address, unique name, or any other identifier) of the database instance that is executing queries or mutations on the current connection. This is useful in cases where the database is running in a clustered environment and the instrumentation is able to record the node executing the query. The client may obtain this value in databases like MySQL using queries like `select @@hostname`.\n","examples":"mysql-e26b99z.example.com","name":"db.instance.id","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The fully-qualified class name of the [Java Database Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to connect.\n","examples":["org.postgresql.Driver","com.microsoft.sqlserver.jdbc.SQLServerDriver"],"name":"db.jdbc.driver_classname","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-jdbc","type":"string"},{"brief":"The MongoDB collection being accessed within the database stated in `db.name`.\n","examples":["customers","products"],"name":"db.mongodb.collection","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mongodb","type":"string"},{"brief":"The Microsoft SQL Server [instance name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) connecting to. This name is used to determine the port of a named instance.\n","examples":"MSSQLSERVER","name":"db.mssql.instance_name","note":"If setting a `db.mssql.instance_name`, `server.port` is no longer required (but still recommended if non-standard).\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mssql","type":"string"},{"brief":"This attribute is used to report the name of the database being accessed. For commands that switch the database, this should be set to the target database (even if the command fails).\n","examples":["customers","main"],"name":"db.name","note":"In some SQL databases, the database name to be used is called \"schema name\". In case there are multiple layers that could be considered for database name (e.g. Oracle instance name and schema name), the database name to be used is the more specific layer (e.g. Oracle schema name).\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The name of the operation being executed, e.g. the [MongoDB command name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as `findAndModify`, or the SQL keyword.\n","examples":["findAndModify","HMSET","SELECT"],"name":"db.operation","note":"When setting this to an SQL keyword, it is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if the operation name is provided by the library being instrumented. If the SQL statement has an ambiguous operation, or performs more than one operation, this value may be omitted.\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The index of the database being accessed as used in the [`SELECT` command](https://redis.io/commands/select), provided as an integer. To be used instead of the generic `db.name` attribute.\n","examples":[0,1,15],"name":"db.redis.database_index","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-redis","type":"int"},{"brief":"The name of the primary table that the operation is acting upon, including the database name (if applicable).","examples":["public.users","customers"],"name":"db.sql.table","note":"It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-sql","type":"string"},{"brief":"The database statement being executed.\n","examples":["SELECT * FROM wuser_table","SET mykey \"WuValue\""],"name":"db.statement","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.","name":"db.system","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":{"allow_custom_values":true,"members":[{"brief":"Some other SQL database. Fallback only. See notes.","deprecated":null,"id":"other_sql","note":null,"stability":null,"value":"other_sql"},{"brief":"Microsoft SQL Server","deprecated":null,"id":"mssql","note":null,"stability":null,"value":"mssql"},{"brief":"Microsoft SQL Server Compact","deprecated":null,"id":"mssqlcompact","note":null,"stability":null,"value":"mssqlcompact"},{"brief":"MySQL","deprecated":null,"id":"mysql","note":null,"stability":null,"value":"mysql"},{"brief":"Oracle Database","deprecated":null,"id":"oracle","note":null,"stability":null,"value":"oracle"},{"brief":"IBM Db2","deprecated":null,"id":"db2","note":null,"stability":null,"value":"db2"},{"brief":"PostgreSQL","deprecated":null,"id":"postgresql","note":null,"stability":null,"value":"postgresql"},{"brief":"Amazon Redshift","deprecated":null,"id":"redshift","note":null,"stability":null,"value":"redshift"},{"brief":"Apache Hive","deprecated":null,"id":"hive","note":null,"stability":null,"value":"hive"},{"brief":"Cloudscape","deprecated":null,"id":"cloudscape","note":null,"stability":null,"value":"cloudscape"},{"brief":"HyperSQL DataBase","deprecated":null,"id":"hsqldb","note":null,"stability":null,"value":"hsqldb"},{"brief":"Progress Database","deprecated":null,"id":"progress","note":null,"stability":null,"value":"progress"},{"brief":"SAP MaxDB","deprecated":null,"id":"maxdb","note":null,"stability":null,"value":"maxdb"},{"brief":"SAP HANA","deprecated":null,"id":"hanadb","note":null,"stability":null,"value":"hanadb"},{"brief":"Ingres","deprecated":null,"id":"ingres","note":null,"stability":null,"value":"ingres"},{"brief":"FirstSQL","deprecated":null,"id":"firstsql","note":null,"stability":null,"value":"firstsql"},{"brief":"EnterpriseDB","deprecated":null,"id":"edb","note":null,"stability":null,"value":"edb"},{"brief":"InterSystems Caché","deprecated":null,"id":"cache","note":null,"stability":null,"value":"cache"},{"brief":"Adabas (Adaptable Database System)","deprecated":null,"id":"adabas","note":null,"stability":null,"value":"adabas"},{"brief":"Firebird","deprecated":null,"id":"firebird","note":null,"stability":null,"value":"firebird"},{"brief":"Apache Derby","deprecated":null,"id":"derby","note":null,"stability":null,"value":"derby"},{"brief":"FileMaker","deprecated":null,"id":"filemaker","note":null,"stability":null,"value":"filemaker"},{"brief":"Informix","deprecated":null,"id":"informix","note":null,"stability":null,"value":"informix"},{"brief":"InstantDB","deprecated":null,"id":"instantdb","note":null,"stability":null,"value":"instantdb"},{"brief":"InterBase","deprecated":null,"id":"interbase","note":null,"stability":null,"value":"interbase"},{"brief":"MariaDB","deprecated":null,"id":"mariadb","note":null,"stability":null,"value":"mariadb"},{"brief":"Netezza","deprecated":null,"id":"netezza","note":null,"stability":null,"value":"netezza"},{"brief":"Pervasive PSQL","deprecated":null,"id":"pervasive","note":null,"stability":null,"value":"pervasive"},{"brief":"PointBase","deprecated":null,"id":"pointbase","note":null,"stability":null,"value":"pointbase"},{"brief":"SQLite","deprecated":null,"id":"sqlite","note":null,"stability":null,"value":"sqlite"},{"brief":"Sybase","deprecated":null,"id":"sybase","note":null,"stability":null,"value":"sybase"},{"brief":"Teradata","deprecated":null,"id":"teradata","note":null,"stability":null,"value":"teradata"},{"brief":"Vertica","deprecated":null,"id":"vertica","note":null,"stability":null,"value":"vertica"},{"brief":"H2","deprecated":null,"id":"h2","note":null,"stability":null,"value":"h2"},{"brief":"ColdFusion IMQ","deprecated":null,"id":"coldfusion","note":null,"stability":null,"value":"coldfusion"},{"brief":"Apache Cassandra","deprecated":null,"id":"cassandra","note":null,"stability":null,"value":"cassandra"},{"brief":"Apache HBase","deprecated":null,"id":"hbase","note":null,"stability":null,"value":"hbase"},{"brief":"MongoDB","deprecated":null,"id":"mongodb","note":null,"stability":null,"value":"mongodb"},{"brief":"Redis","deprecated":null,"id":"redis","note":null,"stability":null,"value":"redis"},{"brief":"Couchbase","deprecated":null,"id":"couchbase","note":null,"stability":null,"value":"couchbase"},{"brief":"CouchDB","deprecated":null,"id":"couchdb","note":null,"stability":null,"value":"couchdb"},{"brief":"Microsoft Azure Cosmos DB","deprecated":null,"id":"cosmosdb","note":null,"stability":null,"value":"cosmosdb"},{"brief":"Amazon DynamoDB","deprecated":null,"id":"dynamodb","note":null,"stability":null,"value":"dynamodb"},{"brief":"Neo4j","deprecated":null,"id":"neo4j","note":null,"stability":null,"value":"neo4j"},{"brief":"Apache Geode","deprecated":null,"id":"geode","note":null,"stability":null,"value":"geode"},{"brief":"Elasticsearch","deprecated":null,"id":"elasticsearch","note":null,"stability":null,"value":"elasticsearch"},{"brief":"Memcached","deprecated":null,"id":"memcached","note":null,"stability":null,"value":"memcached"},{"brief":"CockroachDB","deprecated":null,"id":"cockroachdb","note":null,"stability":null,"value":"cockroachdb"},{"brief":"OpenSearch","deprecated":null,"id":"opensearch","note":null,"stability":null,"value":"opensearch"},{"brief":"ClickHouse","deprecated":null,"id":"clickhouse","note":null,"stability":null,"value":"clickhouse"},{"brief":"Cloud Spanner","deprecated":null,"id":"spanner","note":null,"stability":null,"value":"spanner"},{"brief":"Trino","deprecated":null,"id":"trino","note":null,"stability":null,"value":"trino"}]}},{"brief":"Username for accessing the database.\n","examples":["readonly_user","reporting_user"],"name":"db.user","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"}],"root_namespace":"db"},{"attributes":[{"brief":"SHOULD be set to true if the exception event is recorded at a point where it is known that the exception is escaping the scope of the span.\n","name":"exception.escaped","note":"An exception is considered to have escaped (or left) the scope of a span,\nif that span is ended while the exception is still logically \"in flight\".\nThis may be actually \"in flight\" in some languages (e.g. if the exception\nis passed to a Context manager\u0027s `__exit__` method in Python) but will\nusually be caught at the point of recording the exception in most languages.\n\nIt is usually not possible to determine at the point where an exception is thrown\nwhether it will escape the scope of a span.\nHowever, it is trivial to know that an exception\nwill escape, if one checks for an active exception just before ending the span,\nas done in the [example for recording span exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#recording-an-exception).\n\nIt follows that an exception may still escape the scope of the span\neven if the `exception.escaped` attribute was not set or set to false,\nsince the event might have been recorded at a time where it was not\nclear whether the exception will escape.","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"boolean"},{"brief":"The exception message.","examples":["Division by zero","Can\u0027t convert \u0027int\u0027 object to str implicitly"],"name":"exception.message","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.\n","examples":"Exception in thread \"main\" java.lang.RuntimeException: Test exception\\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at com.example.GenerateTrace.main(GenerateTrace.java:5)","name":"exception.stacktrace","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.\n","examples":["java.net.ConnectException","OSError"],"name":"exception.type","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"}],"root_namespace":"exception"},{"attributes":[{"brief":"HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.request.header.content-type=[\"application/json\"]","http.request.header.x-forwarded-for=[\"1.2.3.4\", \"1.2.3.5\"]"],"name":"http.request.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nThe `User-Agent` header is already captured in the `user_agent.original` attribute. Users MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"HTTP request method.","examples":["GET","POST","HEAD"],"name":"http.request.method","note":"HTTP request method value SHOULD be \"known\" to the instrumentation.\nBy default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)\nand the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).\n\nIf the HTTP request method is not known to instrumentation, it MUST set the `http.request.method` attribute to `_OTHER`.\n\nIf the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it MUST provide a way to override\nthe list of known HTTP methods. If this override is done via environment variable, then the environment variable MUST be named\nOTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods\n(this list MUST be a full override of the default known method, it is not a list of known methods in addition to the defaults).\n\nHTTP method names are case-sensitive and `http.request.method` attribute value MUST match a known HTTP method name exactly.\nInstrumentations for specific web frameworks that consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent.\nTracing instrumentations that do so, MUST also set `http.request.method_original` to the original value.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":{"allow_custom_values":true,"members":[{"brief":"CONNECT method.","deprecated":null,"id":"connect","note":null,"stability":null,"value":"CONNECT"},{"brief":"DELETE method.","deprecated":null,"id":"delete","note":null,"stability":null,"value":"DELETE"},{"brief":"GET method.","deprecated":null,"id":"get","note":null,"stability":null,"value":"GET"},{"brief":"HEAD method.","deprecated":null,"id":"head","note":null,"stability":null,"value":"HEAD"},{"brief":"OPTIONS method.","deprecated":null,"id":"options","note":null,"stability":null,"value":"OPTIONS"},{"brief":"PATCH method.","deprecated":null,"id":"patch","note":null,"stability":null,"value":"PATCH"},{"brief":"POST method.","deprecated":null,"id":"post","note":null,"stability":null,"value":"POST"},{"brief":"PUT method.","deprecated":null,"id":"put","note":null,"stability":null,"value":"PUT"},{"brief":"TRACE method.","deprecated":null,"id":"trace","note":null,"stability":null,"value":"TRACE"},{"brief":"Any HTTP method that the instrumentation has no prior knowledge of.","deprecated":null,"id":"other","note":null,"stability":null,"value":"_OTHER"}]}},{"brief":"Original HTTP method sent by the client in the request line.","examples":["GeT","ACL","foo"],"name":"http.request.method_original","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"},{"brief":"The ordinal number of request resending attempt (for any reason, including redirects).\n","examples":3,"name":"http.request.resend_count","note":"The resend count SHOULD be updated each time an HTTP request gets resent by the client, regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503 Server Unavailable, network issues, or any other).\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"HTTP response headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.response.header.content-type=[\"application/json\"]","http.response.header.my-custom-header=[\"abc\", \"def\"]"],"name":"http.response.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).","examples":[200],"name":"http.response.status_code","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The matched route, that is, the path template in the format used by the respective server framework.\n","examples":["/users/:userID?","{controller}/{action}/{id?}"],"name":"http.route","note":"MUST NOT be populated when this is not supported by the HTTP server framework as the route attribute should have low-cardinality and the URI path can NOT substitute it.\nSHOULD include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one.","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"}],"root_namespace":"http"},{"attributes":[{"brief":"Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client.\n","examples":["CERN-LineMode/2.15 libwww/2.17b3","Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1"],"name":"user_agent.original","requirement_level":"recommended","root_namespace":"user_agent","stability":"stable","type":"string"}],"root_namespace":"user_agent"}] \ No newline at end of file +[{"attributes":[{"brief":"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).\n","name":"db.cassandra.consistency_level","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"all","note":null,"stability":null,"value":"all"},{"brief":null,"deprecated":null,"id":"each_quorum","note":null,"stability":null,"value":"each_quorum"},{"brief":null,"deprecated":null,"id":"quorum","note":null,"stability":null,"value":"quorum"},{"brief":null,"deprecated":null,"id":"local_quorum","note":null,"stability":null,"value":"local_quorum"},{"brief":null,"deprecated":null,"id":"one","note":null,"stability":null,"value":"one"},{"brief":null,"deprecated":null,"id":"two","note":null,"stability":null,"value":"two"},{"brief":null,"deprecated":null,"id":"three","note":null,"stability":null,"value":"three"},{"brief":null,"deprecated":null,"id":"local_one","note":null,"stability":null,"value":"local_one"},{"brief":null,"deprecated":null,"id":"any","note":null,"stability":null,"value":"any"},{"brief":null,"deprecated":null,"id":"serial","note":null,"stability":null,"value":"serial"},{"brief":null,"deprecated":null,"id":"local_serial","note":null,"stability":null,"value":"local_serial"}]}},{"brief":"The data center of the coordinating node for a query.\n","examples":"us-west-2","name":"db.cassandra.coordinator.dc","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The ID of the coordinating node for a query.\n","examples":"be13faa2-8574-4d71-926d-27f16cf8a7af","name":"db.cassandra.coordinator.id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"Whether or not the query is idempotent.\n","name":"db.cassandra.idempotence","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"boolean"},{"brief":"The fetch size used for paging, i.e. how many rows will be returned at once.\n","examples":[5000],"name":"db.cassandra.page_size","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The number of times a query was speculatively executed. Not set or `0` if the query was not executed speculatively.\n","examples":[0,2],"name":"db.cassandra.speculative_execution_count","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"int"},{"brief":"The name of the primary Cassandra table that the operation is acting upon, including the keyspace name (if applicable).","examples":"mytable","name":"db.cassandra.table","note":"This mirrors the db.sql.table attribute but references cassandra rather than sql. It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cassandra","type":"string"},{"brief":"The connection string used to connect to the database. It is recommended to remove embedded credentials.\n","examples":"Server=(localdb)\\v11.0;Integrated Security=true;","name":"db.connection_string","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"Unique Cosmos client instance id.","examples":"3ba4827d-4422-483f-b59f-85b74211c11d","name":"db.cosmosdb.client_id","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"Cosmos client connection mode.","name":"db.cosmosdb.connection_mode","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":null,"members":[{"brief":"Gateway (HTTP) connections mode","deprecated":null,"id":"gateway","note":null,"stability":null,"value":"gateway"},{"brief":"Direct connection.","deprecated":null,"id":"direct","note":null,"stability":null,"value":"direct"}]}},{"brief":"Cosmos DB container name.","examples":"anystring","name":"db.cosmosdb.container","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"string"},{"brief":"CosmosDB Operation Type.","name":"db.cosmosdb.operation_type","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":{"allow_custom_values":null,"members":[{"brief":null,"deprecated":null,"id":"invalid","note":null,"stability":null,"value":"Invalid"},{"brief":null,"deprecated":null,"id":"create","note":null,"stability":null,"value":"Create"},{"brief":null,"deprecated":null,"id":"patch","note":null,"stability":null,"value":"Patch"},{"brief":null,"deprecated":null,"id":"read","note":null,"stability":null,"value":"Read"},{"brief":null,"deprecated":null,"id":"read_feed","note":null,"stability":null,"value":"ReadFeed"},{"brief":null,"deprecated":null,"id":"delete","note":null,"stability":null,"value":"Delete"},{"brief":null,"deprecated":null,"id":"replace","note":null,"stability":null,"value":"Replace"},{"brief":null,"deprecated":null,"id":"execute","note":null,"stability":null,"value":"Execute"},{"brief":null,"deprecated":null,"id":"query","note":null,"stability":null,"value":"Query"},{"brief":null,"deprecated":null,"id":"head","note":null,"stability":null,"value":"Head"},{"brief":null,"deprecated":null,"id":"head_feed","note":null,"stability":null,"value":"HeadFeed"},{"brief":null,"deprecated":null,"id":"upsert","note":null,"stability":null,"value":"Upsert"},{"brief":null,"deprecated":null,"id":"batch","note":null,"stability":null,"value":"Batch"},{"brief":null,"deprecated":null,"id":"query_plan","note":null,"stability":null,"value":"QueryPlan"},{"brief":null,"deprecated":null,"id":"execute_javascript","note":null,"stability":null,"value":"ExecuteJavaScript"}]}},{"brief":"RU consumed for that operation","examples":[46.18,1.0],"name":"db.cosmosdb.request_charge","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"double"},{"brief":"Request payload size in bytes","name":"db.cosmosdb.request_content_length","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB status code.","examples":[200,201],"name":"db.cosmosdb.status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Cosmos DB sub status code.","examples":[1000,1002],"name":"db.cosmosdb.sub_status_code","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-cosmosdb","type":"int"},{"brief":"Represents the identifier of an Elasticsearch cluster.\n","examples":["e9106fc68e3044f0b1475b04bf4ffd5f"],"name":"db.elasticsearch.cluster.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"Represents the human-readable identifier of the node/instance to which a request was routed.\n","examples":["instance-0000000001"],"name":"db.elasticsearch.node.name","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"string"},{"brief":"A dynamic value in the url path.\n","examples":["db.elasticsearch.path_parts.index=test-index","db.elasticsearch.path_parts.doc_id=123"],"name":"db.elasticsearch.path_parts","note":"Many Elasticsearch url paths allow dynamic values. These SHOULD be recorded in span attributes in the format `db.elasticsearch.path_parts.\u003ckey\u003e`, where `\u003ckey\u003e` is the url path part name. The implementation SHOULD reference the [elasticsearch schema](https://raw.githubusercontent.com/elastic/elasticsearch-specification/main/output/schema/schema.json) in order to map the path part values to their names.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-elasticsearch","type":"template[string]"},{"brief":"An identifier (address, unique name, or any other identifier) of the database instance that is executing queries or mutations on the current connection. This is useful in cases where the database is running in a clustered environment and the instrumentation is able to record the node executing the query. The client may obtain this value in databases like MySQL using queries like `select @@hostname`.\n","examples":"mysql-e26b99z.example.com","name":"db.instance.id","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The fully-qualified class name of the [Java Database Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to connect.\n","examples":["org.postgresql.Driver","com.microsoft.sqlserver.jdbc.SQLServerDriver"],"name":"db.jdbc.driver_classname","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-jdbc","type":"string"},{"brief":"The MongoDB collection being accessed within the database stated in `db.name`.\n","examples":["customers","products"],"name":"db.mongodb.collection","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mongodb","type":"string"},{"brief":"The Microsoft SQL Server [instance name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) connecting to. This name is used to determine the port of a named instance.\n","examples":"MSSQLSERVER","name":"db.mssql.instance_name","note":"If setting a `db.mssql.instance_name`, `server.port` is no longer required (but still recommended if non-standard).\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-mssql","type":"string"},{"brief":"This attribute is used to report the name of the database being accessed. For commands that switch the database, this should be set to the target database (even if the command fails).\n","examples":["customers","main"],"name":"db.name","note":"In some SQL databases, the database name to be used is called \"schema name\". In case there are multiple layers that could be considered for database name (e.g. Oracle instance name and schema name), the database name to be used is the more specific layer (e.g. Oracle schema name).\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The name of the operation being executed, e.g. the [MongoDB command name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as `findAndModify`, or the SQL keyword.\n","examples":["findAndModify","HMSET","SELECT"],"name":"db.operation","note":"When setting this to an SQL keyword, it is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if the operation name is provided by the library being instrumented. If the SQL statement has an ambiguous operation, or performs more than one operation, this value may be omitted.\n","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"The index of the database being accessed as used in the [`SELECT` command](https://redis.io/commands/select), provided as an integer. To be used instead of the generic `db.name` attribute.\n","examples":[0,1,15],"name":"db.redis.database_index","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-redis","type":"int"},{"brief":"The name of the primary table that the operation is acting upon, including the database name (if applicable).","examples":["public.users","customers"],"name":"db.sql.table","note":"It is not recommended to attempt any client-side parsing of `db.statement` just to get this property, but it should be set if it is provided by the library being instrumented. If the operation is acting upon an anonymous table, or more than one table, this value MUST NOT be set.\n","requirement_level":"recommended","root_namespace":"db","tag":"tech-specific-sql","type":"string"},{"brief":"The database statement being executed.\n","examples":["SELECT * FROM wuser_table","SET mykey \"WuValue\""],"name":"db.statement","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"},{"brief":"An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers.","name":"db.system","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":{"allow_custom_values":null,"members":[{"brief":"Some other SQL database. Fallback only. See notes.","deprecated":null,"id":"other_sql","note":null,"stability":null,"value":"other_sql"},{"brief":"Microsoft SQL Server","deprecated":null,"id":"mssql","note":null,"stability":null,"value":"mssql"},{"brief":"Microsoft SQL Server Compact","deprecated":null,"id":"mssqlcompact","note":null,"stability":null,"value":"mssqlcompact"},{"brief":"MySQL","deprecated":null,"id":"mysql","note":null,"stability":null,"value":"mysql"},{"brief":"Oracle Database","deprecated":null,"id":"oracle","note":null,"stability":null,"value":"oracle"},{"brief":"IBM Db2","deprecated":null,"id":"db2","note":null,"stability":null,"value":"db2"},{"brief":"PostgreSQL","deprecated":null,"id":"postgresql","note":null,"stability":null,"value":"postgresql"},{"brief":"Amazon Redshift","deprecated":null,"id":"redshift","note":null,"stability":null,"value":"redshift"},{"brief":"Apache Hive","deprecated":null,"id":"hive","note":null,"stability":null,"value":"hive"},{"brief":"Cloudscape","deprecated":null,"id":"cloudscape","note":null,"stability":null,"value":"cloudscape"},{"brief":"HyperSQL DataBase","deprecated":null,"id":"hsqldb","note":null,"stability":null,"value":"hsqldb"},{"brief":"Progress Database","deprecated":null,"id":"progress","note":null,"stability":null,"value":"progress"},{"brief":"SAP MaxDB","deprecated":null,"id":"maxdb","note":null,"stability":null,"value":"maxdb"},{"brief":"SAP HANA","deprecated":null,"id":"hanadb","note":null,"stability":null,"value":"hanadb"},{"brief":"Ingres","deprecated":null,"id":"ingres","note":null,"stability":null,"value":"ingres"},{"brief":"FirstSQL","deprecated":null,"id":"firstsql","note":null,"stability":null,"value":"firstsql"},{"brief":"EnterpriseDB","deprecated":null,"id":"edb","note":null,"stability":null,"value":"edb"},{"brief":"InterSystems Caché","deprecated":null,"id":"cache","note":null,"stability":null,"value":"cache"},{"brief":"Adabas (Adaptable Database System)","deprecated":null,"id":"adabas","note":null,"stability":null,"value":"adabas"},{"brief":"Firebird","deprecated":null,"id":"firebird","note":null,"stability":null,"value":"firebird"},{"brief":"Apache Derby","deprecated":null,"id":"derby","note":null,"stability":null,"value":"derby"},{"brief":"FileMaker","deprecated":null,"id":"filemaker","note":null,"stability":null,"value":"filemaker"},{"brief":"Informix","deprecated":null,"id":"informix","note":null,"stability":null,"value":"informix"},{"brief":"InstantDB","deprecated":null,"id":"instantdb","note":null,"stability":null,"value":"instantdb"},{"brief":"InterBase","deprecated":null,"id":"interbase","note":null,"stability":null,"value":"interbase"},{"brief":"MariaDB","deprecated":null,"id":"mariadb","note":null,"stability":null,"value":"mariadb"},{"brief":"Netezza","deprecated":null,"id":"netezza","note":null,"stability":null,"value":"netezza"},{"brief":"Pervasive PSQL","deprecated":null,"id":"pervasive","note":null,"stability":null,"value":"pervasive"},{"brief":"PointBase","deprecated":null,"id":"pointbase","note":null,"stability":null,"value":"pointbase"},{"brief":"SQLite","deprecated":null,"id":"sqlite","note":null,"stability":null,"value":"sqlite"},{"brief":"Sybase","deprecated":null,"id":"sybase","note":null,"stability":null,"value":"sybase"},{"brief":"Teradata","deprecated":null,"id":"teradata","note":null,"stability":null,"value":"teradata"},{"brief":"Vertica","deprecated":null,"id":"vertica","note":null,"stability":null,"value":"vertica"},{"brief":"H2","deprecated":null,"id":"h2","note":null,"stability":null,"value":"h2"},{"brief":"ColdFusion IMQ","deprecated":null,"id":"coldfusion","note":null,"stability":null,"value":"coldfusion"},{"brief":"Apache Cassandra","deprecated":null,"id":"cassandra","note":null,"stability":null,"value":"cassandra"},{"brief":"Apache HBase","deprecated":null,"id":"hbase","note":null,"stability":null,"value":"hbase"},{"brief":"MongoDB","deprecated":null,"id":"mongodb","note":null,"stability":null,"value":"mongodb"},{"brief":"Redis","deprecated":null,"id":"redis","note":null,"stability":null,"value":"redis"},{"brief":"Couchbase","deprecated":null,"id":"couchbase","note":null,"stability":null,"value":"couchbase"},{"brief":"CouchDB","deprecated":null,"id":"couchdb","note":null,"stability":null,"value":"couchdb"},{"brief":"Microsoft Azure Cosmos DB","deprecated":null,"id":"cosmosdb","note":null,"stability":null,"value":"cosmosdb"},{"brief":"Amazon DynamoDB","deprecated":null,"id":"dynamodb","note":null,"stability":null,"value":"dynamodb"},{"brief":"Neo4j","deprecated":null,"id":"neo4j","note":null,"stability":null,"value":"neo4j"},{"brief":"Apache Geode","deprecated":null,"id":"geode","note":null,"stability":null,"value":"geode"},{"brief":"Elasticsearch","deprecated":null,"id":"elasticsearch","note":null,"stability":null,"value":"elasticsearch"},{"brief":"Memcached","deprecated":null,"id":"memcached","note":null,"stability":null,"value":"memcached"},{"brief":"CockroachDB","deprecated":null,"id":"cockroachdb","note":null,"stability":null,"value":"cockroachdb"},{"brief":"OpenSearch","deprecated":null,"id":"opensearch","note":null,"stability":null,"value":"opensearch"},{"brief":"ClickHouse","deprecated":null,"id":"clickhouse","note":null,"stability":null,"value":"clickhouse"},{"brief":"Cloud Spanner","deprecated":null,"id":"spanner","note":null,"stability":null,"value":"spanner"},{"brief":"Trino","deprecated":null,"id":"trino","note":null,"stability":null,"value":"trino"}]}},{"brief":"Username for accessing the database.\n","examples":["readonly_user","reporting_user"],"name":"db.user","requirement_level":"recommended","root_namespace":"db","tag":"db-generic","type":"string"}],"root_namespace":"db"},{"attributes":[{"brief":"SHOULD be set to true if the exception event is recorded at a point where it is known that the exception is escaping the scope of the span.\n","name":"exception.escaped","note":"An exception is considered to have escaped (or left) the scope of a span,\nif that span is ended while the exception is still logically \"in flight\".\nThis may be actually \"in flight\" in some languages (e.g. if the exception\nis passed to a Context manager\u0027s `__exit__` method in Python) but will\nusually be caught at the point of recording the exception in most languages.\n\nIt is usually not possible to determine at the point where an exception is thrown\nwhether it will escape the scope of a span.\nHowever, it is trivial to know that an exception\nwill escape, if one checks for an active exception just before ending the span,\nas done in the [example for recording span exceptions](https://opentelemetry.io/docs/specs/semconv/exceptions/exceptions-spans/#recording-an-exception).\n\nIt follows that an exception may still escape the scope of the span\neven if the `exception.escaped` attribute was not set or set to false,\nsince the event might have been recorded at a time where it was not\nclear whether the exception will escape.","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"boolean"},{"brief":"The exception message.","examples":["Division by zero","Can\u0027t convert \u0027int\u0027 object to str implicitly"],"name":"exception.message","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.\n","examples":"Exception in thread \"main\" java.lang.RuntimeException: Test exception\\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at com.example.GenerateTrace.main(GenerateTrace.java:5)","name":"exception.stacktrace","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"},{"brief":"The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in languages that support it.\n","examples":["java.net.ConnectException","OSError"],"name":"exception.type","requirement_level":"recommended","root_namespace":"exception","stability":"stable","type":"string"}],"root_namespace":"exception"},{"attributes":[{"brief":"HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.request.header.content-type=[\"application/json\"]","http.request.header.x-forwarded-for=[\"1.2.3.4\", \"1.2.3.5\"]"],"name":"http.request.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nThe `User-Agent` header is already captured in the `user_agent.original` attribute. Users MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"HTTP request method.","examples":["GET","POST","HEAD"],"name":"http.request.method","note":"HTTP request method value SHOULD be \"known\" to the instrumentation.\nBy default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)\nand the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).\n\nIf the HTTP request method is not known to instrumentation, it MUST set the `http.request.method` attribute to `_OTHER`.\n\nIf the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it MUST provide a way to override\nthe list of known HTTP methods. If this override is done via environment variable, then the environment variable MUST be named\nOTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods\n(this list MUST be a full override of the default known method, it is not a list of known methods in addition to the defaults).\n\nHTTP method names are case-sensitive and `http.request.method` attribute value MUST match a known HTTP method name exactly.\nInstrumentations for specific web frameworks that consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent.\nTracing instrumentations that do so, MUST also set `http.request.method_original` to the original value.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"CONNECT method.","deprecated":null,"id":"connect","note":null,"stability":null,"value":"CONNECT"},{"brief":"DELETE method.","deprecated":null,"id":"delete","note":null,"stability":null,"value":"DELETE"},{"brief":"GET method.","deprecated":null,"id":"get","note":null,"stability":null,"value":"GET"},{"brief":"HEAD method.","deprecated":null,"id":"head","note":null,"stability":null,"value":"HEAD"},{"brief":"OPTIONS method.","deprecated":null,"id":"options","note":null,"stability":null,"value":"OPTIONS"},{"brief":"PATCH method.","deprecated":null,"id":"patch","note":null,"stability":null,"value":"PATCH"},{"brief":"POST method.","deprecated":null,"id":"post","note":null,"stability":null,"value":"POST"},{"brief":"PUT method.","deprecated":null,"id":"put","note":null,"stability":null,"value":"PUT"},{"brief":"TRACE method.","deprecated":null,"id":"trace","note":null,"stability":null,"value":"TRACE"},{"brief":"Any HTTP method that the instrumentation has no prior knowledge of.","deprecated":null,"id":"other","note":null,"stability":null,"value":"_OTHER"}]}},{"brief":"Original HTTP method sent by the client in the request line.","examples":["GeT","ACL","foo"],"name":"http.request.method_original","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"},{"brief":"The ordinal number of request resending attempt (for any reason, including redirects).\n","examples":3,"name":"http.request.resend_count","note":"The resend count SHOULD be updated each time an HTTP request gets resent by the client, regardless of what was the cause of the resending (e.g. redirection, authorization failure, 503 Server Unavailable, network issues, or any other).\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"HTTP response headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n","examples":["http.response.header.content-type=[\"application/json\"]","http.response.header.my-custom-header=[\"abc\", \"def\"]"],"name":"http.response.header","note":"Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\nThe attribute value MUST consist of either multiple header values as an array of strings or a single-item array containing a possibly comma-concatenated string, depending on the way the HTTP library provides access to headers.\n","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"template[string[]]"},{"brief":"[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).","examples":[200],"name":"http.response.status_code","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"int"},{"brief":"The matched route, that is, the path template in the format used by the respective server framework.\n","examples":["/users/:userID?","{controller}/{action}/{id?}"],"name":"http.route","note":"MUST NOT be populated when this is not supported by the HTTP server framework as the route attribute should have low-cardinality and the URI path can NOT substitute it.\nSHOULD include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one.","requirement_level":"recommended","root_namespace":"http","stability":"stable","type":"string"}],"root_namespace":"http"},{"attributes":[{"brief":"Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client.\n","examples":["CERN-LineMode/2.15 libwww/2.17b3","Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.2 Mobile/15E148 Safari/604.1"],"name":"user_agent.original","requirement_level":"recommended","root_namespace":"user_agent","stability":"stable","type":"string"}],"root_namespace":"user_agent"}] \ No newline at end of file diff --git a/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_metrics.json b/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_metrics.json index 4ccd55dc..2f220891 100644 --- a/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_metrics.json +++ b/crates/weaver_forge/expected_output/semconv_jq_fn/semconv_metrics.json @@ -1 +1 @@ -[{"metrics":[{"attributes":[],"brief":"Number of classes currently loaded.","events":[],"id":"metric.jvm.class.count","instrument":"updowncounter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.class.count","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{class}"},{"attributes":[],"brief":"Number of classes loaded since JVM start.","events":[],"id":"metric.jvm.class.loaded","instrument":"counter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.class.loaded","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{class}"},{"attributes":[],"brief":"Number of classes unloaded since JVM start.","events":[],"id":"metric.jvm.class.unloaded","instrument":"counter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.class.unloaded","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{class}"},{"attributes":[],"brief":"Number of processors available to the Java virtual machine.","events":[],"id":"metric.jvm.cpu.count","instrument":"updowncounter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.cpu.count","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{cpu}"},{"attributes":[],"brief":"Recent CPU utilization for the process as reported by the JVM.","events":[],"id":"metric.jvm.cpu.recent_utilization","instrument":"gauge","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.cpu.recent_utilization","name":null,"note":"The value range is [0.0,1.0]. This utilization is not defined as being for the specific interval since last measurement (unlike `system.cpu.utilization`). [Reference](https://docs.oracle.com/en/java/javase/17/docs/api/jdk.management/com/sun/management/OperatingSystemMXBean.html#getProcessCpuLoad()).\n","root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"1"},{"attributes":[],"brief":"CPU time used by the process as reported by the JVM.","events":[],"id":"metric.jvm.cpu.time","instrument":"counter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.cpu.time","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"s"},{"attributes":[{"brief":"Name of the garbage collector.","examples":["G1 Young Generation","G1 Old Generation"],"name":"jvm.gc.name","note":"Garbage collector name is generally obtained via [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()).\n","requirement_level":"recommended","stability":"stable","type":"string"},{"brief":"Name of the garbage collector action.","examples":["end of minor GC","end of major GC"],"name":"jvm.gc.action","note":"Garbage collector action is generally obtained via [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Duration of JVM garbage collection actions.","events":[],"id":"metric.jvm.gc.duration","instrument":"histogram","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.gc.duration","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"s"},{"attributes":[{"brief":"The type of memory.","examples":["heap","non_heap"],"name":"jvm.memory.type","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":false,"members":[{"brief":"Heap memory.","deprecated":null,"id":"heap","note":null,"stability":null,"value":"heap"},{"brief":"Non-heap memory","deprecated":null,"id":"non_heap","note":null,"stability":null,"value":"non_heap"}]}},{"brief":"Name of the memory pool.","examples":["G1 Old Gen","G1 Eden space","G1 Survivor Space"],"name":"jvm.memory.pool.name","note":"Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Measure of memory committed.","events":[],"id":"metric.jvm.memory.committed","instrument":"updowncounter","lineage":{"attributes":{"jvm.memory.pool.name":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"},"jvm.memory.type":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"}},"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.memory.committed","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"By"},{"attributes":[{"brief":"The type of memory.","examples":["heap","non_heap"],"name":"jvm.memory.type","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":false,"members":[{"brief":"Heap memory.","deprecated":null,"id":"heap","note":null,"stability":null,"value":"heap"},{"brief":"Non-heap memory","deprecated":null,"id":"non_heap","note":null,"stability":null,"value":"non_heap"}]}},{"brief":"Name of the memory pool.","examples":["G1 Old Gen","G1 Eden space","G1 Survivor Space"],"name":"jvm.memory.pool.name","note":"Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Measure of max obtainable memory.","events":[],"id":"metric.jvm.memory.limit","instrument":"updowncounter","lineage":{"attributes":{"jvm.memory.pool.name":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"},"jvm.memory.type":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"}},"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.memory.limit","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"By"},{"attributes":[{"brief":"The type of memory.","examples":["heap","non_heap"],"name":"jvm.memory.type","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":false,"members":[{"brief":"Heap memory.","deprecated":null,"id":"heap","note":null,"stability":null,"value":"heap"},{"brief":"Non-heap memory","deprecated":null,"id":"non_heap","note":null,"stability":null,"value":"non_heap"}]}},{"brief":"Name of the memory pool.","examples":["G1 Old Gen","G1 Eden space","G1 Survivor Space"],"name":"jvm.memory.pool.name","note":"Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Measure of memory used.","events":[],"id":"metric.jvm.memory.used","instrument":"updowncounter","lineage":{"attributes":{"jvm.memory.pool.name":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"},"jvm.memory.type":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"}},"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.memory.used","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"By"},{"attributes":[{"brief":"The type of memory.","examples":["heap","non_heap"],"name":"jvm.memory.type","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":false,"members":[{"brief":"Heap memory.","deprecated":null,"id":"heap","note":null,"stability":null,"value":"heap"},{"brief":"Non-heap memory","deprecated":null,"id":"non_heap","note":null,"stability":null,"value":"non_heap"}]}},{"brief":"Name of the memory pool.","examples":["G1 Old Gen","G1 Eden space","G1 Survivor Space"],"name":"jvm.memory.pool.name","note":"Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Measure of memory used, as measured after the most recent garbage collection event on this pool.","events":[],"id":"metric.jvm.memory.used_after_last_gc","instrument":"updowncounter","lineage":{"attributes":{"jvm.memory.pool.name":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"},"jvm.memory.type":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"}},"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.memory.used_after_last_gc","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"By"},{"attributes":[{"brief":"Whether the thread is daemon or not.","name":"jvm.thread.daemon","requirement_level":"recommended","stability":"stable","type":"boolean"},{"brief":"State of the thread.","examples":["runnable","blocked"],"name":"jvm.thread.state","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":false,"members":[{"brief":"A thread that has not yet started is in this state.","deprecated":null,"id":"new","note":null,"stability":null,"value":"new"},{"brief":"A thread executing in the Java virtual machine is in this state.","deprecated":null,"id":"runnable","note":null,"stability":null,"value":"runnable"},{"brief":"A thread that is blocked waiting for a monitor lock is in this state.","deprecated":null,"id":"blocked","note":null,"stability":null,"value":"blocked"},{"brief":"A thread that is waiting indefinitely for another thread to perform a particular action is in this state.","deprecated":null,"id":"waiting","note":null,"stability":null,"value":"waiting"},{"brief":"A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.","deprecated":null,"id":"timed_waiting","note":null,"stability":null,"value":"timed_waiting"},{"brief":"A thread that has exited is in this state.","deprecated":null,"id":"terminated","note":null,"stability":null,"value":"terminated"}]}}],"brief":"Number of executing platform threads.","events":[],"id":"metric.jvm.thread.count","instrument":"updowncounter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.thread.count","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{thread}"}],"root_namespace":"jvm"}] \ No newline at end of file +[{"metrics":[{"attributes":[],"brief":"Number of classes currently loaded.","events":[],"id":"metric.jvm.class.count","instrument":"updowncounter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.class.count","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{class}"},{"attributes":[],"brief":"Number of classes loaded since JVM start.","events":[],"id":"metric.jvm.class.loaded","instrument":"counter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.class.loaded","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{class}"},{"attributes":[],"brief":"Number of classes unloaded since JVM start.","events":[],"id":"metric.jvm.class.unloaded","instrument":"counter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.class.unloaded","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{class}"},{"attributes":[],"brief":"Number of processors available to the Java virtual machine.","events":[],"id":"metric.jvm.cpu.count","instrument":"updowncounter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.cpu.count","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{cpu}"},{"attributes":[],"brief":"Recent CPU utilization for the process as reported by the JVM.","events":[],"id":"metric.jvm.cpu.recent_utilization","instrument":"gauge","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.cpu.recent_utilization","name":null,"note":"The value range is [0.0,1.0]. This utilization is not defined as being for the specific interval since last measurement (unlike `system.cpu.utilization`). [Reference](https://docs.oracle.com/en/java/javase/17/docs/api/jdk.management/com/sun/management/OperatingSystemMXBean.html#getProcessCpuLoad()).\n","root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"1"},{"attributes":[],"brief":"CPU time used by the process as reported by the JVM.","events":[],"id":"metric.jvm.cpu.time","instrument":"counter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.cpu.time","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"s"},{"attributes":[{"brief":"Name of the garbage collector.","examples":["G1 Young Generation","G1 Old Generation"],"name":"jvm.gc.name","note":"Garbage collector name is generally obtained via [GarbageCollectionNotificationInfo#getGcName()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcName()).\n","requirement_level":"recommended","stability":"stable","type":"string"},{"brief":"Name of the garbage collector action.","examples":["end of minor GC","end of major GC"],"name":"jvm.gc.action","note":"Garbage collector action is generally obtained via [GarbageCollectionNotificationInfo#getGcAction()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcAction()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Duration of JVM garbage collection actions.","events":[],"id":"metric.jvm.gc.duration","instrument":"histogram","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.gc.duration","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"s"},{"attributes":[{"brief":"The type of memory.","examples":["heap","non_heap"],"name":"jvm.memory.type","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"Heap memory.","deprecated":null,"id":"heap","note":null,"stability":null,"value":"heap"},{"brief":"Non-heap memory","deprecated":null,"id":"non_heap","note":null,"stability":null,"value":"non_heap"}]}},{"brief":"Name of the memory pool.","examples":["G1 Old Gen","G1 Eden space","G1 Survivor Space"],"name":"jvm.memory.pool.name","note":"Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Measure of memory committed.","events":[],"id":"metric.jvm.memory.committed","instrument":"updowncounter","lineage":{"attributes":{"jvm.memory.pool.name":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"},"jvm.memory.type":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"}},"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.memory.committed","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"By"},{"attributes":[{"brief":"The type of memory.","examples":["heap","non_heap"],"name":"jvm.memory.type","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"Heap memory.","deprecated":null,"id":"heap","note":null,"stability":null,"value":"heap"},{"brief":"Non-heap memory","deprecated":null,"id":"non_heap","note":null,"stability":null,"value":"non_heap"}]}},{"brief":"Name of the memory pool.","examples":["G1 Old Gen","G1 Eden space","G1 Survivor Space"],"name":"jvm.memory.pool.name","note":"Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Measure of max obtainable memory.","events":[],"id":"metric.jvm.memory.limit","instrument":"updowncounter","lineage":{"attributes":{"jvm.memory.pool.name":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"},"jvm.memory.type":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"}},"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.memory.limit","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"By"},{"attributes":[{"brief":"The type of memory.","examples":["heap","non_heap"],"name":"jvm.memory.type","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"Heap memory.","deprecated":null,"id":"heap","note":null,"stability":null,"value":"heap"},{"brief":"Non-heap memory","deprecated":null,"id":"non_heap","note":null,"stability":null,"value":"non_heap"}]}},{"brief":"Name of the memory pool.","examples":["G1 Old Gen","G1 Eden space","G1 Survivor Space"],"name":"jvm.memory.pool.name","note":"Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Measure of memory used.","events":[],"id":"metric.jvm.memory.used","instrument":"updowncounter","lineage":{"attributes":{"jvm.memory.pool.name":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"},"jvm.memory.type":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"}},"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.memory.used","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"By"},{"attributes":[{"brief":"The type of memory.","examples":["heap","non_heap"],"name":"jvm.memory.type","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"Heap memory.","deprecated":null,"id":"heap","note":null,"stability":null,"value":"heap"},{"brief":"Non-heap memory","deprecated":null,"id":"non_heap","note":null,"stability":null,"value":"non_heap"}]}},{"brief":"Name of the memory pool.","examples":["G1 Old Gen","G1 Eden space","G1 Survivor Space"],"name":"jvm.memory.pool.name","note":"Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n","requirement_level":"recommended","stability":"stable","type":"string"}],"brief":"Measure of memory used, as measured after the most recent garbage collection event on this pool.","events":[],"id":"metric.jvm.memory.used_after_last_gc","instrument":"updowncounter","lineage":{"attributes":{"jvm.memory.pool.name":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"},"jvm.memory.type":{"inherited_fields":["brief","examples","note","requirement_level","stability"],"source_group":"attributes.jvm.memory"}},"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.memory.used_after_last_gc","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"By"},{"attributes":[{"brief":"Whether the thread is daemon or not.","name":"jvm.thread.daemon","requirement_level":"recommended","stability":"stable","type":"boolean"},{"brief":"State of the thread.","examples":["runnable","blocked"],"name":"jvm.thread.state","requirement_level":"recommended","stability":"stable","type":{"allow_custom_values":null,"members":[{"brief":"A thread that has not yet started is in this state.","deprecated":null,"id":"new","note":null,"stability":null,"value":"new"},{"brief":"A thread executing in the Java virtual machine is in this state.","deprecated":null,"id":"runnable","note":null,"stability":null,"value":"runnable"},{"brief":"A thread that is blocked waiting for a monitor lock is in this state.","deprecated":null,"id":"blocked","note":null,"stability":null,"value":"blocked"},{"brief":"A thread that is waiting indefinitely for another thread to perform a particular action is in this state.","deprecated":null,"id":"waiting","note":null,"stability":null,"value":"waiting"},{"brief":"A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.","deprecated":null,"id":"timed_waiting","note":null,"stability":null,"value":"timed_waiting"},{"brief":"A thread that has exited is in this state.","deprecated":null,"id":"terminated","note":null,"stability":null,"value":"terminated"}]}}],"brief":"Number of executing platform threads.","events":[],"id":"metric.jvm.thread.count","instrument":"updowncounter","lineage":{"source_file":"data/jvm-metrics.yaml"},"metric_name":"jvm.thread.count","name":null,"root_namespace":"jvm","span_kind":null,"stability":"stable","type":"metric","unit":"{thread}"}],"root_namespace":"jvm"}] \ No newline at end of file diff --git a/crates/weaver_forge/src/extensions/otel.rs b/crates/weaver_forge/src/extensions/otel.rs index 3edf2cb1..9b6e4a6a 100644 --- a/crates/weaver_forge/src/extensions/otel.rs +++ b/crates/weaver_forge/src/extensions/otel.rs @@ -1382,7 +1382,7 @@ mod tests { .collect(); AttributeType::Enum { - allow_custom_values: true, + allow_custom_values: Some(true), members, } } diff --git a/crates/weaver_resolver/data/registry-test-10-duplicate-attr-name/registry/registry-messaging.yaml b/crates/weaver_resolver/data/registry-test-10-duplicate-attr-name/registry/registry-messaging.yaml index e83317d9..d76f5cf3 100644 --- a/crates/weaver_resolver/data/registry-test-10-duplicate-attr-name/registry/registry-messaging.yaml +++ b/crates/weaver_resolver/data/registry-test-10-duplicate-attr-name/registry/registry-messaging.yaml @@ -118,7 +118,6 @@ groups: examples: 1439 - id: messaging.operation type: - allow_custom_values: true members: - id: publish value: "publish" @@ -155,7 +154,6 @@ groups: examples: "myConsumerGroup" - id: messaging.rocketmq.consumption_model type: - allow_custom_values: false members: - id: clustering value: "clustering" @@ -192,7 +190,6 @@ groups: examples: tagA - id: messaging.rocketmq.message.type type: - allow_custom_values: false members: - id: normal value: "normal" @@ -222,7 +219,6 @@ groups: brief: > An identifier for the messaging system being used. See below for a list of well-known identifiers. type: - allow_custom_values: true members: - id: activemq value: "activemq" diff --git a/crates/weaver_resolver/data/registry-test-12-duplicate-group-id/registry/registry-messaging.yaml b/crates/weaver_resolver/data/registry-test-12-duplicate-group-id/registry/registry-messaging.yaml index 6c62e034..dd245f95 100644 --- a/crates/weaver_resolver/data/registry-test-12-duplicate-group-id/registry/registry-messaging.yaml +++ b/crates/weaver_resolver/data/registry-test-12-duplicate-group-id/registry/registry-messaging.yaml @@ -118,7 +118,6 @@ groups: examples: 1439 - id: operation type: - allow_custom_values: true members: - id: publish value: "publish" @@ -155,7 +154,6 @@ groups: examples: "myConsumerGroup" - id: rocketmq.consumption_model type: - allow_custom_values: false members: - id: clustering value: "clustering" @@ -192,7 +190,6 @@ groups: examples: tagA - id: rocketmq.message.type type: - allow_custom_values: false members: - id: normal value: "normal" @@ -222,7 +219,6 @@ groups: brief: > An identifier for the messaging system being used. See below for a list of well-known identifiers. type: - allow_custom_values: true members: - id: activemq value: "activemq" diff --git a/crates/weaver_resolver/data/registry-test-13-duplicate-metric-name/registry/faas-common.yaml b/crates/weaver_resolver/data/registry-test-13-duplicate-metric-name/registry/faas-common.yaml index 89a0424d..532f467f 100644 --- a/crates/weaver_resolver/data/registry-test-13-duplicate-metric-name/registry/faas-common.yaml +++ b/crates/weaver_resolver/data/registry-test-13-duplicate-metric-name/registry/faas-common.yaml @@ -6,7 +6,6 @@ groups: - id: faas.trigger brief: 'Type of the trigger which caused this function invocation.' type: - allow_custom_values: false members: - id: datasource value: 'datasource' @@ -34,7 +33,6 @@ groups: examples: 'my-function' - id: faas.invoked_provider type: - allow_custom_values: true members: - id: 'alibaba_cloud' value: 'alibaba_cloud' diff --git a/crates/weaver_resolver/data/registry-test-2-multi-attr-refs/expected-attribute-catalog.json b/crates/weaver_resolver/data/registry-test-2-multi-attr-refs/expected-attribute-catalog.json index c9c8927d..908ed203 100644 --- a/crates/weaver_resolver/data/registry-test-2-multi-attr-refs/expected-attribute-catalog.json +++ b/crates/weaver_resolver/data/registry-test-2-multi-attr-refs/expected-attribute-catalog.json @@ -3,7 +3,11 @@ "name": "messaging.batch.message_count", "type": "int", "brief": "The number of messages sent, received, or processed in the scope of the batching operation.", - "examples": [0, 1, 2], + "examples": [ + 0, + 1, + 2 + ], "requirement_level": "recommended", "note": "Instrumentations SHOULD NOT set `messaging.batch.message_count` on spans that operate with a single message. When a messaging client library supports both batch and single-message API for the same operation, instrumentations SHOULD use `messaging.batch.message_count` for batching APIs and SHOULD NOT use it for single-message APIs.\n" }, @@ -11,14 +15,20 @@ "name": "messaging.client_id", "type": "string", "brief": "A unique identifier for the client that consumes or produces a message.\n", - "examples": ["client-5", "myhost@8742@s8083jm"], + "examples": [ + "client-5", + "myhost@8742@s8083jm" + ], "requirement_level": "recommended" }, { "name": "messaging.destination.name", "type": "string", "brief": "The message destination name", - "examples": ["MyQueue", "MyTopic"], + "examples": [ + "MyQueue", + "MyTopic" + ], "requirement_level": "recommended", "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn't have such notion, the destination name SHOULD uniquely identify the broker.\n" }, @@ -26,7 +36,9 @@ "name": "messaging.destination.template", "type": "string", "brief": "Low cardinality representation of the messaging destination name", - "examples": ["/customers/{customerId}"], + "examples": [ + "/customers/{customerId}" + ], "requirement_level": "recommended", "note": "Destination names could be constructed from templates. An example would be a destination name involving a user name or product id. Although the destination name in this case is of high cardinality, the underlying template is of low cardinality and can be effectively used for grouping and aggregation.\n" }, @@ -52,7 +64,10 @@ "name": "messaging.destination_publish.name", "type": "string", "brief": "The name of the original destination the message was published to", - "examples": ["MyQueue", "MyTopic"], + "examples": [ + "MyQueue", + "MyTopic" + ], "requirement_level": "recommended", "note": "The name SHOULD uniquely identify a specific queue, topic, or other entity within the broker. If\nthe broker doesn't have such notion, the original destination name SHOULD uniquely identify the broker.\n" }, @@ -124,31 +139,39 @@ { "name": "messaging.operation", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "publish", "value": "publish", "brief": "One or more messages are provided for publishing to an intermediary. If a single message is published, the context of the \"Publish\" span can be used as the creation context and no \"Create\" span needs to be created.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "create", "value": "create", "brief": "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.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "receive", "value": "receive", "brief": "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.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "deliver", "value": "deliver", "brief": "One or more messages are passed to a consumer. This operation refers to push-based scenarios, where consumer register callbacks which get called by messaging SDKs.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -173,19 +196,23 @@ { "name": "messaging.rocketmq.consumption_model", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "clustering", "value": "clustering", "brief": "Clustering consumption model", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "broadcasting", "value": "broadcasting", "brief": "Broadcasting consumption model", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -217,7 +244,14 @@ "name": "messaging.rocketmq.message.keys", "type": "string[]", "brief": "Key(s) of message, another way to mark message besides message id.\n", - "examples": [["keyA"], ["keyB"]], + "examples": [ + [ + "keyA" + ], + [ + "keyB" + ] + ], "requirement_level": "recommended" }, { @@ -230,31 +264,39 @@ { "name": "messaging.rocketmq.message.type", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "normal", "value": "normal", "brief": "Normal message", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "fifo", "value": "fifo", "brief": "FIFO message", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "delay", "value": "delay", "brief": "Delay message", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "transaction", "value": "transaction", "brief": "Transaction message", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -278,67 +320,87 @@ { "name": "messaging.system", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "activemq", "value": "activemq", "brief": "Apache ActiveMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "aws_sqs", "value": "aws_sqs", "brief": "Amazon Simple Queue Service (SQS)", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure_eventgrid", "value": "azure_eventgrid", "brief": "Azure Event Grid", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure_eventhubs", "value": "azure_eventhubs", "brief": "Azure Event Hubs", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure_servicebus", "value": "azure_servicebus", "brief": "Azure Service Bus", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "gcp_pubsub", "value": "gcp_pubsub", "brief": "Google Cloud Pub/Sub", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "jms", "value": "jms", "brief": "Java Message Service", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "kafka", "value": "kafka", "brief": "Apache Kafka", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "rabbitmq", "value": "rabbitmq", "brief": "RabbitMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "rocketmq", "value": "rocketmq", "brief": "Apache RocketMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -349,7 +411,10 @@ "name": "messaging.destination.name", "type": "string", "brief": "The message destination name", - "examples": ["MyQueue", "MyTopic"], + "examples": [ + "MyQueue", + "MyTopic" + ], "requirement_level": { "conditionally_required": "if and only if `messaging.destination.name` is known to have low cardinality. Otherwise, `messaging.destination.template` MAY be populated." }, @@ -359,10 +424,12 @@ "name": "messaging.destination.template", "type": "string", "brief": "Low cardinality representation of the messaging destination name", - "examples": ["/customers/{customerId}"], + "examples": [ + "/customers/{customerId}" + ], "requirement_level": { "conditionally_required": "if available." }, "note": "Destination names could be constructed from templates. An example would be a destination name involving a user name or product id. Although the destination name in this case is of high cardinality, the underlying template is of low cardinality and can be effectively used for grouping and aggregation.\n" } -] +] \ No newline at end of file diff --git a/crates/weaver_resolver/data/registry-test-2-multi-attr-refs/registry/registry-messaging.yaml b/crates/weaver_resolver/data/registry-test-2-multi-attr-refs/registry/registry-messaging.yaml index 5fcaff65..fbee49e1 100644 --- a/crates/weaver_resolver/data/registry-test-2-multi-attr-refs/registry/registry-messaging.yaml +++ b/crates/weaver_resolver/data/registry-test-2-multi-attr-refs/registry/registry-messaging.yaml @@ -106,7 +106,6 @@ groups: examples: 1439 - id: messaging.operation type: - allow_custom_values: true members: - id: publish value: "publish" @@ -143,7 +142,6 @@ groups: examples: "myConsumerGroup" - id: messaging.rocketmq.consumption_model type: - allow_custom_values: false members: - id: clustering value: "clustering" @@ -182,7 +180,6 @@ groups: examples: tagA - id: messaging.rocketmq.message.type type: - allow_custom_values: false members: - id: normal value: "normal" @@ -212,7 +209,6 @@ groups: brief: > An identifier for the messaging system being used. See below for a list of well-known identifiers. type: - allow_custom_values: true members: - id: activemq value: "activemq" diff --git a/crates/weaver_resolver/data/registry-test-3-extends/expected-attribute-catalog.json b/crates/weaver_resolver/data/registry-test-3-extends/expected-attribute-catalog.json index cb8bf530..3565ac17 100644 --- a/crates/weaver_resolver/data/registry-test-3-extends/expected-attribute-catalog.json +++ b/crates/weaver_resolver/data/registry-test-3-extends/expected-attribute-catalog.json @@ -2,13 +2,15 @@ { "name": "error.type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "other", "value": "_OTHER", "brief": "A fallback error value to be used when the instrumentation doesn't define a custom value.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -29,7 +31,7 @@ "brief": "The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n", "examples": 3495, "requirement_level": "recommended", - "stability": "experimental" + "stability": "development" }, { "name": "http.request.header", @@ -46,72 +48,96 @@ { "name": "http.request.method", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "connect", "value": "CONNECT", "brief": "CONNECT method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "delete", "value": "DELETE", "brief": "DELETE method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "get", "value": "GET", "brief": "GET method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "head", "value": "HEAD", "brief": "HEAD method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "options", "value": "OPTIONS", "brief": "OPTIONS method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "patch", "value": "PATCH", "brief": "PATCH method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "post", "value": "POST", "brief": "POST method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "put", "value": "PUT", "brief": "PUT method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "trace", "value": "TRACE", "brief": "TRACE method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "other", "value": "_OTHER", "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, "brief": "HTTP request method.", - "examples": ["GET", "POST", "HEAD"], + "examples": [ + "GET", + "POST", + "HEAD" + ], "requirement_level": "recommended", "note": "HTTP request method value SHOULD be \"known\" to the instrumentation.\nBy default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)\nand the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).\n\nIf the HTTP request method is not known to instrumentation, it MUST set the `http.request.method` attribute to `_OTHER`.\n\nIf the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it MUST provide a way to override\nthe list of known HTTP methods. If this override is done via environment variable, then the environment variable MUST be named\nOTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods\n(this list MUST be a full override of the default known method, it is not a list of known methods in addition to the defaults).\n\nHTTP method names are case-sensitive and `http.request.method` attribute value MUST match a known HTTP method name exactly.\nInstrumentations for specific web frameworks that consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent.\nTracing instrumentations that do so, MUST also set `http.request.method_original` to the original value.\n", "stability": "stable" @@ -120,7 +146,11 @@ "name": "http.request.method_original", "type": "string", "brief": "Original HTTP method sent by the client in the request line.", - "examples": ["GeT", "ACL", "foo"], + "examples": [ + "GeT", + "ACL", + "foo" + ], "requirement_level": "recommended", "stability": "stable" }, @@ -139,7 +169,7 @@ "brief": "The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n", "examples": 3495, "requirement_level": "recommended", - "stability": "experimental" + "stability": "development" }, { "name": "http.response.header", @@ -157,7 +187,9 @@ "name": "http.response.status_code", "type": "int", "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", - "examples": [200], + "examples": [ + 200 + ], "requirement_level": "recommended", "stability": "stable" }, @@ -165,7 +197,10 @@ "name": "http.route", "type": "string", "brief": "The matched route, that is, the path template in the format used by the respective server framework.\n", - "examples": ["/users/:userID?", "{controller}/{action}/{id?}"], + "examples": [ + "/users/:userID?", + "{controller}/{action}/{id?}" + ], "requirement_level": "recommended", "note": "MUST NOT be populated when this is not supported by the HTTP server framework as the route attribute should have low-cardinality and the URI path can NOT substitute it.\nSHOULD include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one.", "stability": "stable" @@ -174,7 +209,11 @@ "name": "messaging.batch.message_count", "type": "int", "brief": "The number of messages sent, received, or processed in the scope of the batching operation.", - "examples": [0, 1, 2], + "examples": [ + 0, + 1, + 2 + ], "requirement_level": "recommended", "note": "Instrumentations SHOULD NOT set `messaging.batch.message_count` on spans that operate with a single message. When a messaging client library supports both batch and single-message API for the same operation, instrumentations SHOULD use `messaging.batch.message_count` for batching APIs and SHOULD NOT use it for single-message APIs.\n" }, @@ -182,14 +221,20 @@ "name": "messaging.client_id", "type": "string", "brief": "A unique identifier for the client that consumes or produces a message.\n", - "examples": ["client-5", "myhost@8742@s8083jm"], + "examples": [ + "client-5", + "myhost@8742@s8083jm" + ], "requirement_level": "recommended" }, { "name": "messaging.destination.name", "type": "string", "brief": "The message destination name", - "examples": ["MyQueue", "MyTopic"], + "examples": [ + "MyQueue", + "MyTopic" + ], "requirement_level": "recommended", "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn't have such notion, the destination name SHOULD uniquely identify the broker.\n" }, @@ -197,7 +242,9 @@ "name": "messaging.destination.template", "type": "string", "brief": "Low cardinality representation of the messaging destination name", - "examples": ["/customers/{customerId}"], + "examples": [ + "/customers/{customerId}" + ], "requirement_level": "recommended", "note": "Destination names could be constructed from templates. An example would be a destination name involving a user name or product id. Although the destination name in this case is of high cardinality, the underlying template is of low cardinality and can be effectively used for grouping and aggregation.\n" }, @@ -223,7 +270,10 @@ "name": "messaging.destination_publish.name", "type": "string", "brief": "The name of the original destination the message was published to", - "examples": ["MyQueue", "MyTopic"], + "examples": [ + "MyQueue", + "MyTopic" + ], "requirement_level": "recommended", "note": "The name SHOULD uniquely identify a specific queue, topic, or other entity within the broker. If\nthe broker doesn't have such notion, the original destination name SHOULD uniquely identify the broker.\n" }, @@ -295,31 +345,39 @@ { "name": "messaging.operation", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "publish", "value": "publish", "brief": "One or more messages are provided for publishing to an intermediary. If a single message is published, the context of the \"Publish\" span can be used as the creation context and no \"Create\" span needs to be created.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "create", "value": "create", "brief": "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.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "receive", "value": "receive", "brief": "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.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "deliver", "value": "deliver", "brief": "One or more messages are passed to a consumer. This operation refers to push-based scenarios, where consumer register callbacks which get called by messaging SDKs.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -344,19 +402,23 @@ { "name": "messaging.rocketmq.consumption_model", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "clustering", "value": "clustering", "brief": "Clustering consumption model", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "broadcasting", "value": "broadcasting", "brief": "Broadcasting consumption model", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -388,7 +450,14 @@ "name": "messaging.rocketmq.message.keys", "type": "string[]", "brief": "Key(s) of message, another way to mark message besides message id.\n", - "examples": [["keyA"], ["keyB"]], + "examples": [ + [ + "keyA" + ], + [ + "keyB" + ] + ], "requirement_level": "recommended" }, { @@ -401,31 +470,39 @@ { "name": "messaging.rocketmq.message.type", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "normal", "value": "normal", "brief": "Normal message", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "fifo", "value": "fifo", "brief": "FIFO message", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "delay", "value": "delay", "brief": "Delay message", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "transaction", "value": "transaction", "brief": "Transaction message", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -449,67 +526,87 @@ { "name": "messaging.system", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "activemq", "value": "activemq", "brief": "Apache ActiveMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "aws_sqs", "value": "aws_sqs", "brief": "Amazon Simple Queue Service (SQS)", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure_eventgrid", "value": "azure_eventgrid", "brief": "Azure Event Grid", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure_eventhubs", "value": "azure_eventhubs", "brief": "Azure Event Hubs", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure_servicebus", "value": "azure_servicebus", "brief": "Azure Service Bus", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "gcp_pubsub", "value": "gcp_pubsub", "brief": "Google Cloud Pub/Sub", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "jms", "value": "jms", "brief": "Java Message Service", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "kafka", "value": "kafka", "brief": "Apache Kafka", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "rabbitmq", "value": "rabbitmq", "brief": "RabbitMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "rocketmq", "value": "rocketmq", "brief": "Apache RocketMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -547,133 +644,175 @@ { "name": "network.connection.subtype", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "gprs", "value": "gprs", "brief": "GPRS", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "edge", "value": "edge", "brief": "EDGE", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "umts", "value": "umts", "brief": "UMTS", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cdma", "value": "cdma", "brief": "CDMA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "evdo_0", "value": "evdo_0", "brief": "EVDO Rel. 0", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "evdo_a", "value": "evdo_a", "brief": "EVDO Rev. A", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cdma2000_1xrtt", "value": "cdma2000_1xrtt", "brief": "CDMA2000 1XRTT", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hsdpa", "value": "hsdpa", "brief": "HSDPA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hsupa", "value": "hsupa", "brief": "HSUPA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hspa", "value": "hspa", "brief": "HSPA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "iden", "value": "iden", "brief": "IDEN", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "evdo_b", "value": "evdo_b", "brief": "EVDO Rev. B", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "lte", "value": "lte", "brief": "LTE", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "ehrpd", "value": "ehrpd", "brief": "EHRPD", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hspap", "value": "hspap", "brief": "HSPAP", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "gsm", "value": "gsm", "brief": "GSM", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "td_scdma", "value": "td_scdma", "brief": "TD-SCDMA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "iwlan", "value": "iwlan", "brief": "IWLAN", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "nr", "value": "nr", "brief": "5G NR (New Radio)", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "nrnsa", "value": "nrnsa", "brief": "5G NRNSA (New Radio Non-Standalone)", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "lte_ca", "value": "lte_ca", "brief": "LTE CA", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -684,37 +823,47 @@ { "name": "network.connection.type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "wifi", "value": "wifi", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "wired", "value": "wired", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cell", "value": "cell", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "unavailable", "value": "unavailable", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "unknown", "value": "unknown", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -726,7 +875,10 @@ "name": "network.local.address", "type": "string", "brief": "Local address of the network connection - IP address or Unix domain socket name.", - "examples": ["10.1.2.80", "/tmp/my.sock"], + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], "requirement_level": "recommended", "stability": "stable" }, @@ -734,7 +886,9 @@ "name": "network.local.port", "type": "int", "brief": "Local port number of the network connection.", - "examples": [65123], + "examples": [ + 65123 + ], "requirement_level": "recommended", "stability": "stable" }, @@ -742,7 +896,10 @@ "name": "network.peer.address", "type": "string", "brief": "Peer address of the network connection - IP address or Unix domain socket name.", - "examples": ["10.1.2.80", "/tmp/my.sock"], + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], "requirement_level": "recommended", "stability": "stable" }, @@ -750,7 +907,9 @@ "name": "network.peer.port", "type": "int", "brief": "Peer port number of the network connection.", - "examples": [65123], + "examples": [ + 65123 + ], "requirement_level": "recommended", "stability": "stable" }, @@ -758,7 +917,11 @@ "name": "network.protocol.name", "type": "string", "brief": "[OSI application layer](https://osi-model.com/application-layer/) or non-OSI equivalent.", - "examples": ["amqp", "http", "mqtt"], + "examples": [ + "amqp", + "http", + "mqtt" + ], "requirement_level": "recommended", "note": "The value SHOULD be normalized to lowercase.", "stability": "stable" @@ -775,36 +938,47 @@ { "name": "network.transport", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "tcp", "value": "tcp", "brief": "TCP", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "udp", "value": "udp", "brief": "UDP", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "pipe", "value": "pipe", "brief": "Named or anonymous pipe.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "unix", "value": "unix", "brief": "Unix domain socket", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, "brief": "[OSI transport layer](https://osi-model.com/transport-layer/) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", - "examples": ["tcp", "udp"], + "examples": [ + "tcp", + "udp" + ], "requirement_level": "recommended", "note": "The value SHOULD be normalized to lowercase.\n\nConsider always setting the transport when setting a port number, since\na port number is ambiguous without knowing the transport. For example\ndifferent processes could be listening on TCP port 12345 and UDP port 12345.\n", "stability": "stable" @@ -812,24 +986,31 @@ { "name": "network.type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "ipv4", "value": "ipv4", "brief": "IPv4", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "ipv6", "value": "ipv6", "brief": "IPv6", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, "brief": "[OSI network layer](https://osi-model.com/network-layer/) or non-OSI equivalent.", - "examples": ["ipv4", "ipv6"], + "examples": [ + "ipv4", + "ipv6" + ], "requirement_level": "recommended", "note": "The value SHOULD be normalized to lowercase.", "stability": "stable" @@ -837,31 +1018,41 @@ { "name": "network.io.direction", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "transmit", "value": "transmit", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "receive", "value": "receive", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, "brief": "The network IO operation direction.", - "examples": ["transmit"], + "examples": [ + "transmit" + ], "requirement_level": "recommended" }, { "name": "server.address", "type": "string", "brief": "Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", - "examples": ["example.com", "10.1.2.80", "/tmp/my.sock"], + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], "requirement_level": "recommended", "note": "When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available.\n", "stability": "stable" @@ -870,7 +1061,11 @@ "name": "server.port", "type": "int", "brief": "Server port number.", - "examples": [80, 8080, 443], + "examples": [ + 80, + 8080, + 443 + ], "requirement_level": "recommended", "note": "When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available.\n", "stability": "stable" @@ -879,7 +1074,11 @@ "name": "url.scheme", "type": "string", "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.", - "examples": ["https", "ftp", "telnet"], + "examples": [ + "https", + "ftp", + "telnet" + ], "requirement_level": "recommended", "stability": "stable" }, @@ -899,7 +1098,9 @@ "name": "url.path", "type": "string", "brief": "The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component", - "examples": ["/search"], + "examples": [ + "/search" + ], "requirement_level": "recommended", "stability": "stable" }, @@ -907,7 +1108,9 @@ "name": "url.query", "type": "string", "brief": "The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component", - "examples": ["q=OpenTelemetry"], + "examples": [ + "q=OpenTelemetry" + ], "requirement_level": "recommended", "note": "Sensitive content provided in query string SHOULD be scrubbed when instrumentations can identify it.", "stability": "stable" @@ -916,79 +1119,105 @@ "name": "url.fragment", "type": "string", "brief": "The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component", - "examples": ["SemConv"], + "examples": [ + "SemConv" + ], "requirement_level": "recommended", "stability": "stable" }, { "name": "http.request.method", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "connect", "value": "CONNECT", "brief": "CONNECT method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "delete", "value": "DELETE", "brief": "DELETE method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "get", "value": "GET", "brief": "GET method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "head", "value": "HEAD", "brief": "HEAD method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "options", "value": "OPTIONS", "brief": "OPTIONS method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "patch", "value": "PATCH", "brief": "PATCH method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "post", "value": "POST", "brief": "POST method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "put", "value": "PUT", "brief": "PUT method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "trace", "value": "TRACE", "brief": "TRACE method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "other", "value": "_OTHER", "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, "brief": "HTTP request method.", - "examples": ["GET", "POST", "HEAD"], + "examples": [ + "GET", + "POST", + "HEAD" + ], "requirement_level": "required", "note": "HTTP request method value SHOULD be \"known\" to the instrumentation.\nBy default, this convention defines \"known\" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods)\nand the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html).\n\nIf the HTTP request method is not known to instrumentation, it MUST set the `http.request.method` attribute to `_OTHER`.\n\nIf the HTTP instrumentation could end up converting valid HTTP request methods to `_OTHER`, then it MUST provide a way to override\nthe list of known HTTP methods. If this override is done via environment variable, then the environment variable MUST be named\nOTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated list of case-sensitive known HTTP methods\n(this list MUST be a full override of the default known method, it is not a list of known methods in addition to the defaults).\n\nHTTP method names are case-sensitive and `http.request.method` attribute value MUST match a known HTTP method name exactly.\nInstrumentations for specific web frameworks that consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent.\nTracing instrumentations that do so, MUST also set `http.request.method_original` to the original value.\n", "stability": "stable" @@ -997,7 +1226,9 @@ "name": "http.response.status_code", "type": "int", "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", - "examples": [200], + "examples": [ + 200 + ], "requirement_level": { "conditionally_required": "If and only if one was received/sent." }, @@ -1006,13 +1237,15 @@ { "name": "error.type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "other", "value": "_OTHER", "brief": "A fallback error value to be used when the instrumentation doesn't define a custom value.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1033,7 +1266,10 @@ "name": "network.protocol.name", "type": "string", "brief": "[OSI application layer](https://osi-model.com/application-layer/) or non-OSI equivalent.", - "examples": ["http", "spdy"], + "examples": [ + "http", + "spdy" + ], "requirement_level": { "conditionally_required": "If not `http` and `network.protocol.version` is set." }, @@ -1044,7 +1280,12 @@ "name": "network.protocol.version", "type": "string", "brief": "Version of the protocol specified in `network.protocol.name`.", - "examples": ["1.0", "1.1", "2", "3"], + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], "requirement_level": "recommended", "note": "`network.protocol.version` refers to the version of the protocol used and might be different from the protocol client's version. If the HTTP client has a version of `0.27.2`, but sends HTTP version `1.1`, this attribute should be set to `1.1`.\n", "stability": "stable" @@ -1053,7 +1294,11 @@ "name": "server.address", "type": "string", "brief": "Host identifier of the [\"URI origin\"](https://www.rfc-editor.org/rfc/rfc9110.html#name-uri-origin) HTTP request is sent to.\n", - "examples": ["example.com", "10.1.2.80", "/tmp/my.sock"], + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], "requirement_level": "required", "note": "If an HTTP client request is explicitly made to an IP address, e.g. `http://x.x.x.x:8080`, then `server.address` SHOULD be the IP address `x.x.x.x`. A DNS lookup SHOULD NOT be used.\n", "stability": "stable" @@ -1062,7 +1307,11 @@ "name": "server.port", "type": "int", "brief": "Port identifier of the [\"URI origin\"](https://www.rfc-editor.org/rfc/rfc9110.html#name-uri-origin) HTTP request is sent to.\n", - "examples": [80, 8080, 443], + "examples": [ + 80, + 8080, + 443 + ], "requirement_level": "required", "note": "When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available.\n", "stability": "stable" @@ -1071,7 +1320,10 @@ "name": "url.scheme", "type": "string", "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.", - "examples": ["http", "https"], + "examples": [ + "http", + "https" + ], "requirement_level": "opt_in", "stability": "stable" }, @@ -1079,7 +1331,10 @@ "name": "http.route", "type": "string", "brief": "The matched route, that is, the path template in the format used by the respective server framework.\n", - "examples": ["/users/:userID?", "{controller}/{action}/{id?}"], + "examples": [ + "/users/:userID?", + "{controller}/{action}/{id?}" + ], "requirement_level": { "conditionally_required": "If and only if it's available" }, @@ -1090,7 +1345,11 @@ "name": "server.address", "type": "string", "brief": "Name of the local HTTP server that received the request.\n", - "examples": ["example.com", "10.1.2.80", "/tmp/my.sock"], + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], "requirement_level": "recommended", "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n", "stability": "stable" @@ -1099,7 +1358,11 @@ "name": "server.port", "type": "int", "brief": "Port of the local HTTP server that received the request.\n", - "examples": [80, 8080, 443], + "examples": [ + 80, + 8080, + 443 + ], "requirement_level": { "conditionally_required": "If `server.address` is set." }, @@ -1110,7 +1373,10 @@ "name": "url.scheme", "type": "string", "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.", - "examples": ["http", "https"], + "examples": [ + "http", + "https" + ], "requirement_level": "required", "note": "The scheme of the original client request, if known (e.g. from [Forwarded#proto](https://developer.mozilla.org/docs/Web/HTTP/Headers/Forwarded#proto), [X-Forwarded-Proto](https://developer.mozilla.org/docs/Web/HTTP/Headers/X-Forwarded-Proto), or a similar header). Otherwise, the scheme of the immediate peer request.", "stability": "stable" @@ -1118,67 +1384,87 @@ { "name": "messaging.system", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "activemq", "value": "activemq", "brief": "Apache ActiveMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "aws_sqs", "value": "aws_sqs", "brief": "Amazon Simple Queue Service (SQS)", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure_eventgrid", "value": "azure_eventgrid", "brief": "Azure Event Grid", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure_eventhubs", "value": "azure_eventhubs", "brief": "Azure Event Hubs", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure_servicebus", "value": "azure_servicebus", "brief": "Azure Service Bus", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "gcp_pubsub", "value": "gcp_pubsub", "brief": "Google Cloud Pub/Sub", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "jms", "value": "jms", "brief": "Java Message Service", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "kafka", "value": "kafka", "brief": "Apache Kafka", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "rabbitmq", "value": "rabbitmq", "brief": "RabbitMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "rocketmq", "value": "rocketmq", "brief": "Apache RocketMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1188,18 +1474,24 @@ { "name": "error.type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "other", "value": "_OTHER", "brief": "A fallback error value to be used when the instrumentation doesn't define a custom value.\n", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, "brief": "Describes a class of error the operation ended with.\n", - "examples": ["amqp:decode-error", "KAFKA_STORAGE_ERROR", "channel-error"], + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], "requirement_level": { "conditionally_required": "If and only if the messaging operation has failed." }, @@ -1210,7 +1502,11 @@ "name": "server.address", "type": "string", "brief": "Server domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", - "examples": ["example.com", "10.1.2.80", "/tmp/my.sock"], + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], "requirement_level": { "conditionally_required": "If available." }, @@ -1221,7 +1517,10 @@ "name": "network.protocol.name", "type": "string", "brief": "[OSI application layer](https://osi-model.com/application-layer/) or non-OSI equivalent.", - "examples": ["amqp", "mqtt"], + "examples": [ + "amqp", + "mqtt" + ], "tag": "connection-level", "requirement_level": "recommended", "note": "The value SHOULD be normalized to lowercase.", @@ -1241,7 +1540,10 @@ "name": "messaging.destination.name", "type": "string", "brief": "The message destination name", - "examples": ["MyQueue", "MyTopic"], + "examples": [ + "MyQueue", + "MyTopic" + ], "requirement_level": { "conditionally_required": "if and only if `messaging.destination.name` is known to have low cardinality. Otherwise, `messaging.destination.template` MAY be populated." }, @@ -1251,10 +1553,12 @@ "name": "messaging.destination.template", "type": "string", "brief": "Low cardinality representation of the messaging destination name", - "examples": ["/customers/{customerId}"], + "examples": [ + "/customers/{customerId}" + ], "requirement_level": { "conditionally_required": "if available." }, "note": "Destination names could be constructed from templates. An example would be a destination name involving a user name or product id. Although the destination name in this case is of high cardinality, the underlying template is of low cardinality and can be effectively used for grouping and aggregation.\n" } -] +] \ No newline at end of file diff --git a/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-error.yaml b/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-error.yaml index cc47904e..eeec6920 100644 --- a/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-error.yaml +++ b/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-error.yaml @@ -9,7 +9,6 @@ groups: brief: > Describes a class of error the operation ended with. type: - allow_custom_values: true members: - id: other value: "_OTHER" diff --git a/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-http.yaml b/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-http.yaml index df798f18..d6ce19da 100644 --- a/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-http.yaml +++ b/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-http.yaml @@ -30,7 +30,6 @@ groups: - id: http.request.method stability: stable type: - allow_custom_values: true members: - id: connect value: "CONNECT" diff --git a/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-messaging.yaml b/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-messaging.yaml index 3a75658c..f6d5773e 100644 --- a/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-messaging.yaml +++ b/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-messaging.yaml @@ -106,7 +106,6 @@ groups: examples: 1439 - id: messaging.operation type: - allow_custom_values: true members: - id: publish value: "publish" @@ -143,7 +142,6 @@ groups: examples: "myConsumerGroup" - id: messaging.rocketmq.consumption_model type: - allow_custom_values: false members: - id: clustering value: "clustering" @@ -180,7 +178,6 @@ groups: examples: tagA - id: messaging.rocketmq.message.type type: - allow_custom_values: false members: - id: normal value: "normal" @@ -210,7 +207,6 @@ groups: brief: > An identifier for the messaging system being used. See below for a list of well-known identifiers. type: - allow_custom_values: true members: - id: activemq value: "activemq" diff --git a/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-network.yaml b/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-network.yaml index 7a4bf35f..d9434db2 100644 --- a/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-network.yaml +++ b/crates/weaver_resolver/data/registry-test-3-extends/registry/registry-network.yaml @@ -22,7 +22,6 @@ groups: examples: "sprint" - id: network.connection.subtype type: - allow_custom_values: true members: - id: gprs brief: GPRS @@ -91,7 +90,6 @@ groups: examples: 'LTE' - id: network.connection.type type: - allow_custom_values: true members: - id: wifi value: "wifi" @@ -143,7 +141,6 @@ groups: - id: network.transport stability: stable type: - allow_custom_values: true members: - id: tcp value: 'tcp' @@ -170,7 +167,6 @@ groups: - id: network.type stability: stable type: - allow_custom_values: true members: - id: ipv4 value: 'ipv4' @@ -183,7 +179,6 @@ groups: examples: ['ipv4', 'ipv6'] - id: network.io.direction type: - allow_custom_values: false members: - id: transmit value: 'transmit' diff --git a/crates/weaver_resolver/data/registry-test-4-events/expected-attribute-catalog.json b/crates/weaver_resolver/data/registry-test-4-events/expected-attribute-catalog.json index 19c59da9..28959e23 100644 --- a/crates/weaver_resolver/data/registry-test-4-events/expected-attribute-catalog.json +++ b/crates/weaver_resolver/data/registry-test-4-events/expected-attribute-catalog.json @@ -60,7 +60,7 @@ { "name": "ios.state", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "active", @@ -111,7 +111,7 @@ { "name": "android.state", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "created", diff --git a/crates/weaver_resolver/data/registry-test-4-events/registry/mobile-events.yaml b/crates/weaver_resolver/data/registry-test-4-events/registry/mobile-events.yaml index f2cdffdc..ee3b8ffd 100644 --- a/crates/weaver_resolver/data/registry-test-4-events/registry/mobile-events.yaml +++ b/crates/weaver_resolver/data/registry-test-4-events/registry/mobile-events.yaml @@ -15,7 +15,6 @@ groups: brief: > This attribute represents the state the application has transitioned into at the occurrence of the event. type: - allow_custom_values: false members: - id: active value: 'active' @@ -54,7 +53,6 @@ groups: The Android lifecycle states are defined in [Activity lifecycle callbacks](https://developer.android.com/guide/components/activities/activity-lifecycle#lc), and from which the `OS identifiers` are derived. type: - allow_custom_values: false members: - id: created value: 'created' diff --git a/crates/weaver_resolver/data/registry-test-5-metrics/expected-attribute-catalog.json b/crates/weaver_resolver/data/registry-test-5-metrics/expected-attribute-catalog.json index b1a84ba5..76194f7b 100644 --- a/crates/weaver_resolver/data/registry-test-5-metrics/expected-attribute-catalog.json +++ b/crates/weaver_resolver/data/registry-test-5-metrics/expected-attribute-catalog.json @@ -2,37 +2,47 @@ { "name": "faas.trigger", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "datasource", "value": "datasource", "brief": "A response to some data source operation such as a database or filesystem read/write", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "http", "value": "http", "brief": "To provide an answer to an inbound HTTP request", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "pubsub", "value": "pubsub", "brief": "A function is set to be executed when messages are sent to a messaging system", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "timer", "value": "timer", "brief": "A function is scheduled to be executed regularly", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "other", "value": "other", "brief": "If none of the others apply", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -50,37 +60,47 @@ { "name": "faas.invoked_provider", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "alibaba_cloud", "value": "alibaba_cloud", "brief": "Alibaba Cloud", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "aws", "value": "aws", "brief": "Amazon Web Services", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "azure", "value": "azure", "brief": "Microsoft Azure", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "gcp", "value": "gcp", "brief": "Google Cloud Platform", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "tencent_cloud", "value": "tencent_cloud", "brief": "Tencent Cloud", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, diff --git a/crates/weaver_resolver/data/registry-test-5-metrics/registry/faas-common.yaml b/crates/weaver_resolver/data/registry-test-5-metrics/registry/faas-common.yaml index 89a0424d..532f467f 100644 --- a/crates/weaver_resolver/data/registry-test-5-metrics/registry/faas-common.yaml +++ b/crates/weaver_resolver/data/registry-test-5-metrics/registry/faas-common.yaml @@ -6,7 +6,6 @@ groups: - id: faas.trigger brief: 'Type of the trigger which caused this function invocation.' type: - allow_custom_values: false members: - id: datasource value: 'datasource' @@ -34,7 +33,6 @@ groups: examples: 'my-function' - id: faas.invoked_provider type: - allow_custom_values: true members: - id: 'alibaba_cloud' value: 'alibaba_cloud' diff --git a/crates/weaver_resolver/data/registry-test-7-spans/expected-attribute-catalog.json b/crates/weaver_resolver/data/registry-test-7-spans/expected-attribute-catalog.json index a7aad424..5255fb15 100644 --- a/crates/weaver_resolver/data/registry-test-7-spans/expected-attribute-catalog.json +++ b/crates/weaver_resolver/data/registry-test-7-spans/expected-attribute-catalog.json @@ -18,73 +18,95 @@ { "name": "db.cassandra.consistency_level", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "all", "value": "all", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "each_quorum", "value": "each_quorum", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "quorum", "value": "quorum", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "local_quorum", "value": "local_quorum", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "one", "value": "one", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "two", "value": "two", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "three", "value": "three", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "local_one", "value": "local_one", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "any", "value": "any", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "serial", "value": "serial", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "local_serial", "value": "local_serial", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -148,19 +170,23 @@ { "name": "db.cosmosdb.connection_mode", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "gateway", "value": "gateway", "brief": "Gateway (HTTP) connections mode", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "direct", "value": "direct", "brief": "Direct connection.", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -179,97 +205,127 @@ { "name": "db.cosmosdb.operation_type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "invalid", "value": "Invalid", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "create", "value": "Create", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "patch", "value": "Patch", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "read", "value": "Read", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "read_feed", "value": "ReadFeed", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "delete", "value": "Delete", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "replace", "value": "Replace", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "execute", "value": "Execute", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "query", "value": "Query", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "head", "value": "Head", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "head_feed", "value": "HeadFeed", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "upsert", "value": "Upsert", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "batch", "value": "Batch", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "query_plan", "value": "QueryPlan", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "execute_javascript", "value": "ExecuteJavaScript", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -443,319 +499,423 @@ { "name": "db.system", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "other_sql", "value": "other_sql", "brief": "Some other SQL database. Fallback only. See notes.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mssql", "value": "mssql", "brief": "Microsoft SQL Server", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mssqlcompact", "value": "mssqlcompact", "brief": "Microsoft SQL Server Compact", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mysql", "value": "mysql", "brief": "MySQL", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "oracle", "value": "oracle", "brief": "Oracle Database", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "db2", "value": "db2", "brief": "IBM Db2", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "postgresql", "value": "postgresql", "brief": "PostgreSQL", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "redshift", "value": "redshift", "brief": "Amazon Redshift", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hive", "value": "hive", "brief": "Apache Hive", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cloudscape", "value": "cloudscape", "brief": "Cloudscape", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hsqldb", "value": "hsqldb", "brief": "HyperSQL DataBase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "progress", "value": "progress", "brief": "Progress Database", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "maxdb", "value": "maxdb", "brief": "SAP MaxDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hanadb", "value": "hanadb", "brief": "SAP HANA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "ingres", "value": "ingres", "brief": "Ingres", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "firstsql", "value": "firstsql", "brief": "FirstSQL", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "edb", "value": "edb", "brief": "EnterpriseDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cache", "value": "cache", "brief": "InterSystems Caché", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "adabas", "value": "adabas", "brief": "Adabas (Adaptable Database System)", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "firebird", "value": "firebird", "brief": "Firebird", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "derby", "value": "derby", "brief": "Apache Derby", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "filemaker", "value": "filemaker", "brief": "FileMaker", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "informix", "value": "informix", "brief": "Informix", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "instantdb", "value": "instantdb", "brief": "InstantDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "interbase", "value": "interbase", "brief": "InterBase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mariadb", "value": "mariadb", "brief": "MariaDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "netezza", "value": "netezza", "brief": "Netezza", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "pervasive", "value": "pervasive", "brief": "Pervasive PSQL", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "pointbase", "value": "pointbase", "brief": "PointBase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "sqlite", "value": "sqlite", "brief": "SQLite", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "sybase", "value": "sybase", "brief": "Sybase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "teradata", "value": "teradata", "brief": "Teradata", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "vertica", "value": "vertica", "brief": "Vertica", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "h2", "value": "h2", "brief": "H2", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "coldfusion", "value": "coldfusion", "brief": "ColdFusion IMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cassandra", "value": "cassandra", "brief": "Apache Cassandra", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hbase", "value": "hbase", "brief": "Apache HBase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mongodb", "value": "mongodb", "brief": "MongoDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "redis", "value": "redis", "brief": "Redis", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "couchbase", "value": "couchbase", "brief": "Couchbase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "couchdb", "value": "couchdb", "brief": "CouchDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cosmosdb", "value": "cosmosdb", "brief": "Microsoft Azure Cosmos DB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "dynamodb", "value": "dynamodb", "brief": "Amazon DynamoDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "neo4j", "value": "neo4j", "brief": "Neo4j", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "geode", "value": "geode", "brief": "Apache Geode", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "elasticsearch", "value": "elasticsearch", "brief": "Elasticsearch", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "memcached", "value": "memcached", "brief": "Memcached", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cockroachdb", "value": "cockroachdb", "brief": "CockroachDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "opensearch", "value": "opensearch", "brief": "OpenSearch", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "clickhouse", "value": "clickhouse", "brief": "ClickHouse", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "spanner", "value": "spanner", "brief": "Cloud Spanner", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "trino", "value": "trino", "brief": "Trino", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -788,7 +948,7 @@ "brief": "The size of the request payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n", "examples": 3495, "requirement_level": "recommended", - "stability": "experimental" + "stability": "development" }, { "name": "http.request.header", @@ -805,67 +965,87 @@ { "name": "http.request.method", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "connect", "value": "CONNECT", "brief": "CONNECT method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "delete", "value": "DELETE", "brief": "DELETE method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "get", "value": "GET", "brief": "GET method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "head", "value": "HEAD", "brief": "HEAD method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "options", "value": "OPTIONS", "brief": "OPTIONS method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "patch", "value": "PATCH", "brief": "PATCH method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "post", "value": "POST", "brief": "POST method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "put", "value": "PUT", "brief": "PUT method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "trace", "value": "TRACE", "brief": "TRACE method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "other", "value": "_OTHER", "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -906,7 +1086,7 @@ "brief": "The size of the response payload body in bytes. This is the number of bytes transferred excluding headers and is often, but not always, present as the [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) header. For requests using transport encoding, this should be the compressed size.\n", "examples": 3495, "requirement_level": "recommended", - "stability": "experimental" + "stability": "development" }, { "name": "http.response.header", @@ -973,133 +1153,175 @@ { "name": "network.connection.subtype", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "gprs", "value": "gprs", "brief": "GPRS", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "edge", "value": "edge", "brief": "EDGE", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "umts", "value": "umts", "brief": "UMTS", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cdma", "value": "cdma", "brief": "CDMA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "evdo_0", "value": "evdo_0", "brief": "EVDO Rel. 0", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "evdo_a", "value": "evdo_a", "brief": "EVDO Rev. A", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cdma2000_1xrtt", "value": "cdma2000_1xrtt", "brief": "CDMA2000 1XRTT", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hsdpa", "value": "hsdpa", "brief": "HSDPA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hsupa", "value": "hsupa", "brief": "HSUPA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hspa", "value": "hspa", "brief": "HSPA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "iden", "value": "iden", "brief": "IDEN", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "evdo_b", "value": "evdo_b", "brief": "EVDO Rev. B", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "lte", "value": "lte", "brief": "LTE", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "ehrpd", "value": "ehrpd", "brief": "EHRPD", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hspap", "value": "hspap", "brief": "HSPAP", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "gsm", "value": "gsm", "brief": "GSM", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "td_scdma", "value": "td_scdma", "brief": "TD-SCDMA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "iwlan", "value": "iwlan", "brief": "IWLAN", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "nr", "value": "nr", "brief": "5G NR (New Radio)", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "nrnsa", "value": "nrnsa", "brief": "5G NRNSA (New Radio Non-Standalone)", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "lte_ca", "value": "lte_ca", "brief": "LTE CA", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1110,37 +1332,47 @@ { "name": "network.connection.type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "wifi", "value": "wifi", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "wired", "value": "wired", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cell", "value": "cell", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "unavailable", "value": "unavailable", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "unknown", "value": "unknown", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1215,31 +1447,39 @@ { "name": "network.transport", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "tcp", "value": "tcp", "brief": "TCP", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "udp", "value": "udp", "brief": "UDP", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "pipe", "value": "pipe", "brief": "Named or anonymous pipe.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "unix", "value": "unix", "brief": "Unix domain socket", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1255,19 +1495,23 @@ { "name": "network.type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "ipv4", "value": "ipv4", "brief": "IPv4", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "ipv6", "value": "ipv6", "brief": "IPv6", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1283,19 +1527,23 @@ { "name": "network.io.direction", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "transmit", "value": "transmit", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "receive", "value": "receive", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1400,319 +1648,423 @@ { "name": "db.system", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "other_sql", "value": "other_sql", "brief": "Some other SQL database. Fallback only. See notes.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mssql", "value": "mssql", "brief": "Microsoft SQL Server", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mssqlcompact", "value": "mssqlcompact", "brief": "Microsoft SQL Server Compact", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mysql", "value": "mysql", "brief": "MySQL", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "oracle", "value": "oracle", "brief": "Oracle Database", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "db2", "value": "db2", "brief": "IBM Db2", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "postgresql", "value": "postgresql", "brief": "PostgreSQL", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "redshift", "value": "redshift", "brief": "Amazon Redshift", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hive", "value": "hive", "brief": "Apache Hive", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cloudscape", "value": "cloudscape", "brief": "Cloudscape", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hsqldb", "value": "hsqldb", "brief": "HyperSQL DataBase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "progress", "value": "progress", "brief": "Progress Database", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "maxdb", "value": "maxdb", "brief": "SAP MaxDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hanadb", "value": "hanadb", "brief": "SAP HANA", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "ingres", "value": "ingres", "brief": "Ingres", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "firstsql", "value": "firstsql", "brief": "FirstSQL", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "edb", "value": "edb", "brief": "EnterpriseDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cache", "value": "cache", "brief": "InterSystems Caché", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "adabas", "value": "adabas", "brief": "Adabas (Adaptable Database System)", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "firebird", "value": "firebird", "brief": "Firebird", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "derby", "value": "derby", "brief": "Apache Derby", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "filemaker", "value": "filemaker", "brief": "FileMaker", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "informix", "value": "informix", "brief": "Informix", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "instantdb", "value": "instantdb", "brief": "InstantDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "interbase", "value": "interbase", "brief": "InterBase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mariadb", "value": "mariadb", "brief": "MariaDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "netezza", "value": "netezza", "brief": "Netezza", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "pervasive", "value": "pervasive", "brief": "Pervasive PSQL", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "pointbase", "value": "pointbase", "brief": "PointBase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "sqlite", "value": "sqlite", "brief": "SQLite", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "sybase", "value": "sybase", "brief": "Sybase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "teradata", "value": "teradata", "brief": "Teradata", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "vertica", "value": "vertica", "brief": "Vertica", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "h2", "value": "h2", "brief": "H2", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "coldfusion", "value": "coldfusion", "brief": "ColdFusion IMQ", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cassandra", "value": "cassandra", "brief": "Apache Cassandra", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "hbase", "value": "hbase", "brief": "Apache HBase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "mongodb", "value": "mongodb", "brief": "MongoDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "redis", "value": "redis", "brief": "Redis", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "couchbase", "value": "couchbase", "brief": "Couchbase", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "couchdb", "value": "couchdb", "brief": "CouchDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cosmosdb", "value": "cosmosdb", "brief": "Microsoft Azure Cosmos DB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "dynamodb", "value": "dynamodb", "brief": "Amazon DynamoDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "neo4j", "value": "neo4j", "brief": "Neo4j", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "geode", "value": "geode", "brief": "Apache Geode", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "elasticsearch", "value": "elasticsearch", "brief": "Elasticsearch", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "memcached", "value": "memcached", "brief": "Memcached", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "cockroachdb", "value": "cockroachdb", "brief": "CockroachDB", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "opensearch", "value": "opensearch", "brief": "OpenSearch", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "clickhouse", "value": "clickhouse", "brief": "ClickHouse", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "spanner", "value": "spanner", "brief": "Cloud Spanner", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "trino", "value": "trino", "brief": "Trino", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1850,31 +2202,39 @@ { "name": "network.transport", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "tcp", "value": "tcp", "brief": "TCP", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "udp", "value": "udp", "brief": "UDP", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "pipe", "value": "pipe", "brief": "Named or anonymous pipe.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "unix", "value": "unix", "brief": "Unix domain socket", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1891,19 +2251,23 @@ { "name": "network.type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "ipv4", "value": "ipv4", "brief": "IPv4", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "ipv6", "value": "ipv6", "brief": "IPv6", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -1939,73 +2303,95 @@ { "name": "db.cassandra.consistency_level", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "all", "value": "all", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "each_quorum", "value": "each_quorum", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "quorum", "value": "quorum", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "local_quorum", "value": "local_quorum", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "one", "value": "one", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "two", "value": "two", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "three", "value": "three", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "local_one", "value": "local_one", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "any", "value": "any", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "serial", "value": "serial", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "local_serial", "value": "local_serial", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -2209,67 +2595,87 @@ { "name": "http.request.method", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "connect", "value": "CONNECT", "brief": "CONNECT method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "delete", "value": "DELETE", "brief": "DELETE method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "get", "value": "GET", "brief": "GET method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "head", "value": "HEAD", "brief": "HEAD method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "options", "value": "OPTIONS", "brief": "OPTIONS method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "patch", "value": "PATCH", "brief": "PATCH method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "post", "value": "POST", "brief": "POST method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "put", "value": "PUT", "brief": "PUT method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "trace", "value": "TRACE", "brief": "TRACE method.", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "other", "value": "_OTHER", "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -2349,19 +2755,23 @@ { "name": "db.cosmosdb.connection_mode", "type": { - "allow_custom_values": false, + "allow_custom_values": null, "members": [ { "id": "gateway", "value": "gateway", "brief": "Gateway (HTTP) connections mode", - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "direct", "value": "direct", "brief": "Direct connection.", - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, @@ -2384,97 +2794,127 @@ { "name": "db.cosmosdb.operation_type", "type": { - "allow_custom_values": true, + "allow_custom_values": null, "members": [ { "id": "invalid", "value": "Invalid", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "create", "value": "Create", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "patch", "value": "Patch", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "read", "value": "Read", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "read_feed", "value": "ReadFeed", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "delete", "value": "Delete", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "replace", "value": "Replace", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "execute", "value": "Execute", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "query", "value": "Query", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "head", "value": "Head", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "head_feed", "value": "HeadFeed", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "upsert", "value": "Upsert", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "batch", "value": "Batch", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "query_plan", "value": "QueryPlan", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null }, { "id": "execute_javascript", "value": "ExecuteJavaScript", "brief": null, - "note": null + "note": null, + "stability": null, + "deprecated": null } ] }, diff --git a/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-db.yaml b/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-db.yaml index dc2ef871..aeb403f5 100644 --- a/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-db.yaml +++ b/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-db.yaml @@ -87,7 +87,6 @@ groups: tag: tech-specific-cosmosdb - id: db.cosmosdb.connection_mode type: - allow_custom_values: false members: - id: gateway value: 'gateway' @@ -104,7 +103,6 @@ groups: tag: tech-specific-cosmosdb - id: db.cosmosdb.operation_type type: - allow_custom_values: true members: - id: invalid value: 'Invalid' @@ -256,7 +254,6 @@ groups: - id: db.system brief: An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers. type: - allow_custom_values: true members: - id: other_sql value: 'other_sql' diff --git a/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-http.yaml b/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-http.yaml index df798f18..d6ce19da 100644 --- a/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-http.yaml +++ b/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-http.yaml @@ -30,7 +30,6 @@ groups: - id: http.request.method stability: stable type: - allow_custom_values: true members: - id: connect value: "CONNECT" diff --git a/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-network.yaml b/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-network.yaml index 7a4bf35f..d9434db2 100644 --- a/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-network.yaml +++ b/crates/weaver_resolver/data/registry-test-7-spans/registry/registry-network.yaml @@ -22,7 +22,6 @@ groups: examples: "sprint" - id: network.connection.subtype type: - allow_custom_values: true members: - id: gprs brief: GPRS @@ -91,7 +90,6 @@ groups: examples: 'LTE' - id: network.connection.type type: - allow_custom_values: true members: - id: wifi value: "wifi" @@ -143,7 +141,6 @@ groups: - id: network.transport stability: stable type: - allow_custom_values: true members: - id: tcp value: 'tcp' @@ -170,7 +167,6 @@ groups: - id: network.type stability: stable type: - allow_custom_values: true members: - id: ipv4 value: 'ipv4' @@ -183,7 +179,6 @@ groups: examples: ['ipv4', 'ipv6'] - id: network.io.direction type: - allow_custom_values: false members: - id: transmit value: 'transmit' diff --git a/crates/weaver_resolver/data/registry-test-9-metric-extends/expected-attribute-catalog.json b/crates/weaver_resolver/data/registry-test-9-metric-extends/expected-attribute-catalog.json index abac1d59..88739231 100644 --- a/crates/weaver_resolver/data/registry-test-9-metric-extends/expected-attribute-catalog.json +++ b/crates/weaver_resolver/data/registry-test-9-metric-extends/expected-attribute-catalog.json @@ -1,44 +1,46 @@ [ - { - "name": "jvm.memory.type", - "type": { - "allow_custom_values": false, - "members": [ - { - "id": "heap", - "value": "heap", - "brief": "Heap memory.", - "note": null, - "stability": "stable" - }, - { - "id": "non_heap", - "value": "non_heap", - "brief": "Non-heap memory", - "note": null, - "stability": "stable" - } - ] - }, - "brief": "The type of memory.", - "examples": [ - "heap", - "non_heap" - ], - "requirement_level": "recommended", - "stability": "stable" + { + "name": "jvm.memory.type", + "type": { + "allow_custom_values": null, + "members": [ + { + "id": "heap", + "value": "heap", + "brief": "Heap memory.", + "note": null, + "stability": "stable", + "deprecated": null + }, + { + "id": "non_heap", + "value": "non_heap", + "brief": "Non-heap memory", + "note": null, + "stability": "stable", + "deprecated": null + } + ] }, - { - "name": "jvm.memory.pool.name", - "type": "string", - "brief": "Name of the memory pool.", - "examples": [ - "G1 Old Gen", - "G1 Eden space", - "G1 Survivor Space" - ], - "requirement_level": "recommended", - "note": "Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n", - "stability": "stable" - } - ] \ No newline at end of file + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "requirement_level": "recommended", + "stability": "stable" + }, + { + "name": "jvm.memory.pool.name", + "type": "string", + "brief": "Name of the memory pool.", + "examples": [ + "G1 Old Gen", + "G1 Eden space", + "G1 Survivor Space" + ], + "requirement_level": "recommended", + "note": "Pool names are generally obtained via [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()).\n", + "stability": "stable" + } +] \ No newline at end of file diff --git a/crates/weaver_resolver/data/registry-test-9-metric-extends/registry/jvm-metrics.yaml b/crates/weaver_resolver/data/registry-test-9-metric-extends/registry/jvm-metrics.yaml index 8163888b..00b2ed25 100644 --- a/crates/weaver_resolver/data/registry-test-9-metric-extends/registry/jvm-metrics.yaml +++ b/crates/weaver_resolver/data/registry-test-9-metric-extends/registry/jvm-metrics.yaml @@ -6,7 +6,6 @@ groups: - id: jvm.memory.type stability: stable type: - allow_custom_values: false members: - id: heap value: 'heap' diff --git a/crates/weaver_semconv/data/cloud.yaml b/crates/weaver_semconv/data/cloud.yaml index 7986f003..0ce0203f 100644 --- a/crates/weaver_semconv/data/cloud.yaml +++ b/crates/weaver_semconv/data/cloud.yaml @@ -7,7 +7,6 @@ groups: attributes: - id: cloud.provider type: - allow_custom_values: true members: - id: 'alibaba_cloud' value: 'alibaba_cloud' @@ -90,7 +89,6 @@ groups: examples: ['us-east-1c'] - id: cloud.platform type: - allow_custom_values: true members: - id: alibaba_cloud_ecs value: 'alibaba_cloud_ecs' diff --git a/crates/weaver_semconv/data/database-metrics.yaml b/crates/weaver_semconv/data/database-metrics.yaml index 0853d4a5..910f142e 100644 --- a/crates/weaver_semconv/data/database-metrics.yaml +++ b/crates/weaver_semconv/data/database-metrics.yaml @@ -5,7 +5,6 @@ groups: attributes: - id: state type: - allow_custom_values: false members: - id: idle value: 'idle' diff --git a/crates/weaver_semconv/data/database.yaml b/crates/weaver_semconv/data/database.yaml index e088f82c..c4cfc3c2 100644 --- a/crates/weaver_semconv/data/database.yaml +++ b/crates/weaver_semconv/data/database.yaml @@ -11,7 +11,6 @@ groups: brief: An identifier for the database management system (DBMS) product being used. See below for a list of well-known identifiers. requirement_level: required type: - allow_custom_values: true members: - id: other_sql value: 'other_sql' @@ -487,7 +486,6 @@ groups: examples: '3ba4827d-4422-483f-b59f-85b74211c11d' - id: db.cosmosdb.operation_type type: - allow_custom_values: true members: - id: invalid value: 'Invalid' @@ -538,7 +536,6 @@ groups: examples: ['cosmos-netstandard-sdk/3.23.0\|3.23.1\|1\|X64\|Linux 5.4.0-1098-azure 104 18\|.NET Core 3.1.32\|S\|'] - id: db.cosmosdb.connection_mode type: - allow_custom_values: false members: - id: gateway value: 'gateway' diff --git a/crates/weaver_semconv/data/faas-common.yaml b/crates/weaver_semconv/data/faas-common.yaml index 03a050c2..ab0ba5ad 100644 --- a/crates/weaver_semconv/data/faas-common.yaml +++ b/crates/weaver_semconv/data/faas-common.yaml @@ -7,7 +7,6 @@ groups: - id: faas.trigger brief: 'Type of the trigger which caused this function invocation.' type: - allow_custom_values: false members: - id: datasource value: 'datasource' @@ -35,7 +34,6 @@ groups: examples: 'my-function' - id: faas.invoked_provider type: - allow_custom_values: true members: - id: 'alibaba_cloud' value: 'alibaba_cloud' diff --git a/crates/weaver_semconv/data/faas.yaml b/crates/weaver_semconv/data/faas.yaml index f9eab24d..f9b5375b 100644 --- a/crates/weaver_semconv/data/faas.yaml +++ b/crates/weaver_semconv/data/faas.yaml @@ -42,7 +42,6 @@ groups: - id: faas.document.operation requirement_level: required type: - allow_custom_values: true members: - id: insert value: 'insert' diff --git a/crates/weaver_semconv/data/http-common.yaml b/crates/weaver_semconv/data/http-common.yaml index 458e8f57..1a921f8c 100644 --- a/crates/weaver_semconv/data/http-common.yaml +++ b/crates/weaver_semconv/data/http-common.yaml @@ -5,7 +5,6 @@ groups: attributes: - id: http.request.method type: - allow_custom_values: true members: - id: connect value: "CONNECT" diff --git a/crates/weaver_semconv/data/jvm-metrics.yaml b/crates/weaver_semconv/data/jvm-metrics.yaml index 5d315d8c..3fee1e6e 100644 --- a/crates/weaver_semconv/data/jvm-metrics.yaml +++ b/crates/weaver_semconv/data/jvm-metrics.yaml @@ -5,7 +5,6 @@ groups: attributes: - id: jvm.memory.type type: - allow_custom_values: false members: - id: heap value: 'heap' diff --git a/crates/weaver_semconv/data/media.yaml b/crates/weaver_semconv/data/media.yaml index 9b3362db..b7540354 100644 --- a/crates/weaver_semconv/data/media.yaml +++ b/crates/weaver_semconv/data/media.yaml @@ -8,7 +8,6 @@ groups: brief: > The stream associated with the log. See below for a list of well-known values. type: - allow_custom_values: false members: - id: stdout value: 'stdout' diff --git a/crates/weaver_semconv/data/messaging.yaml b/crates/weaver_semconv/data/messaging.yaml index 2793fa81..8eed34a1 100644 --- a/crates/weaver_semconv/data/messaging.yaml +++ b/crates/weaver_semconv/data/messaging.yaml @@ -103,7 +103,6 @@ groups: examples: ["kafka", "rabbitmq", "rocketmq", "activemq", "AmazonSQS"] - id: messaging.operation type: - allow_custom_values: true members: - id: publish value: "publish" @@ -273,7 +272,6 @@ groups: examples: "myMessageGroup" - id: messaging.rocketmq.message.type type: - allow_custom_values: false members: - id: normal value: "normal" @@ -301,7 +299,6 @@ groups: examples: [["keyA"], ["keyB"]] - id: messaging.rocketmq.consumption_model type: - allow_custom_values: false members: - id: clustering value: "clustering" diff --git a/crates/weaver_semconv/data/network.yaml b/crates/weaver_semconv/data/network.yaml index 4e98d59b..f34a5608 100644 --- a/crates/weaver_semconv/data/network.yaml +++ b/crates/weaver_semconv/data/network.yaml @@ -6,7 +6,6 @@ groups: attributes: - id: network.transport type: - allow_custom_values: true members: - id: tcp value: 'tcp' @@ -27,7 +26,6 @@ groups: examples: ['tcp', 'udp'] - id: network.type type: - allow_custom_values: true members: - id: ipv4 value: 'ipv4' @@ -61,7 +59,6 @@ groups: attributes: - id: network.connection.type type: - allow_custom_values: true members: - id: wifi value: "wifi" @@ -77,7 +74,6 @@ groups: examples: 'wifi' - id: network.connection.subtype type: - allow_custom_values: true members: - id: gprs brief: GPRS diff --git a/crates/weaver_semconv/data/rpc.yaml b/crates/weaver_semconv/data/rpc.yaml index 2c8b857a..d3ea50b8 100644 --- a/crates/weaver_semconv/data/rpc.yaml +++ b/crates/weaver_semconv/data/rpc.yaml @@ -9,7 +9,6 @@ groups: requirement_level: required brief: 'A string identifying the remoting system. See below for a list of well-known identifiers.' type: - allow_custom_values: true members: - id: grpc value: 'grpc' diff --git a/crates/weaver_semconv/data/tls.yaml b/crates/weaver_semconv/data/tls.yaml index 19b724d8..21662f71 100644 --- a/crates/weaver_semconv/data/tls.yaml +++ b/crates/weaver_semconv/data/tls.yaml @@ -98,7 +98,6 @@ groups: brief: > Normalized lowercase protocol name parsed from original string of the negotiated [SSL/TLS protocol version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) type: - allow_custom_values: true members: - id: ssl value: ssl diff --git a/crates/weaver_semconv/src/attribute.rs b/crates/weaver_semconv/src/attribute.rs index b6848f9a..9d511cf7 100644 --- a/crates/weaver_semconv/src/attribute.rs +++ b/crates/weaver_semconv/src/attribute.rs @@ -198,9 +198,8 @@ pub enum AttributeType { /// An enum definition type. Enum { /// Set to false to not accept values other than the specified members. - /// It defaults to true. - #[serde(default = "default_as_true")] - allow_custom_values: bool, + /// No longer used since semconv 1.27.0. + allow_custom_values: Option, /// List of enum entries. members: Vec, }, @@ -224,11 +223,6 @@ impl Display for AttributeType { } } -/// Specifies the default value for allow_custom_values. -fn default_as_true() -> bool { - true -} - /// Primitive or array types. #[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq, Hash, JsonSchema)] #[serde(rename_all = "snake_case")] @@ -798,7 +792,7 @@ mod tests { format!( "{}", Enum { - allow_custom_values: true, + allow_custom_values: Some(true), members: vec![EnumEntriesSpec { id: "id".to_owned(), value: ValueSpec::Int(42), diff --git a/crates/weaver_semconv/src/group.rs b/crates/weaver_semconv/src/group.rs index f26dc622..1e6a119f 100644 --- a/crates/weaver_semconv/src/group.rs +++ b/crates/weaver_semconv/src/group.rs @@ -281,6 +281,24 @@ impl GroupSpec { } } } + + // Produce a warning if `allow_custom_values` is Some. + if let AttributeSpec::Id { + r#type: + AttributeType::Enum { + allow_custom_values: Some(_), + .. + }, + .. + } = attribute + { + errors.push(Error::InvalidAttributeAllowCustomValues { + path_or_url: path_or_url.to_owned(), + group_id: self.id.clone(), + attribute_id: attribute.id(), + error: "This attribute is an enum using allow_custom_values. This is no longer used.".to_owned(), + }); + } } WResult::with_non_fatal_errors((), errors) @@ -430,8 +448,9 @@ mod tests { use crate::any_value::AnyValueCommonSpec; use crate::attribute::{BasicRequirementLevelSpec, Examples, RequirementLevel}; use crate::Error::{ - CompoundError, InvalidExampleWarning, InvalidGroup, InvalidGroupMissingExtendsOrAttributes, - InvalidGroupStability, InvalidGroupUsesPrefix, InvalidMetric, + CompoundError, InvalidAttributeAllowCustomValues, InvalidExampleWarning, InvalidGroup, + InvalidGroupMissingExtendsOrAttributes, InvalidGroupStability, InvalidGroupUsesPrefix, + InvalidMetric, }; use super::*; @@ -641,6 +660,74 @@ mod tests { ); } + #[test] + fn test_allow_custom_values() { + let mut group = GroupSpec { + id: "test".to_owned(), + r#type: GroupType::Span, + brief: "test".to_owned(), + note: "test".to_owned(), + prefix: "".to_owned(), + extends: None, + stability: Some(Stability::Deprecated), + deprecated: Some("true".to_owned()), + attributes: vec![AttributeSpec::Id { + id: "test".to_owned(), + r#type: AttributeType::Enum { + members: vec![], + allow_custom_values: Some(true), + }, + brief: None, + stability: Some(Stability::Deprecated), + deprecated: Some("true".to_owned()), + examples: Some(Examples::String("test".to_owned())), + tag: None, + requirement_level: Default::default(), + sampling_relevant: None, + note: "".to_owned(), + }], + constraints: vec![], + span_kind: Some(SpanKindSpec::Client), + events: vec!["event".to_owned()], + metric_name: None, + instrument: None, + unit: None, + name: None, + display_name: None, + body: None, + }; + let result = group.validate("").into_result_failing_non_fatal(); + assert_eq!( + Err(InvalidAttributeAllowCustomValues { + path_or_url: "".to_owned(), + group_id: "test".to_owned(), + attribute_id: "test".to_owned(), + error: + "This attribute is an enum using allow_custom_values. This is no longer used." + .to_owned(), + },), + result + ); + // Test that allow_custom_values is not set. + group.attributes = vec![AttributeSpec::Id { + id: "test".to_owned(), + r#type: AttributeType::Enum { + members: vec![], + allow_custom_values: None, + }, + brief: None, + stability: Some(Stability::Deprecated), + deprecated: Some("true".to_owned()), + examples: Some(Examples::String("test".to_owned())), + tag: None, + requirement_level: Default::default(), + sampling_relevant: None, + note: "".to_owned(), + }]; + let result = group.validate("").into_result_failing_non_fatal(); + assert!(result.is_ok()); + } + #[test] fn test_validate_event() { let mut group = GroupSpec { diff --git a/crates/weaver_semconv/src/lib.rs b/crates/weaver_semconv/src/lib.rs index d2a62474..0c6952fe 100644 --- a/crates/weaver_semconv/src/lib.rs +++ b/crates/weaver_semconv/src/lib.rs @@ -111,6 +111,20 @@ pub enum Error { error: String, }, + /// The semantic convention asset contains an invalid attribute definition. + #[error("The attribute `{attribute_id}` in the group `{group_id}` has `allow_custom_values`. This is no longer used. {error}.\nProvenance: {path_or_url:?}")] + #[diagnostic(severity(Warning))] + InvalidAttributeAllowCustomValues { + /// The path or URL of the semantic convention asset. + path_or_url: String, + /// The group id of the attribute. + group_id: String, + /// The id of the attribute. + attribute_id: String, + /// The reason of the error. + error: String, + }, + /// This error occurs when a semantic convention asset contains an invalid example. /// This is treated as a critical error in the current context. #[error("The attribute `{attribute_id}` in the group `{group_id}` contains an invalid example. {error}.\nProvenance: {path_or_url:?}")] diff --git a/src/registry/check.rs b/src/registry/check.rs index d382f3d7..d79a52f6 100644 --- a/src/registry/check.rs +++ b/src/registry/check.rs @@ -327,7 +327,8 @@ mod tests { assert!(!diag_msgs.is_empty()); assert_eq!( diag_msgs.len(), - 13 /* before resolution */ + 12 /* allow_custom_values */ + + 13 /* before resolution */ + 3 /* metric after resolution */ + 9 /* http after resolution */ ); diff --git a/tests/registry_check.rs b/tests/registry_check.rs index a67aa914..5cfb2ae2 100644 --- a/tests/registry_check.rs +++ b/tests/registry_check.rs @@ -42,9 +42,10 @@ fn test_cli_interface() { // We should be able to parse the JSON output from stdout. let stdout = String::from_utf8(output.stdout).expect("Invalid UTF-8"); let json_value: Vec = serde_json::from_str(&stdout).expect("Invalid JSON"); - // We expect 25 policy violations. + // We expect 37 policy violations. + // - 12 allow_custom_values // - 13 violations before resolution // - 3 violations for metrics after resolution // - 9 violations for http after resolution - assert_eq!(json_value.len(), 25); + assert_eq!(json_value.len(), 37); }