diff --git a/Makefile b/Makefile index 68efa8b11c..926580a9d5 100644 --- a/Makefile +++ b/Makefile @@ -343,3 +343,42 @@ areas-table-generation: .PHONY: areas-table-check areas-table-check: docker run --rm -v ${PWD}:/repo -w /repo python:3-alpine python internal/tools/scripts/update-areas-table.py --install --check; + +SCHEMAS_PATH = $(PWD)/schemas +.PHONY: generate-schema-v2-dev +generate-schema-v2-dev: + $(DOCKER_RUN) --rm \ + $(DOCKER_USER_IS_HOST_USER_ARG) \ + --mount 'type=bind,source=$(PWD)/internal/tools/scripts,target=/home/weaver/templates,readonly' \ + --mount 'type=bind,source=$(PWD)/model,target=/home/weaver/source,readonly' \ + --mount 'type=bind,source=$(SCHEMAS_PATH),target=/home/weaver/target' \ + $(WEAVER_CONTAINER) registry generate \ + --registry=/home/weaver/source \ + --templates=/home/weaver/templates \ + --param next_version=$(NEXT_SEMCONV_VERSION) \ + --config=/home/weaver/templates/registry/schema-v2-weaver.yaml \ + . \ + /home/weaver/target + + # TODO: diff does not have indication about stability, so we can only generate + # dev diff + $(DOCKER_RUN) --rm \ + $(DOCKER_USER_IS_HOST_USER_ARG) \ + --mount 'type=bind,source=$(PWD)/internal/tools/scripts,target=/home/weaver/templates,readonly' \ + --mount 'type=bind,source=$(PWD)/model,target=/home/weaver/source,readonly' \ + --mount 'type=bind,source=$(SCHEMAS_PATH),target=/home/weaver/target' \ + $(WEAVER_CONTAINER) registry diff \ + --registry=/home/weaver/source \ + --baseline-registry=https://github.com/open-telemetry/semantic-conventions/archive/refs/tags/v$(LATEST_RELEASED_SEMCONV_VERSION).zip[model] \ + --diff-format yaml \ + --diff-template /home/weaver/templates/schema-v2-diff \ + --output /home/weaver/target + + # TODO: these commands should not be necessary: + $(SED) -i 's/semconv_version: unversioned/semconv_version: $(NEXT_SEMCONV_VERSION)/' $(SCHEMAS_PATH)/next-version-dev/schema-diff.yaml + + rm -rf $(SCHEMAS_PATH)/${NEXT_SEMCONV_VERSION}-dev + mv $(SCHEMAS_PATH)/next-version-dev $(SCHEMAS_PATH)/${NEXT_SEMCONV_VERSION}-dev + + rm -rf $(SCHEMAS_PATH)/${NEXT_SEMCONV_VERSION} + mv $(SCHEMAS_PATH)/next-version $(SCHEMAS_PATH)/${NEXT_SEMCONV_VERSION} diff --git a/internal/tools/scripts/registry/schema-v2-weaver.yaml b/internal/tools/scripts/registry/schema-v2-weaver.yaml new file mode 100644 index 0000000000..699a3020fc --- /dev/null +++ b/internal/tools/scripts/registry/schema-v2-weaver.yaml @@ -0,0 +1,50 @@ +templates: + - pattern: schema.j2 + filter: . + application_mode: single + file_name: next-version-dev/schema.yaml # how to parametrize this? + - pattern: schema.j2 + filter: > + def filter_members: + if type == "array" then + map(select(.stability == "stable") | filter_members) + elif type == "object" then + if has("members") and (.members | type == "array") then + .members |= filter_members + else + . + end + else + . + end; + + .groups |= map( + select( + (.stability == "stable") or + ( + .type == "attribute_group" and + (.attributes | map(select(.stability == "stable")) | length > 0) + ) + ) + | + if .attributes then + .attributes |= map( + select(.stability == "stable") + | + if (.type | type == "object") and (.type.members) then + .type |= filter_members + else + . + end + ) + else + . + end + ) + application_mode: single + file_name: next-version/schema.yaml + +whitespace_control: + trim_blocks: true + lstrip_blocks: true + keep_trailing_newline: true diff --git a/internal/tools/scripts/registry/schema.j2 b/internal/tools/scripts/registry/schema.j2 new file mode 100644 index 0000000000..511382335a --- /dev/null +++ b/internal/tools/scripts/registry/schema.j2 @@ -0,0 +1,5 @@ +{# TODO: toyaml generates some scrabbled output #} +{#{{ ctx | toyaml }}#} + +{{ ctx | tojson(indent=true) }} + diff --git a/internal/tools/scripts/schema-v2-diff/yaml/schema-diff.j2 b/internal/tools/scripts/schema-v2-diff/yaml/schema-diff.j2 new file mode 100644 index 0000000000..d5fd20cf57 --- /dev/null +++ b/internal/tools/scripts/schema-v2-diff/yaml/schema-diff.j2 @@ -0,0 +1 @@ +{{ ctx | toyaml }} \ No newline at end of file diff --git a/internal/tools/scripts/schema-v2-diff/yaml/weaver.yaml b/internal/tools/scripts/schema-v2-diff/yaml/weaver.yaml new file mode 100644 index 0000000000..a86e6a9e7e --- /dev/null +++ b/internal/tools/scripts/schema-v2-diff/yaml/weaver.yaml @@ -0,0 +1,9 @@ +templates: + - pattern: schema-diff.j2 + filter: . + application_mode: single + file_name: next-version-dev/schema-diff.yaml # how to parametrize this? +whitespace_control: + trim_blocks: true + lstrip_blocks: true + keep_trailing_newline: true diff --git a/schemas/next-dev/schema-diff.yaml b/schemas/next-dev/schema-diff.yaml new file mode 100644 index 0000000000..1307580b76 --- /dev/null +++ b/schemas/next-dev/schema-diff.yaml @@ -0,0 +1,10 @@ +baseline: + semconv_version: v1.38.0 +changes: + entities: [] + events: [] + metrics: [] + registry_attributes: [] + spans: [] +head: + semconv_version: next diff --git a/schemas/next-dev/schema.yaml b/schemas/next-dev/schema.yaml new file mode 100644 index 0000000000..c153e6397a --- /dev/null +++ b/schemas/next-dev/schema.yaml @@ -0,0 +1,114448 @@ + +{ + "groups": [ + { + "attributes": [ + { + "brief": "An identifier that uniquely differentiates this screen from other screens in the same application.\n", + "examples": [ + "f9bc787d-ff05-48ad-90e1-fca1d46130b3", + "com.example.app.MainActivity", + "com.example.shop.ProductDetailFragment", + "MyApp.ProfileView", + "MyApp.ProfileViewController" + ], + "name": "app.screen.id", + "note": "A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The x (horizontal) coordinate of a screen coordinate, in screen pixels.", + "examples": [ + 0, + 131 + ], + "name": "app.screen.coordinate.x", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "The y (vertical) component of a screen coordinate, in screen pixels.\n", + "examples": [ + 12, + 99 + ], + "name": "app.screen.coordinate.y", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of an application screen.", + "examples": [ + "MainActivity", + "ProductDetailFragment", + "ProfileView", + "ProfileViewController" + ], + "name": "app.screen.name", + "note": "A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "This event represents an instantaneous click on the screen of an application.\n", + "id": "event.app.screen.click", + "lineage": { + "attributes": { + "app.screen.coordinate.x": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.screen.coordinate.y": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.screen.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.screen.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + } + }, + "provenance": { + "path": "/home/weaver/source/app/events.yaml", + "registry_id": "main" + } + }, + "name": "app.screen.click", + "note": "The `app.screen.click` event can be used to indicate that a user has clicked or tapped on the screen portion of an application. Clicks outside of an application\u0027s active area SHOULD NOT generate this event. This event does not differentiate between touch/mouse down and touch/mouse up. Implementations SHOULD give preference to generating this event at the time the click is complete, typically on touch release or mouse up. The location of the click event MUST be provided in absolute screen pixels.\n", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "An identifier that uniquely differentiates this screen from other screens in the same application.\n", + "examples": [ + "f9bc787d-ff05-48ad-90e1-fca1d46130b3", + "com.example.app.MainActivity", + "com.example.shop.ProductDetailFragment", + "MyApp.ProfileView", + "MyApp.ProfileViewController" + ], + "name": "app.screen.id", + "note": "A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of an application screen.", + "examples": [ + "MainActivity", + "ProductDetailFragment", + "ProfileView", + "ProfileViewController" + ], + "name": "app.screen.name", + "note": "A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier that uniquely differentiates this widget from other widgets in the same application.\n", + "examples": [ + "f9bc787d-ff05-48ad-90e1-fca1d46130b3", + "submit_order_1829" + ], + "name": "app.widget.id", + "note": "A widget is an application component, typically an on-screen visual GUI element.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of an application widget.", + "examples": [ + "submit", + "attack", + "Clear Cart" + ], + "name": "app.widget.name", + "note": "A widget is an application component, typically an on-screen visual GUI element.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The x (horizontal) coordinate of a screen coordinate, in screen pixels.", + "examples": [ + 0, + 131 + ], + "name": "app.screen.coordinate.x", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The y (vertical) component of a screen coordinate, in screen pixels.\n", + "examples": [ + 12, + 99 + ], + "name": "app.screen.coordinate.y", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + } + ], + "brief": "This event indicates that an application widget has been clicked.\n", + "id": "event.app.widget.click", + "lineage": { + "attributes": { + "app.screen.coordinate.x": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.screen.coordinate.y": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.screen.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.screen.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.widget.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.widget.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + } + }, + "provenance": { + "path": "/home/weaver/source/app/events.yaml", + "registry_id": "main" + } + }, + "name": "app.widget.click", + "note": "Use this event to indicate that visual application component has been clicked, typically through a user\u0027s manual interaction.\n", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "A number of frame renders that experienced jank.", + "examples": [ + 9, + 42 + ], + "name": "app.jank.frame_count", + "note": "Depending on platform limitations, the value provided MAY be approximation.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The minimum rendering threshold for this jank, in seconds.", + "examples": [ + 0.016, + 0.7, + 1.024 + ], + "name": "app.jank.threshold", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The time period, in seconds, for which this jank is being reported.", + "examples": [ + 1.0, + 5.0, + 10.24 + ], + "name": "app.jank.period", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + } + ], + "brief": "This event indicates that the application has detected substandard UI rendering performance.\n", + "id": "event.app.jank", + "lineage": { + "attributes": { + "app.jank.frame_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.jank.period": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + }, + "app.jank.threshold": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.app" + } + }, + "provenance": { + "path": "/home/weaver/source/app/events.yaml", + "registry_id": "main" + } + }, + "name": "app.jank", + "note": "Jank happens when the UI is rendered slowly enough for the user to experience some disruption or sluggishness.\n", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "The [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) uniquely identifies the event.\n", + "examples": [ + "123e4567-e89b-12d3-a456-426614174000", + "0001" + ], + "name": "cloudevents.event_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) identifies the context in which an event happened.\n", + "examples": [ + "https://github.com/cloudevents", + "/cloudevents/spec/pull/123", + "my-service" + ], + "name": "cloudevents.event_source", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [version of the CloudEvents specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) which the event uses.\n", + "examples": "1.0", + "name": "cloudevents.event_spec_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) contains a value describing the type of event related to the originating occurrence.\n", + "examples": [ + "com.github.pull_request.opened", + "com.example.object.deleted.v2" + ], + "name": "cloudevents.event_type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) of the event in the context of the event producer (identified by source).\n", + "examples": "mynewfile.jpg", + "name": "cloudevents.event_subject", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for CloudEvents.\n", + "display_name": "CloudEvents Attributes", + "id": "registry.cloudevents", + "lineage": { + "provenance": { + "path": "/home/weaver/source/cloudevents/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer address of the database node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "Semantic conventions for individual database systems SHOULD document whether `network.peer.*` attributes are applicable. Network peer address and port are useful when the application interacts with individual database nodes directly.\nIf a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": { + "recommended": "If applicable for this database system." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "The database management system (DBMS) product as identified by the client instrumentation.", + "name": "db.system.name", + "note": "The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Some other SQL database. Fallback only.", + "id": "other_sql", + "stability": "development", + "value": "other_sql" + }, + { + "brief": "[Adabas (Adaptable Database System)](https://documentation.softwareag.com/?pf=adabas)", + "id": "softwareag.adabas", + "stability": "development", + "value": "softwareag.adabas" + }, + { + "brief": "[Actian Ingres](https://www.actian.com/databases/ingres/)", + "id": "actian.ingres", + "stability": "development", + "value": "actian.ingres" + }, + { + "brief": "[Amazon DynamoDB](https://aws.amazon.com/pm/dynamodb/)", + "id": "aws.dynamodb", + "stability": "development", + "value": "aws.dynamodb" + }, + { + "brief": "[Amazon Redshift](https://aws.amazon.com/redshift/)", + "id": "aws.redshift", + "stability": "development", + "value": "aws.redshift" + }, + { + "brief": "[Azure Cosmos DB](https://learn.microsoft.com/azure/cosmos-db)", + "id": "azure.cosmosdb", + "stability": "development", + "value": "azure.cosmosdb" + }, + { + "brief": "[InterSystems Caché](https://www.intersystems.com/products/cache/)", + "id": "intersystems.cache", + "stability": "development", + "value": "intersystems.cache" + }, + { + "brief": "[Apache Cassandra](https://cassandra.apache.org/)", + "id": "cassandra", + "stability": "development", + "value": "cassandra" + }, + { + "brief": "[ClickHouse](https://clickhouse.com/)", + "id": "clickhouse", + "stability": "development", + "value": "clickhouse" + }, + { + "brief": "[CockroachDB](https://www.cockroachlabs.com/)", + "id": "cockroachdb", + "stability": "development", + "value": "cockroachdb" + }, + { + "brief": "[Couchbase](https://www.couchbase.com/)", + "id": "couchbase", + "stability": "development", + "value": "couchbase" + }, + { + "brief": "[Apache CouchDB](https://couchdb.apache.org/)", + "id": "couchdb", + "stability": "development", + "value": "couchdb" + }, + { + "brief": "[Apache Derby](https://db.apache.org/derby/)", + "id": "derby", + "stability": "development", + "value": "derby" + }, + { + "brief": "[Elasticsearch](https://www.elastic.co/elasticsearch)", + "id": "elasticsearch", + "stability": "development", + "value": "elasticsearch" + }, + { + "brief": "[Firebird](https://www.firebirdsql.org/)", + "id": "firebirdsql", + "stability": "development", + "value": "firebirdsql" + }, + { + "brief": "[Google Cloud Spanner](https://cloud.google.com/spanner)", + "id": "gcp.spanner", + "stability": "development", + "value": "gcp.spanner" + }, + { + "brief": "[Apache Geode](https://geode.apache.org/)", + "id": "geode", + "stability": "development", + "value": "geode" + }, + { + "brief": "[H2 Database](https://h2database.com/)", + "id": "h2database", + "stability": "development", + "value": "h2database" + }, + { + "brief": "[Apache HBase](https://hbase.apache.org/)", + "id": "hbase", + "stability": "development", + "value": "hbase" + }, + { + "brief": "[Apache Hive](https://hive.apache.org/)", + "id": "hive", + "stability": "development", + "value": "hive" + }, + { + "brief": "[HyperSQL Database](https://hsqldb.org/)", + "id": "hsqldb", + "stability": "development", + "value": "hsqldb" + }, + { + "brief": "[IBM Db2](https://www.ibm.com/db2)", + "id": "ibm.db2", + "stability": "development", + "value": "ibm.db2" + }, + { + "brief": "[IBM Informix](https://www.ibm.com/products/informix)", + "id": "ibm.informix", + "stability": "development", + "value": "ibm.informix" + }, + { + "brief": "[IBM Netezza](https://www.ibm.com/products/netezza)", + "id": "ibm.netezza", + "stability": "development", + "value": "ibm.netezza" + }, + { + "brief": "[InfluxDB](https://www.influxdata.com/)", + "id": "influxdb", + "stability": "development", + "value": "influxdb" + }, + { + "brief": "[Instant](https://www.instantdb.com/)", + "id": "instantdb", + "stability": "development", + "value": "instantdb" + }, + { + "brief": "[MariaDB](https://mariadb.org/)", + "id": "mariadb", + "stability": "stable", + "value": "mariadb" + }, + { + "brief": "[Memcached](https://memcached.org/)", + "id": "memcached", + "stability": "development", + "value": "memcached" + }, + { + "brief": "[MongoDB](https://www.mongodb.com/)", + "id": "mongodb", + "stability": "development", + "value": "mongodb" + }, + { + "brief": "[Microsoft SQL Server](https://www.microsoft.com/sql-server)", + "id": "microsoft.sql_server", + "stability": "stable", + "value": "microsoft.sql_server" + }, + { + "brief": "[MySQL](https://www.mysql.com/)", + "id": "mysql", + "stability": "stable", + "value": "mysql" + }, + { + "brief": "[Neo4j](https://neo4j.com/)", + "id": "neo4j", + "stability": "development", + "value": "neo4j" + }, + { + "brief": "[OpenSearch](https://opensearch.org/)", + "id": "opensearch", + "stability": "development", + "value": "opensearch" + }, + { + "brief": "[Oracle Database](https://www.oracle.com/database/)", + "id": "oracle.db", + "stability": "development", + "value": "oracle.db" + }, + { + "brief": "[PostgreSQL](https://www.postgresql.org/)", + "id": "postgresql", + "stability": "stable", + "value": "postgresql" + }, + { + "brief": "[Redis](https://redis.io/)", + "id": "redis", + "stability": "development", + "value": "redis" + }, + { + "brief": "[SAP HANA](https://www.sap.com/products/technology-platform/hana/what-is-sap-hana.html)", + "id": "sap.hana", + "stability": "development", + "value": "sap.hana" + }, + { + "brief": "[SAP MaxDB](https://maxdb.sap.com/)", + "id": "sap.maxdb", + "stability": "development", + "value": "sap.maxdb" + }, + { + "brief": "[SQLite](https://www.sqlite.org/)", + "id": "sqlite", + "stability": "development", + "value": "sqlite" + }, + { + "brief": "[Teradata](https://www.teradata.com/)", + "id": "teradata", + "stability": "development", + "value": "teradata" + }, + { + "brief": "[Trino](https://trino.io/)", + "id": "trino", + "stability": "development", + "value": "trino" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Duration of database client operations.", + "id": "metric.db.client.operation.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.system.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.operation.duration", + "note": "Batch operations SHOULD be recorded as a single operation.\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The state of a connection in the pool", + "examples": [ + "idle" + ], + "name": "db.client.connection.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "id": "used", + "stability": "development", + "value": "used" + } + ] + } + }, + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of connections that are currently in state described by the `state` attribute.", + "id": "metric.db.client.connection.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connection.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.client.connection.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connection.count", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The maximum number of idle open connections allowed.", + "id": "metric.db.client.connection.idle.max", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connection.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connection.idle.max", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The minimum number of idle open connections allowed.", + "id": "metric.db.client.connection.idle.min", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connection.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connection.idle.min", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The maximum number of open connections allowed.", + "id": "metric.db.client.connection.max", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connection.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connection.max", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of current pending requests for an open connection.", + "id": "metric.db.client.connection.pending_requests", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connection.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connection.pending_requests", + "stability": "development", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of connection timeouts that have occurred trying to obtain a connection from the pool.", + "id": "metric.db.client.connection.timeouts", + "instrument": "counter", + "lineage": { + "attributes": { + "db.client.connection.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connection.timeouts", + "stability": "development", + "type": "metric", + "unit": "{timeout}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The time it took to create a new connection.", + "id": "metric.db.client.connection.create_time", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.client.connection.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connection.create_time", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The time it took to obtain an open connection from the pool.", + "id": "metric.db.client.connection.wait_time", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.client.connection.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connection.wait_time", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The time between borrowing a connection and returning it to the pool.", + "id": "metric.db.client.connection.use_time", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.client.connection.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connection.use_time", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer address of the database node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "Semantic conventions for individual database systems SHOULD document whether `network.peer.*` attributes are applicable. Network peer address and port are useful when the application interacts with individual database nodes directly.\nIf a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": { + "recommended": "If applicable for this database system." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "The database management system (DBMS) product as identified by the client instrumentation.", + "name": "db.system.name", + "note": "The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Some other SQL database. Fallback only.", + "id": "other_sql", + "stability": "development", + "value": "other_sql" + }, + { + "brief": "[Adabas (Adaptable Database System)](https://documentation.softwareag.com/?pf=adabas)", + "id": "softwareag.adabas", + "stability": "development", + "value": "softwareag.adabas" + }, + { + "brief": "[Actian Ingres](https://www.actian.com/databases/ingres/)", + "id": "actian.ingres", + "stability": "development", + "value": "actian.ingres" + }, + { + "brief": "[Amazon DynamoDB](https://aws.amazon.com/pm/dynamodb/)", + "id": "aws.dynamodb", + "stability": "development", + "value": "aws.dynamodb" + }, + { + "brief": "[Amazon Redshift](https://aws.amazon.com/redshift/)", + "id": "aws.redshift", + "stability": "development", + "value": "aws.redshift" + }, + { + "brief": "[Azure Cosmos DB](https://learn.microsoft.com/azure/cosmos-db)", + "id": "azure.cosmosdb", + "stability": "development", + "value": "azure.cosmosdb" + }, + { + "brief": "[InterSystems Caché](https://www.intersystems.com/products/cache/)", + "id": "intersystems.cache", + "stability": "development", + "value": "intersystems.cache" + }, + { + "brief": "[Apache Cassandra](https://cassandra.apache.org/)", + "id": "cassandra", + "stability": "development", + "value": "cassandra" + }, + { + "brief": "[ClickHouse](https://clickhouse.com/)", + "id": "clickhouse", + "stability": "development", + "value": "clickhouse" + }, + { + "brief": "[CockroachDB](https://www.cockroachlabs.com/)", + "id": "cockroachdb", + "stability": "development", + "value": "cockroachdb" + }, + { + "brief": "[Couchbase](https://www.couchbase.com/)", + "id": "couchbase", + "stability": "development", + "value": "couchbase" + }, + { + "brief": "[Apache CouchDB](https://couchdb.apache.org/)", + "id": "couchdb", + "stability": "development", + "value": "couchdb" + }, + { + "brief": "[Apache Derby](https://db.apache.org/derby/)", + "id": "derby", + "stability": "development", + "value": "derby" + }, + { + "brief": "[Elasticsearch](https://www.elastic.co/elasticsearch)", + "id": "elasticsearch", + "stability": "development", + "value": "elasticsearch" + }, + { + "brief": "[Firebird](https://www.firebirdsql.org/)", + "id": "firebirdsql", + "stability": "development", + "value": "firebirdsql" + }, + { + "brief": "[Google Cloud Spanner](https://cloud.google.com/spanner)", + "id": "gcp.spanner", + "stability": "development", + "value": "gcp.spanner" + }, + { + "brief": "[Apache Geode](https://geode.apache.org/)", + "id": "geode", + "stability": "development", + "value": "geode" + }, + { + "brief": "[H2 Database](https://h2database.com/)", + "id": "h2database", + "stability": "development", + "value": "h2database" + }, + { + "brief": "[Apache HBase](https://hbase.apache.org/)", + "id": "hbase", + "stability": "development", + "value": "hbase" + }, + { + "brief": "[Apache Hive](https://hive.apache.org/)", + "id": "hive", + "stability": "development", + "value": "hive" + }, + { + "brief": "[HyperSQL Database](https://hsqldb.org/)", + "id": "hsqldb", + "stability": "development", + "value": "hsqldb" + }, + { + "brief": "[IBM Db2](https://www.ibm.com/db2)", + "id": "ibm.db2", + "stability": "development", + "value": "ibm.db2" + }, + { + "brief": "[IBM Informix](https://www.ibm.com/products/informix)", + "id": "ibm.informix", + "stability": "development", + "value": "ibm.informix" + }, + { + "brief": "[IBM Netezza](https://www.ibm.com/products/netezza)", + "id": "ibm.netezza", + "stability": "development", + "value": "ibm.netezza" + }, + { + "brief": "[InfluxDB](https://www.influxdata.com/)", + "id": "influxdb", + "stability": "development", + "value": "influxdb" + }, + { + "brief": "[Instant](https://www.instantdb.com/)", + "id": "instantdb", + "stability": "development", + "value": "instantdb" + }, + { + "brief": "[MariaDB](https://mariadb.org/)", + "id": "mariadb", + "stability": "stable", + "value": "mariadb" + }, + { + "brief": "[Memcached](https://memcached.org/)", + "id": "memcached", + "stability": "development", + "value": "memcached" + }, + { + "brief": "[MongoDB](https://www.mongodb.com/)", + "id": "mongodb", + "stability": "development", + "value": "mongodb" + }, + { + "brief": "[Microsoft SQL Server](https://www.microsoft.com/sql-server)", + "id": "microsoft.sql_server", + "stability": "stable", + "value": "microsoft.sql_server" + }, + { + "brief": "[MySQL](https://www.mysql.com/)", + "id": "mysql", + "stability": "stable", + "value": "mysql" + }, + { + "brief": "[Neo4j](https://neo4j.com/)", + "id": "neo4j", + "stability": "development", + "value": "neo4j" + }, + { + "brief": "[OpenSearch](https://opensearch.org/)", + "id": "opensearch", + "stability": "development", + "value": "opensearch" + }, + { + "brief": "[Oracle Database](https://www.oracle.com/database/)", + "id": "oracle.db", + "stability": "development", + "value": "oracle.db" + }, + { + "brief": "[PostgreSQL](https://www.postgresql.org/)", + "id": "postgresql", + "stability": "stable", + "value": "postgresql" + }, + { + "brief": "[Redis](https://redis.io/)", + "id": "redis", + "stability": "development", + "value": "redis" + }, + { + "brief": "[SAP HANA](https://www.sap.com/products/technology-platform/hana/what-is-sap-hana.html)", + "id": "sap.hana", + "stability": "development", + "value": "sap.hana" + }, + { + "brief": "[SAP MaxDB](https://maxdb.sap.com/)", + "id": "sap.maxdb", + "stability": "development", + "value": "sap.maxdb" + }, + { + "brief": "[SQLite](https://www.sqlite.org/)", + "id": "sqlite", + "stability": "development", + "value": "sqlite" + }, + { + "brief": "[Teradata](https://www.teradata.com/)", + "id": "teradata", + "stability": "development", + "value": "teradata" + }, + { + "brief": "[Trino](https://trino.io/)", + "id": "trino", + "stability": "development", + "value": "trino" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "The actual number of records returned by the database operation.", + "id": "metric.db.client.response.returned_rows", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.system.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.response.returned_rows", + "stability": "development", + "type": "metric", + "unit": "{row}" + }, + { + "attributes": [ + { + "brief": "Unique identifier of an end user in the system. It maybe a username, email address, or other identifier.", + "examples": [ + "username" + ], + "name": "enduser.id", + "note": "Unique identifier of an end user in the system.\n\n\u003e [!Warning]\n\u003e This field contains sensitive (PII) information.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Pseudonymous identifier of an end user. This identifier should be a random value that is not directly linked or associated with the end user\u0027s actual identity.\n", + "examples": [ + "QdH5CAWJgqVT4rOr0qtumf" + ], + "name": "enduser.pseudo.id", + "note": "Pseudonymous identifier of an end user.\n\n\u003e [!Warning]\n\u003e This field contains sensitive (linkable PII) information.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes the end user.\n", + "display_name": "End User Attributes", + "id": "registry.enduser", + "lineage": { + "provenance": { + "path": "/home/weaver/source/enduser/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the operation being executed.", + "examples": "findBookById", + "name": "graphql.operation.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the operation being executed.", + "examples": [ + "query", + "mutation", + "subscription" + ], + "name": "graphql.operation.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "GraphQL query", + "id": "query", + "stability": "development", + "value": "query" + }, + { + "brief": "GraphQL mutation", + "id": "mutation", + "stability": "development", + "value": "mutation" + }, + { + "brief": "GraphQL subscription", + "id": "subscription", + "stability": "development", + "value": "subscription" + } + ] + } + }, + { + "brief": "The GraphQL document being executed.", + "examples": "query findBookById { bookById(id: ?) { name } }", + "name": "graphql.document", + "note": "The value may be sanitized to exclude sensitive information.", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for GraphQL.", + "display_name": "GraphQL Attributes", + "id": "registry.graphql", + "lineage": { + "provenance": { + "path": "/home/weaver/source/graphql/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the host. On Unix systems, it may contain what the hostname command returns, or the fully qualified hostname, or another name specified by the user.\n", + "examples": [ + "opentelemetry-test" + ], + "name": "host.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of host. For Cloud, this must be the machine type.\n", + "examples": [ + "n1-standard-1" + ], + "name": "host.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The CPU architecture the host system is running on.\n", + "name": "host.arch", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "AMD64", + "id": "amd64", + "stability": "development", + "value": "amd64" + }, + { + "brief": "ARM32", + "id": "arm32", + "stability": "development", + "value": "arm32" + }, + { + "brief": "ARM64", + "id": "arm64", + "stability": "development", + "value": "arm64" + }, + { + "brief": "Itanium", + "id": "ia64", + "stability": "development", + "value": "ia64" + }, + { + "brief": "32-bit PowerPC", + "id": "ppc32", + "stability": "development", + "value": "ppc32" + }, + { + "brief": "64-bit PowerPC", + "id": "ppc64", + "stability": "development", + "value": "ppc64" + }, + { + "brief": "IBM z/Architecture", + "id": "s390x", + "stability": "development", + "value": "s390x" + }, + { + "brief": "32-bit x86", + "id": "x86", + "stability": "development", + "value": "x86" + } + ] + } + }, + { + "brief": "Name of the VM image or OS install the host was instantiated from.\n", + "examples": [ + "infra-ami-eks-worker-node-7d4ec78312", + "CentOS-8-x86_64-1905" + ], + "name": "host.image.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "VM image ID or host OS image ID. For Cloud, this value is from the provider.\n", + "examples": [ + "ami-07b06b442921831e5" + ], + "name": "host.image.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version string of the VM image or host OS as defined in [Version Attributes](/docs/resource/README.md#version-attributes).\n", + "examples": [ + "0.1" + ], + "name": "host.image.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider. For non-containerized systems, this should be the `machine-id`. See the table below for the sources to use to determine the `machine-id` based on operating system.\n", + "examples": [ + "fdbf79e8af94cb7f9e8df36789187052" + ], + "name": "host.id", + "note": "Collecting `host.id` from non-containerized systems\n\n**Non-privileged Machine ID Lookup**\n\nWhen collecting `host.id` for non-containerized systems non-privileged lookups\nof the machine id are preferred. SDK detector implementations MUST use the\nsources listed below to obtain the machine id.\n\n| OS | Primary | Fallback |\n|---------|---------|---------|\n| Linux | contents of `/etc/machine-id` | contents of `/var/lib/dbus/machine-id` |\n| BSD | contents of `/etc/hostid` | output of `kenv -q smbios.system.uuid` |\n| MacOS | `IOPlatformUUID` line from the output of `ioreg -rd1 -c \"IOPlatformExpertDevice\"` | - |\n| Windows | `MachineGuid` from registry `HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Cryptography` | - |\n\n**Privileged Machine ID Lookup**\n\nThe `host.id` can be looked up using privileged sources. For example, Linux\nsystems can use the output of `dmidecode -t system`, `dmidecode -t baseboard`,\n`dmidecode -t chassis`, or read the corresponding data from the filesystem\n(e.g. `cat /sys/devices/virtual/dmi/id/product_id`,\n`cat /sys/devices/virtual/dmi/id/product_uuid`, etc), however, SDK resource\ndetector implementations MUST not collect `host.id` from privileged sources. If\nprivileged lookup of `host.id` is required, the value should be injected via the\n`OTEL_RESOURCE_ATTRIBUTES` environment variable.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Available IP addresses of the host, excluding loopback interfaces.\n", + "examples": [ + [ + "192.168.1.140", + "fe80::abc2:4a28:737a:609e" + ] + ], + "name": "host.ip", + "note": "IPv4 Addresses MUST be specified in dotted-quad notation. IPv6 addresses MUST be specified in the [RFC 5952](https://www.rfc-editor.org/rfc/rfc5952.html) format.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Available MAC addresses of the host, excluding loopback interfaces.\n", + "examples": [ + [ + "AC-DE-48-23-45-67", + "AC-DE-48-23-45-67-01-9F" + ] + ], + "name": "host.mac", + "note": "MAC Addresses MUST be represented in [IEEE RA hexadecimal form](https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf): as hyphen-separated octets in uppercase hexadecimal form from most to least significant.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string[]" + } + ], + "brief": "A host is defined as a computing instance. For example, physical servers, virtual machines, switches or disk array.\n", + "id": "entity.host", + "lineage": { + "attributes": { + "host.arch": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.host" + }, + "host.id": { + "inherited_fields": [ + "brief", + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "note" + ], + "source_group": "registry.host" + }, + "host.image.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.host" + }, + "host.image.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.host" + }, + "host.image.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.host" + }, + "host.ip": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.host" + }, + "host.mac": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.host" + }, + "host.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.host" + }, + "host.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.host" + } + }, + "provenance": { + "path": "/home/weaver/source/host/entities.yaml", + "registry_id": "main" + } + }, + "name": "host", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Processor manufacturer identifier. A maximum 12-character string.\n", + "examples": [ + "GenuineIntel" + ], + "name": "host.cpu.vendor.id", + "note": "[CPUID](https://wiki.osdev.org/CPUID) command returns the vendor ID string in EBX, EDX and ECX registers. Writing these to memory in this order results in a 12-character string.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "Family or generation of the CPU.\n", + "examples": [ + "6", + "PA-RISC 1.1e" + ], + "name": "host.cpu.family", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "Model identifier. It provides more granular information about the CPU, distinguishing it from other CPUs within the same family.\n", + "examples": [ + "6", + "9000/778/B180L" + ], + "name": "host.cpu.model.id", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "Model designation of the processor.\n", + "examples": [ + "11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz" + ], + "name": "host.cpu.model.name", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "Stepping or core revisions.\n", + "examples": [ + "1", + "r1p1" + ], + "name": "host.cpu.stepping", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The amount of level 2 memory cache available to the processor (in Bytes).\n", + "examples": [ + 12288000 + ], + "name": "host.cpu.cache.l2.size", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + } + ], + "brief": "A host\u0027s CPU information\n", + "id": "entity.host.cpu", + "lineage": { + "attributes": { + "host.cpu.cache.l2.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.host" + }, + "host.cpu.family": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.host" + }, + "host.cpu.model.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.host" + }, + "host.cpu.model.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.host" + }, + "host.cpu.stepping": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.host" + }, + "host.cpu.vendor.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.host" + } + }, + "provenance": { + "path": "/home/weaver/source/host/entities.yaml", + "registry_id": "main" + } + }, + "name": "host.cpu", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the cluster.\n", + "examples": [ + "opentelemetry-cluster" + ], + "name": "k8s.cluster.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A pseudo-ID for the cluster, set to the UID of the `kube-system` namespace.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "k8s.cluster.uid", + "note": "K8s doesn\u0027t have support for obtaining a cluster ID. If this is ever\nadded, we will recommend collecting the `k8s.cluster.uid` through the\nofficial APIs. In the meantime, we are able to use the `uid` of the\n`kube-system` namespace as a proxy for cluster ID. Read on for the\nrationale.\n\nEvery object created in a K8s cluster is assigned a distinct UID. The\n`kube-system` namespace is used by Kubernetes itself and will exist\nfor the lifetime of the cluster. Using the `uid` of the `kube-system`\nnamespace is a reasonable proxy for the K8s ClusterID as it will only\nchange if the cluster is rebuilt. Furthermore, Kubernetes UIDs are\nUUIDs as standardized by\n[ISO/IEC 9834-8 and ITU-T X.667](https://www.itu.int/ITU-T/studygroups/com17/oid.html).\nWhich states:\n\n\u003e If generated according to one of the mechanisms defined in Rec.\n\u003e ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be\n\u003e different from all other UUIDs generated before 3603 A.D., or is\n\u003e extremely likely to be different (depending on the mechanism chosen).\n\nTherefore, UIDs between clusters should be extremely unlikely to\nconflict.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A Kubernetes Cluster.\n", + "id": "entity.k8s.cluster", + "lineage": { + "attributes": { + "k8s.cluster.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.cluster.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.cluster", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the Node.\n", + "examples": [ + "node-1" + ], + "name": "k8s.node.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The UID of the Node.\n", + "examples": [ + "1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2" + ], + "name": "k8s.node.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Node, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "arm64", + "" + ], + "name": "k8s.node.label", + "note": "Examples:\n\n- A label `kubernetes.io/arch` with value `arm64` SHOULD be recorded\n as the `k8s.node.label.kubernetes.io/arch` attribute with value `\"arm64\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.node.label.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Node, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "0", + "" + ], + "name": "k8s.node.annotation", + "note": "Examples:\n\n- An annotation `node.alpha.kubernetes.io/ttl` with value `0` SHOULD be recorded as\n the `k8s.node.annotation.node.alpha.kubernetes.io/ttl` attribute with value `\"0\"`.\n- An annotation `data` with empty string value SHOULD be recorded as\n the `k8s.node.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "A Kubernetes Node object.\n", + "id": "entity.k8s.node", + "lineage": { + "attributes": { + "k8s.node.annotation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.node.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.node.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.node.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.node", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the namespace that the pod is running in.\n", + "examples": [ + "default" + ], + "name": "k8s.namespace.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Namespace, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "default", + "" + ], + "name": "k8s.namespace.label", + "note": "\nExamples:\n\n- A label `kubernetes.io/metadata.name` with value `default` SHOULD be recorded\n as the `k8s.namespace.label.kubernetes.io/metadata.name` attribute with value `\"default\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.namespace.label.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Namespace, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "0", + "" + ], + "name": "k8s.namespace.annotation", + "note": "\nExamples:\n\n- A label `ttl` with value `0` SHOULD be recorded\n as the `k8s.namespace.annotation.ttl` attribute with value `\"0\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.namespace.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "A Kubernetes Namespace.\n", + "id": "entity.k8s.namespace", + "lineage": { + "attributes": { + "k8s.namespace.annotation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.namespace.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.namespace.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.namespace", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the Pod.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.pod.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Pod.\n", + "examples": [ + "opentelemetry-pod-autoconf" + ], + "name": "k8s.pod.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Pod, the `\u003ckey\u003e` being the label name, the value being the label value.\n", + "examples": [ + "my-app", + "x64", + "" + ], + "name": "k8s.pod.label", + "note": "Examples:\n\n- A label `app` with value `my-app` SHOULD be recorded as\n the `k8s.pod.label.app` attribute with value `\"my-app\"`.\n- A label `mycompany.io/arch` with value `x64` SHOULD be recorded as\n the `k8s.pod.label.mycompany.io/arch` attribute with value `\"x64\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.pod.label.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Pod, the `\u003ckey\u003e` being the annotation name, the value being the annotation value.\n", + "examples": [ + "true", + "x64", + "" + ], + "name": "k8s.pod.annotation", + "note": "Examples:\n\n- An annotation `kubernetes.io/enforce-mountable-secrets` with value `true` SHOULD be recorded as\n the `k8s.pod.annotation.kubernetes.io/enforce-mountable-secrets` attribute with value `\"true\"`.\n- An annotation `mycompany.io/arch` with value `x64` SHOULD be recorded as\n the `k8s.pod.annotation.mycompany.io/arch` attribute with value `\"x64\"`.\n- An annotation `data` with empty string value SHOULD be recorded as\n the `k8s.pod.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "A Kubernetes Pod object.\n", + "id": "entity.k8s.pod", + "lineage": { + "attributes": { + "k8s.pod.annotation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.pod.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.pod.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.pod.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.pod", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the Container from Pod specification, must be unique within a Pod. Container runtime usually uses different globally unique name (`container.name`).\n", + "examples": [ + "redis" + ], + "name": "k8s.container.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Number of times the container was restarted. This attribute can be used to identify a particular container (running or stopped) within a container spec.\n", + "name": "k8s.container.restart_count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Last terminated reason of the Container.\n", + "examples": [ + "Evicted", + "Error" + ], + "name": "k8s.container.status.last_terminated_reason", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A container in a [PodTemplate](https://kubernetes.io/docs/concepts/workloads/pods/#pod-templates).\n", + "id": "entity.k8s.container", + "lineage": { + "attributes": { + "k8s.container.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.container.restart_count": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.container.status.last_terminated_reason": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.container", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the ReplicaSet.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.replicaset.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the ReplicaSet.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.replicaset.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the ReplicaSet, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "guestbook", + "" + ], + "name": "k8s.replicaset.label", + "note": "\nExamples:\n\n- A label `app` with value `guestbook` SHOULD be recorded\n as the `k8s.replicaset.label.app` attribute with value `\"guestbook\"`.\n- A label `injected` with empty string value SHOULD be recorded as\n the `k8s.replicaset.label.injected` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the ReplicaSet, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "0", + "" + ], + "name": "k8s.replicaset.annotation", + "note": "\nExamples:\n\n- A label `replicas` with value `0` SHOULD be recorded\n as the `k8s.replicaset.annotation.replicas` attribute with value `\"0\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.replicaset.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "A Kubernetes ReplicaSet object.\n", + "id": "entity.k8s.replicaset", + "lineage": { + "attributes": { + "k8s.replicaset.annotation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.replicaset.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.replicaset.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.replicaset.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.replicaset", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the Deployment.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.deployment.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Deployment.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.deployment.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Deployment, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "guestbook", + "" + ], + "name": "k8s.deployment.label", + "note": "\nExamples:\n\n- A label `replicas` with value `0` SHOULD be recorded\n as the `k8s.deployment.label.app` attribute with value `\"guestbook\"`.\n- A label `injected` with empty string value SHOULD be recorded as\n the `k8s.deployment.label.injected` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Deployment, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "1", + "" + ], + "name": "k8s.deployment.annotation", + "note": "\nExamples:\n\n- A label `replicas` with value `1` SHOULD be recorded\n as the `k8s.deployment.annotation.replicas` attribute with value `\"1\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.deployment.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "A Kubernetes Deployment object.\n", + "id": "entity.k8s.deployment", + "lineage": { + "attributes": { + "k8s.deployment.annotation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.deployment.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.deployment.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.deployment.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.deployment", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the StatefulSet.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.statefulset.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the StatefulSet.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.statefulset.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the StatefulSet, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "guestbook", + "" + ], + "name": "k8s.statefulset.label", + "note": "\nExamples:\n\n- A label `replicas` with value `0` SHOULD be recorded\n as the `k8s.statefulset.label.app` attribute with value `\"guestbook\"`.\n- A label `injected` with empty string value SHOULD be recorded as\n the `k8s.statefulset.label.injected` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the StatefulSet, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "1", + "" + ], + "name": "k8s.statefulset.annotation", + "note": "\nExamples:\n\n- A label `replicas` with value `1` SHOULD be recorded\n as the `k8s.statefulset.annotation.replicas` attribute with value `\"1\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.statefulset.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "A Kubernetes StatefulSet object.\n", + "id": "entity.k8s.statefulset", + "lineage": { + "attributes": { + "k8s.statefulset.annotation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.statefulset.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.statefulset.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.statefulset.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.statefulset", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the DaemonSet.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.daemonset.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the DaemonSet.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.daemonset.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the DaemonSet, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "guestbook", + "" + ], + "name": "k8s.daemonset.label", + "note": "\nExamples:\n\n- A label `app` with value `guestbook` SHOULD be recorded\n as the `k8s.daemonset.label.app` attribute with value `\"guestbook\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.daemonset.label.injected` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the DaemonSet, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "1", + "" + ], + "name": "k8s.daemonset.annotation", + "note": "\nExamples:\n\n- A label `replicas` with value `1` SHOULD be recorded\n as the `k8s.daemonset.annotation.replicas` attribute with value `\"1\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.daemonset.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "A Kubernetes DaemonSet object.\n", + "id": "entity.k8s.daemonset", + "lineage": { + "attributes": { + "k8s.daemonset.annotation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.daemonset.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.daemonset.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.daemonset.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.daemonset", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the Job.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.job.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Job.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.job.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Job, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "ci", + "" + ], + "name": "k8s.job.label", + "note": "\nExamples:\n\n- A label `jobtype` with value `ci` SHOULD be recorded\n as the `k8s.job.label.jobtype` attribute with value `\"ci\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.job.label.automated` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Job, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "1", + "" + ], + "name": "k8s.job.annotation", + "note": "\nExamples:\n\n- A label `number` with value `1` SHOULD be recorded\n as the `k8s.job.annotation.number` attribute with value `\"1\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.job.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "A Kubernetes Job object.\n", + "id": "entity.k8s.job", + "lineage": { + "attributes": { + "k8s.job.annotation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.job.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.job.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.job.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.job", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the CronJob.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.cronjob.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the CronJob.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.cronjob.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the CronJob, the `\u003ckey\u003e` being the label name, the value being the label value.\n", + "examples": [ + "weekly", + "" + ], + "name": "k8s.cronjob.label", + "note": "Examples:\n\n- A label `type` with value `weekly` SHOULD be recorded as the\n `k8s.cronjob.label.type` attribute with value `\"weekly\"`.\n- A label `automated` with empty string value SHOULD be recorded as\n the `k8s.cronjob.label.automated` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The cronjob annotation placed on the CronJob, the `\u003ckey\u003e` being the annotation name, the value being the annotation value.\n", + "examples": [ + "4", + "" + ], + "name": "k8s.cronjob.annotation", + "note": "Examples:\n\n- An annotation `retries` with value `4` SHOULD be recorded as the\n `k8s.cronjob.annotation.retries` attribute with value `\"4\"`.\n- An annotation `data` with empty string value SHOULD be recorded as\n the `k8s.cronjob.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "A Kubernetes CronJob object.\n", + "id": "entity.k8s.cronjob", + "lineage": { + "attributes": { + "k8s.cronjob.annotation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.cronjob.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.cronjob.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.cronjob.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.cronjob", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the replication controller.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.replicationcontroller.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the replication controller.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.replicationcontroller.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A Kubernetes ReplicationController object.\n", + "id": "entity.k8s.replicationcontroller", + "lineage": { + "attributes": { + "k8s.replicationcontroller.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.replicationcontroller.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.replicationcontroller", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the horizontal pod autoscaler.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.hpa.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the horizontal pod autoscaler.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.hpa.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The kind of the target resource to scale for the HorizontalPodAutoscaler.\n", + "examples": [ + "Deployment", + "StatefulSet" + ], + "name": "k8s.hpa.scaletargetref.kind", + "note": "This maps to the `kind` field in the `scaleTargetRef` of the HPA spec.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the target resource to scale for the HorizontalPodAutoscaler.\n", + "examples": [ + "my-deployment", + "my-statefulset" + ], + "name": "k8s.hpa.scaletargetref.name", + "note": "This maps to the `name` field in the `scaleTargetRef` of the HPA spec.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The API version of the target resource to scale for the HorizontalPodAutoscaler.\n", + "examples": [ + "apps/v1", + "autoscaling/v2" + ], + "name": "k8s.hpa.scaletargetref.api_version", + "note": "This maps to the `apiVersion` field in the `scaleTargetRef` of the HPA spec.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A Kubernetes HorizontalPodAutoscaler object.\n", + "id": "entity.k8s.hpa", + "lineage": { + "attributes": { + "k8s.hpa.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.hpa.scaletargetref.api_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.hpa.scaletargetref.kind": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.hpa.scaletargetref.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.hpa.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.hpa", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID of the resource quota.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.resourcequota.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the resource quota.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.resourcequota.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A Kubernetes ResourceQuota object.\n", + "id": "entity.k8s.resourcequota", + "lineage": { + "attributes": { + "k8s.resourcequota.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + }, + "k8s.resourcequota.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/entities.yaml", + "registry_id": "main" + } + }, + "name": "k8s.resourcequota", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Reports the count of kernel NFS client TCP segments and UDP datagrams handled.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.client.net.count", + "instrument": "counter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.client.net.count", + "note": "Linux: this metric is taken from the Linux kernel\u0027s svc_stat.netudpcnt and svc_stat.nettcpcnt\n", + "stability": "development", + "type": "metric", + "unit": "{record}" + }, + { + "brief": "Reports the count of kernel NFS client TCP connections accepted.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.client.net.tcp.connection.accepted", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.client.net.tcp.connection.accepted", + "note": "Linux: this metric is taken from the Linux kernel\u0027s svc_stat.nettcpconn\n", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "brief": "Reports the count of kernel NFS client RPCs sent, regardless of whether they\u0027re accepted/rejected by the server.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.client.rpc.count", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.client.rpc.count", + "note": "Linux: this metric is taken from the Linux kernel\u0027s svc_stat.rpccnt\n", + "stability": "development", + "type": "metric", + "unit": "{request}" + }, + { + "brief": "Reports the count of kernel NFS client RPC retransmits.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.client.rpc.retransmit.count", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.client.rpc.retransmit.count", + "note": "Linux: this metric is taken from the Linux kernel\u0027s svc_stat.rpcretrans\n", + "stability": "development", + "type": "metric", + "unit": "{retransmit}" + }, + { + "brief": "Reports the count of kernel NFS client RPC authentication refreshes.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.client.rpc.authrefresh.count", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.client.rpc.authrefresh.count", + "note": "Linux: this metric is taken from the Linux kernel\u0027s svc_stat.rpcauthrefresh\n", + "stability": "development", + "type": "metric", + "unit": "{authrefresh}" + }, + { + "attributes": [ + { + "brief": "ONC/Sun RPC program version.", + "name": "onc_rpc.version", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "NFSv4+ operation name.", + "examples": [ + "OPEN", + "READ", + "GETATTR" + ], + "name": "nfs.operation.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Reports the count of kernel NFSv4+ client operations.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.client.operation.count", + "instrument": "counter", + "lineage": { + "attributes": { + "nfs.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.nfs" + }, + "onc_rpc.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.onc_rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.client.operation.count", + "stability": "development", + "type": "metric", + "unit": "{operation}" + }, + { + "attributes": [ + { + "brief": "ONC/Sun RPC program version.", + "name": "onc_rpc.version", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "ONC/Sun RPC procedure name.", + "examples": [ + "OPEN", + "READ", + "GETATTR" + ], + "name": "onc_rpc.procedure.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Reports the count of kernel NFS client procedures.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.client.procedure.count", + "instrument": "counter", + "lineage": { + "attributes": { + "onc_rpc.procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.onc_rpc" + }, + "onc_rpc.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.onc_rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.client.procedure.count", + "stability": "development", + "type": "metric", + "unit": "{procedure}" + }, + { + "attributes": [ + { + "brief": "Linux: one of \"hit\" (NFSD_STATS_RC_HITS), \"miss\" (NFSD_STATS_RC_MISSES), or \"nocache\" (NFSD_STATS_RC_NOCACHE -- uncacheable)\n", + "examples": "hit", + "name": "nfs.server.repcache.status", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Reports the kernel NFS server reply cache request count by cache hit status.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.server.repcache.requests", + "instrument": "counter", + "lineage": { + "attributes": { + "nfs.server.repcache.status": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.nfs" + } + }, + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.server.repcache.requests", + "stability": "development", + "type": "metric", + "unit": "{request}" + }, + { + "brief": "Reports the count of kernel NFS server stale file handles.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.server.fh.stale.count", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.server.fh.stale.count", + "note": "Linux: this metric is taken from the Linux kernel NFSD_STATS_FH_STALE counter in the nfsd_net struct\n", + "stability": "development", + "type": "metric", + "unit": "{fh}" + }, + { + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + } + ], + "brief": "Reports the count of kernel NFS server bytes returned to receive and transmit (read and write) requests.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.server.io", + "instrument": "counter", + "lineage": { + "attributes": { + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.server.io", + "note": "Linux: this metric is taken from the Linux kernel NFSD_STATS_IO_READ and NFSD_STATS_IO_WRITE counters in the nfsd_net struct\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "brief": "Reports the count of kernel NFS server available threads.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.server.thread.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.server.thread.count", + "note": "Linux: this metric is taken from the Linux kernel nfsd_th_cnt variable\n", + "stability": "development", + "type": "metric", + "unit": "{thread}" + }, + { + "attributes": [ + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Reports the count of kernel NFS server TCP segments and UDP datagrams handled.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.server.net.count", + "instrument": "counter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.server.net.count", + "note": "Linux: this metric is taken from the Linux kernel\u0027s svc_stat.nettcpcnt and svc_stat.netudpcnt\n", + "stability": "development", + "type": "metric", + "unit": "{record}" + }, + { + "brief": "Reports the count of kernel NFS server TCP connections accepted.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.server.net.tcp.connection.accepted", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.server.net.tcp.connection.accepted", + "note": "Linux: this metric is taken from the Linux kernel\u0027s svc_stat.nettcpconn\n", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Reports the count of kernel NFS server RPCs handled.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.server.rpc.count", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.server.rpc.count", + "note": "Linux: this metric is taken from the Linux kernel\u0027s svc_stat.rpccnt, the count of good RPCs. This metric can have\nan error.type of \"format\", \"auth\", or \"client\" for svc_stat.badfmt, svc_stat.badauth, and svc_stat.badclnt.\n", + "stability": "development", + "type": "metric", + "unit": "{request}" + }, + { + "attributes": [ + { + "brief": "ONC/Sun RPC program version.", + "name": "onc_rpc.version", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "NFSv4+ operation name.", + "examples": [ + "OPEN", + "READ", + "GETATTR" + ], + "name": "nfs.operation.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Reports the count of kernel NFSv4+ server operations.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.server.operation.count", + "instrument": "counter", + "lineage": { + "attributes": { + "nfs.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.nfs" + }, + "onc_rpc.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.onc_rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.server.operation.count", + "stability": "development", + "type": "metric", + "unit": "{operation}" + }, + { + "attributes": [ + { + "brief": "ONC/Sun RPC program version.", + "name": "onc_rpc.version", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "ONC/Sun RPC procedure name.", + "examples": [ + "OPEN", + "READ", + "GETATTR" + ], + "name": "onc_rpc.procedure.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Reports the count of kernel NFS server procedures.", + "entity_associations": [ + "host" + ], + "id": "metric.nfs.server.procedure.count", + "instrument": "counter", + "lineage": { + "attributes": { + "onc_rpc.procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.onc_rpc" + }, + "onc_rpc.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.onc_rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/nfs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nfs.server.procedure.count", + "stability": "development", + "type": "metric", + "unit": "{procedure}" + }, + { + "attributes": [ + { + "brief": "The [`service.name`](/docs/resource/README.md#service) of the remote service. SHOULD be equal to the actual `service.name` resource attribute of the remote service if any.\n", + "examples": "AuthTokenCache", + "name": "peer.service", + "note": "Examples of `peer.service` that users may specify:\n\n- A Redis cache of auth tokens as `peer.service=\"AuthTokenCache\"`.\n- A gRPC service `rpc.service=\"io.opentelemetry.AuthService\"` may be hosted in both a gateway, `peer.service=\"ExternalApiService\"` and a backend, `peer.service=\"AuthService\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "These attribute may be used for any operation that accesses some remote service.\n", + "display_name": "Peer Attributes", + "id": "registry.peer", + "lineage": { + "provenance": { + "path": "/home/weaver/source/peer/registry.yaml", + "registry_id": "main" + } + }, + "note": "Users can define what the name of a service is based on their particular semantics in their distributed system. Instrumentations SHOULD provide a way for users to configure this name.\n", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The state of network connection", + "examples": [ + "close_wait" + ], + "name": "network.connection.state", + "note": "Connection states are defined as part of the [rfc9293](https://datatracker.ietf.org/doc/html/rfc9293#section-3.3.2)", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "closed", + "stability": "development", + "value": "closed" + }, + { + "id": "close_wait", + "stability": "development", + "value": "close_wait" + }, + { + "id": "closing", + "stability": "development", + "value": "closing" + }, + { + "id": "established", + "stability": "development", + "value": "established" + }, + { + "id": "fin_wait_1", + "stability": "development", + "value": "fin_wait_1" + }, + { + "id": "fin_wait_2", + "stability": "development", + "value": "fin_wait_2" + }, + { + "id": "last_ack", + "stability": "development", + "value": "last_ack" + }, + { + "id": "listen", + "stability": "development", + "value": "listen" + }, + { + "id": "syn_received", + "stability": "development", + "value": "syn_received" + }, + { + "id": "syn_sent", + "stability": "development", + "value": "syn_sent" + }, + { + "id": "time_wait", + "stability": "development", + "value": "time_wait" + } + ] + } + } + ], + "brief": "Deprecated, use `system.network.connection.count` instead.", + "deprecated": { + "note": "Replaced by `system.network.connection.count`.", + "reason": "renamed", + "renamed_to": "system.network.connection.count" + }, + "entity_associations": [ + "host" + ], + "id": "metric.system.network.connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.connection.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/system/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.network.connections", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Count of packets that are dropped or discarded even though there was no error.", + "deprecated": { + "note": "Replaced by `system.network.packet.dropped`.", + "reason": "renamed", + "renamed_to": "system.network.packet.dropped" + }, + "entity_associations": [ + "host" + ], + "id": "metric.system.network.dropped", + "instrument": "counter", + "lineage": { + "attributes": { + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/system/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.network.dropped", + "note": "Measured as:\n\n- Linux: the `drop` column in `/proc/dev/net` ([source](https://web.archive.org/web/20180321091318/http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html))\n- Windows: [`InDiscards`/`OutDiscards`](https://docs.microsoft.com/windows/win32/api/netioapi/ns-netioapi-mib_if_row2)\n from [`GetIfEntry2`](https://docs.microsoft.com/windows/win32/api/netioapi/nf-netioapi-getifentry2)\n", + "stability": "development", + "type": "metric", + "unit": "{packet}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of packets transferred.", + "deprecated": { + "note": "Replaced by `system.network.packet.count`.", + "reason": "renamed", + "renamed_to": "system.network.packet.count" + }, + "entity_associations": [ + "host" + ], + "id": "metric.system.network.packets", + "instrument": "counter", + "lineage": { + "attributes": { + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "system.device": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system" + } + }, + "provenance": { + "path": "/home/weaver/source/system/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.network.packets", + "stability": "development", + "type": "metric", + "unit": "{packet}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The type of garbage collection.", + "name": "v8js.gc.type", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Major (Mark Sweep Compact).", + "id": "major", + "stability": "development", + "value": "major" + }, + { + "brief": "Minor (Scavenge).", + "id": "minor", + "stability": "development", + "value": "minor" + }, + { + "brief": "Incremental (Incremental Marking).", + "id": "incremental", + "stability": "development", + "value": "incremental" + }, + { + "brief": "Weak Callbacks (Process Weak Callbacks).", + "id": "weakcb", + "stability": "development", + "value": "weakcb" + } + ] + } + } + ], + "brief": "Garbage collection duration.", + "id": "metric.v8js.gc.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "v8js.gc.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.v8js" + } + }, + "provenance": { + "path": "/home/weaver/source/v8js/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "v8js.gc.duration", + "note": "The values can be retrieved from [`perf_hooks.PerformanceObserver(...).observe({ entryTypes: [\u0027gc\u0027] })`](https://nodejs.org/api/perf_hooks.html#performanceobserverobserveoptions)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the space type of heap memory.", + "name": "v8js.heap.space.name", + "note": "Value can be retrieved from value `space_name` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "New memory space.", + "id": "new_space", + "stability": "development", + "value": "new_space" + }, + { + "brief": "Old memory space.", + "id": "old_space", + "stability": "development", + "value": "old_space" + }, + { + "brief": "Code memory space.", + "id": "code_space", + "stability": "development", + "value": "code_space" + }, + { + "brief": "Map memory space.", + "id": "map_space", + "stability": "development", + "value": "map_space" + }, + { + "brief": "Large object memory space.", + "id": "large_object_space", + "stability": "development", + "value": "large_object_space" + } + ] + } + } + ], + "brief": "Total heap memory size pre-allocated.", + "id": "metric.v8js.memory.heap.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "v8js.heap.space.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.v8js" + } + }, + "provenance": { + "path": "/home/weaver/source/v8js/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "v8js.memory.heap.limit", + "note": "The value can be retrieved from value `space_size` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the space type of heap memory.", + "name": "v8js.heap.space.name", + "note": "Value can be retrieved from value `space_name` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "New memory space.", + "id": "new_space", + "stability": "development", + "value": "new_space" + }, + { + "brief": "Old memory space.", + "id": "old_space", + "stability": "development", + "value": "old_space" + }, + { + "brief": "Code memory space.", + "id": "code_space", + "stability": "development", + "value": "code_space" + }, + { + "brief": "Map memory space.", + "id": "map_space", + "stability": "development", + "value": "map_space" + }, + { + "brief": "Large object memory space.", + "id": "large_object_space", + "stability": "development", + "value": "large_object_space" + } + ] + } + } + ], + "brief": "Heap Memory size allocated.", + "id": "metric.v8js.memory.heap.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "v8js.heap.space.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.v8js" + } + }, + "provenance": { + "path": "/home/weaver/source/v8js/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "v8js.memory.heap.used", + "note": "The value can be retrieved from value `space_used_size` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the space type of heap memory.", + "name": "v8js.heap.space.name", + "note": "Value can be retrieved from value `space_name` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "New memory space.", + "id": "new_space", + "stability": "development", + "value": "new_space" + }, + { + "brief": "Old memory space.", + "id": "old_space", + "stability": "development", + "value": "old_space" + }, + { + "brief": "Code memory space.", + "id": "code_space", + "stability": "development", + "value": "code_space" + }, + { + "brief": "Map memory space.", + "id": "map_space", + "stability": "development", + "value": "map_space" + }, + { + "brief": "Large object memory space.", + "id": "large_object_space", + "stability": "development", + "value": "large_object_space" + } + ] + } + } + ], + "brief": "Heap space available size.", + "id": "metric.v8js.memory.heap.space.available_size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "v8js.heap.space.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.v8js" + } + }, + "provenance": { + "path": "/home/weaver/source/v8js/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "v8js.memory.heap.space.available_size", + "note": "Value can be retrieved from value `space_available_size` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the space type of heap memory.", + "name": "v8js.heap.space.name", + "note": "Value can be retrieved from value `space_name` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "New memory space.", + "id": "new_space", + "stability": "development", + "value": "new_space" + }, + { + "brief": "Old memory space.", + "id": "old_space", + "stability": "development", + "value": "old_space" + }, + { + "brief": "Code memory space.", + "id": "code_space", + "stability": "development", + "value": "code_space" + }, + { + "brief": "Map memory space.", + "id": "map_space", + "stability": "development", + "value": "map_space" + }, + { + "brief": "Large object memory space.", + "id": "large_object_space", + "stability": "development", + "value": "large_object_space" + } + ] + } + } + ], + "brief": "Committed size of a heap space.", + "id": "metric.v8js.memory.heap.space.physical_size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "v8js.heap.space.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.v8js" + } + }, + "provenance": { + "path": "/home/weaver/source/v8js/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "v8js.memory.heap.space.physical_size", + "note": "Value can be retrieved from value `physical_space_size` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `azure.service.request.id` instead.", + "deprecated": { + "note": "Replaced by `azure.service.request.id`.", + "reason": "renamed", + "renamed_to": "azure.service.request.id" + }, + "examples": [ + "00000000-0000-0000-0000-000000000000" + ], + "name": "az.service_request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `azure.resource_provider.namespace` instead.\n", + "deprecated": { + "note": "Replaced by `azure.resource_provider.namespace`.", + "reason": "renamed", + "renamed_to": "azure.resource_provider.namespace" + }, + "examples": [ + "Microsoft.Storage", + "Microsoft.KeyVault", + "Microsoft.ServiceBus" + ], + "name": "az.namespace", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This section describes deprecated Azure attributes.\n", + "display_name": "Deprecated Azure Attributes", + "id": "registry.azure.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/azure/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Value of the garbage collector collection generation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "cpython.gc.generation", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "generation_0", + "stability": "development", + "value": 0 + }, + { + "brief": "Generation 1", + "id": "generation_1", + "stability": "development", + "value": 1 + }, + { + "brief": "Generation 2", + "id": "generation_2", + "stability": "development", + "value": 2 + } + ] + } + } + ], + "brief": "This document defines CPython related attributes.\n", + "display_name": "CPython attributes", + "id": "registry.cpython", + "lineage": { + "provenance": { + "path": "/home/weaver/source/cpython/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name being queried.", + "examples": [ + "www.example.com", + "opentelemetry.io" + ], + "name": "dns.question.name", + "note": "The name represents the queried domain name as it appears in the DNS query without any additional normalization.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The list of IPv4 or IPv6 addresses resolved during DNS lookup.", + "examples": [ + [ + "10.0.0.1", + "2001:0db8:85a3:0000:0000:8a2e:0370:7334" + ] + ], + "name": "dns.answers", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This document defines the shared attributes used to report a DNS query.\n", + "display_name": "DNS Attributes", + "id": "registry.dns", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dns/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Measures the duration of the function\u0027s logic execution.", + "id": "metric.faas.invoke_duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "faas.invoke_duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Measures the duration of the function\u0027s initialization, such as a cold start.", + "id": "metric.faas.init_duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "faas.init_duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Number of invocation cold starts.", + "id": "metric.faas.coldstarts", + "instrument": "counter", + "lineage": { + "attributes": { + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "faas.coldstarts", + "stability": "development", + "type": "metric", + "unit": "{coldstart}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Number of invocation errors.", + "id": "metric.faas.errors", + "instrument": "counter", + "lineage": { + "attributes": { + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "faas.errors", + "stability": "development", + "type": "metric", + "unit": "{error}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Number of successful invocations.", + "id": "metric.faas.invocations", + "instrument": "counter", + "lineage": { + "attributes": { + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "faas.invocations", + "stability": "development", + "type": "metric", + "unit": "{invocation}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Number of invocation timeouts.", + "id": "metric.faas.timeouts", + "instrument": "counter", + "lineage": { + "attributes": { + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "faas.timeouts", + "stability": "development", + "type": "metric", + "unit": "{timeout}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Distribution of max memory usage per invocation.", + "id": "metric.faas.mem_usage", + "instrument": "histogram", + "lineage": { + "attributes": { + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "faas.mem_usage", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Distribution of CPU usage per invocation.", + "id": "metric.faas.cpu_usage", + "instrument": "histogram", + "lineage": { + "attributes": { + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "faas.cpu_usage", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Distribution of net I/O usage per invocation.", + "id": "metric.faas.net_io", + "instrument": "histogram", + "lineage": { + "attributes": { + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "faas.net_io", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "other", + "stack" + ], + "name": "go.memory.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Memory allocated from the heap that is reserved for stack space, whether or not it is currently in-use.", + "id": "stack", + "note": "Computed from `/memory/classes/heap/stacks:bytes`.\n", + "stability": "development", + "value": "stack" + }, + { + "brief": "Memory used by the Go runtime, excluding other categories of memory usage described in this enumeration.", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "Memory used by the Go runtime.", + "id": "metric.go.memory.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "go.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.go" + } + }, + "provenance": { + "path": "/home/weaver/source/go/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "go.memory.used", + "note": "Computed from `(/memory/classes/total:bytes - /memory/classes/heap/released:bytes)`.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Go runtime memory limit configured by the user, if a limit exists.", + "id": "metric.go.memory.limit", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/go/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "go.memory.limit", + "note": "Computed from `/gc/gomemlimit:bytes`. This metric is excluded if the limit obtained from the Go runtime is math.MaxInt64.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Memory allocated to the heap by the application.", + "id": "metric.go.memory.allocated", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/go/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "go.memory.allocated", + "note": "Computed from `/gc/heap/allocs:bytes`.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Count of allocations to the heap by the application.", + "id": "metric.go.memory.allocations", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/go/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "go.memory.allocations", + "note": "Computed from `/gc/heap/allocs:objects`.\n", + "stability": "development", + "type": "metric", + "unit": "{allocation}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Heap size target for the end of the GC cycle.", + "id": "metric.go.memory.gc.goal", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/go/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "go.memory.gc.goal", + "note": "Computed from `/gc/heap/goal:bytes`.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Count of live goroutines.", + "id": "metric.go.goroutine.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/go/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "go.goroutine.count", + "note": "Computed from `/sched/goroutines:goroutines`.\n", + "stability": "development", + "type": "metric", + "unit": "{goroutine}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of OS threads that can execute user-level Go code simultaneously.", + "id": "metric.go.processor.limit", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/go/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "go.processor.limit", + "note": "Computed from `/sched/gomaxprocs:threads`.\n", + "stability": "development", + "type": "metric", + "unit": "{thread}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The time goroutines have spent in the scheduler in a runnable state before actually running.", + "id": "metric.go.schedule.duration", + "instrument": "histogram", + "lineage": { + "provenance": { + "path": "/home/weaver/source/go/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "go.schedule.duration", + "note": "Computed from `/sched/latencies:seconds`. Bucket boundaries are provided by the runtime, and are subject to change.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Heap size target percentage configured by the user, otherwise 100.", + "id": "metric.go.config.gogc", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/go/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "go.config.gogc", + "note": "The value range is [0.0,100.0]. Computed from `/gc/gogc:percent`.\n", + "stability": "development", + "type": "metric", + "unit": "%" + }, + { + "attributes": [ + { + "brief": "Time and date the release was created\n", + "examples": [ + "2022-10-23T18:00:42Z" + ], + "name": "heroku.release.creation_timestamp", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Commit hash for the current release\n", + "examples": [ + "e6134959463efd8966b20e75b913cafe3f5ec" + ], + "name": "heroku.release.commit", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier for the application\n", + "examples": [ + "2daa2797-e42b-4624-9322-ec3f968df4da" + ], + "name": "heroku.app.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for the Heroku platform on which application/s are running.\n", + "display_name": "Heroku Attributes", + "id": "registry.heroku", + "lineage": { + "provenance": { + "path": "/home/weaver/source/heroku/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "if and only if `messaging.destination.name` is known to have low cardinality. Otherwise, `messaging.destination.template` MAY be populated." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Low cardinality representation of the messaging destination name", + "examples": [ + "/customers/{customerId}" + ], + "name": "messaging.destination.template", + "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", + "requirement_level": { + "conditionally_required": "if available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The messaging system as identified by the client instrumentation.", + "name": "messaging.system", + "note": "The actual messaging system may differ from the one known by the client. For example, when using Kafka client libraries to communicate with Azure Event Hubs, the `messaging.system` is set to `kafka` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Apache ActiveMQ", + "id": "activemq", + "stability": "development", + "value": "activemq" + }, + { + "brief": "Amazon Simple Notification Service (SNS)", + "id": "aws.sns", + "stability": "development", + "value": "aws.sns" + }, + { + "brief": "Amazon Simple Queue Service (SQS)", + "id": "aws_sqs", + "stability": "development", + "value": "aws_sqs" + }, + { + "brief": "Azure Event Grid", + "id": "eventgrid", + "stability": "development", + "value": "eventgrid" + }, + { + "brief": "Azure Event Hubs", + "id": "eventhubs", + "stability": "development", + "value": "eventhubs" + }, + { + "brief": "Azure Service Bus", + "id": "servicebus", + "stability": "development", + "value": "servicebus" + }, + { + "brief": "Google Cloud Pub/Sub", + "id": "gcp_pubsub", + "stability": "development", + "value": "gcp_pubsub" + }, + { + "brief": "Java Message Service", + "id": "jms", + "stability": "development", + "value": "jms" + }, + { + "brief": "Apache Kafka", + "id": "kafka", + "stability": "development", + "value": "kafka" + }, + { + "brief": "RabbitMQ", + "id": "rabbitmq", + "stability": "development", + "value": "rabbitmq" + }, + { + "brief": "Apache RocketMQ", + "id": "rocketmq", + "stability": "development", + "value": "rocketmq" + }, + { + "brief": "Apache Pulsar", + "id": "pulsar", + "stability": "development", + "value": "pulsar" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Common messaging metrics attributes.", + "id": "metric.messaging.attributes", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/metrics.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "if and only if `messaging.destination.name` is known to have low cardinality. Otherwise, `messaging.destination.template` MAY be populated." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Low cardinality representation of the messaging destination name", + "examples": [ + "/customers/{customerId}" + ], + "name": "messaging.destination.template", + "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", + "requirement_level": { + "conditionally_required": "if available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The messaging system as identified by the client instrumentation.", + "name": "messaging.system", + "note": "The actual messaging system may differ from the one known by the client. For example, when using Kafka client libraries to communicate with Azure Event Hubs, the `messaging.system` is set to `kafka` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Apache ActiveMQ", + "id": "activemq", + "stability": "development", + "value": "activemq" + }, + { + "brief": "Amazon Simple Notification Service (SNS)", + "id": "aws.sns", + "stability": "development", + "value": "aws.sns" + }, + { + "brief": "Amazon Simple Queue Service (SQS)", + "id": "aws_sqs", + "stability": "development", + "value": "aws_sqs" + }, + { + "brief": "Azure Event Grid", + "id": "eventgrid", + "stability": "development", + "value": "eventgrid" + }, + { + "brief": "Azure Event Hubs", + "id": "eventhubs", + "stability": "development", + "value": "eventhubs" + }, + { + "brief": "Azure Service Bus", + "id": "servicebus", + "stability": "development", + "value": "servicebus" + }, + { + "brief": "Google Cloud Pub/Sub", + "id": "gcp_pubsub", + "stability": "development", + "value": "gcp_pubsub" + }, + { + "brief": "Java Message Service", + "id": "jms", + "stability": "development", + "value": "jms" + }, + { + "brief": "Apache Kafka", + "id": "kafka", + "stability": "development", + "value": "kafka" + }, + { + "brief": "RabbitMQ", + "id": "rabbitmq", + "stability": "development", + "value": "rabbitmq" + }, + { + "brief": "Apache RocketMQ", + "id": "rocketmq", + "stability": "development", + "value": "rocketmq" + }, + { + "brief": "Apache Pulsar", + "id": "pulsar", + "stability": "development", + "value": "pulsar" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the consumer group with which a consumer is associated.\n", + "examples": [ + "my-group", + "indexer" + ], + "name": "messaging.consumer.group.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.consumer.group.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the destination subscription from which a message is consumed.", + "examples": [ + "subscription-a" + ], + "name": "messaging.destination.subscription.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.destination.subscription.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Messaging consumer metrics attributes.", + "id": "metric.messaging.consumer.attributes", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/metrics.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "if and only if `messaging.destination.name` is known to have low cardinality. Otherwise, `messaging.destination.template` MAY be populated." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Low cardinality representation of the messaging destination name", + "examples": [ + "/customers/{customerId}" + ], + "name": "messaging.destination.template", + "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", + "requirement_level": { + "conditionally_required": "if available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The messaging system as identified by the client instrumentation.", + "name": "messaging.system", + "note": "The actual messaging system may differ from the one known by the client. For example, when using Kafka client libraries to communicate with Azure Event Hubs, the `messaging.system` is set to `kafka` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Apache ActiveMQ", + "id": "activemq", + "stability": "development", + "value": "activemq" + }, + { + "brief": "Amazon Simple Notification Service (SNS)", + "id": "aws.sns", + "stability": "development", + "value": "aws.sns" + }, + { + "brief": "Amazon Simple Queue Service (SQS)", + "id": "aws_sqs", + "stability": "development", + "value": "aws_sqs" + }, + { + "brief": "Azure Event Grid", + "id": "eventgrid", + "stability": "development", + "value": "eventgrid" + }, + { + "brief": "Azure Event Hubs", + "id": "eventhubs", + "stability": "development", + "value": "eventhubs" + }, + { + "brief": "Azure Service Bus", + "id": "servicebus", + "stability": "development", + "value": "servicebus" + }, + { + "brief": "Google Cloud Pub/Sub", + "id": "gcp_pubsub", + "stability": "development", + "value": "gcp_pubsub" + }, + { + "brief": "Java Message Service", + "id": "jms", + "stability": "development", + "value": "jms" + }, + { + "brief": "Apache Kafka", + "id": "kafka", + "stability": "development", + "value": "kafka" + }, + { + "brief": "RabbitMQ", + "id": "rabbitmq", + "stability": "development", + "value": "rabbitmq" + }, + { + "brief": "Apache RocketMQ", + "id": "rocketmq", + "stability": "development", + "value": "rocketmq" + }, + { + "brief": "Apache Pulsar", + "id": "pulsar", + "stability": "development", + "value": "pulsar" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the consumer group with which a consumer is associated.\n", + "examples": [ + "my-group", + "indexer" + ], + "name": "messaging.consumer.group.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.consumer.group.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the destination subscription from which a message is consumed.", + "examples": [ + "subscription-a" + ], + "name": "messaging.destination.subscription.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.destination.subscription.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "send", + "receive", + "ack" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + } + ], + "brief": "Duration of messaging operation initiated by a producer or consumer client.", + "id": "metric.messaging.client.operation.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.client.operation.duration", + "note": "This metric SHOULD NOT be used to report processing duration - processing duration is reported in `messaging.process.duration` metric.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "if and only if `messaging.destination.name` is known to have low cardinality. Otherwise, `messaging.destination.template` MAY be populated." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Low cardinality representation of the messaging destination name", + "examples": [ + "/customers/{customerId}" + ], + "name": "messaging.destination.template", + "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", + "requirement_level": { + "conditionally_required": "if available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The messaging system as identified by the client instrumentation.", + "name": "messaging.system", + "note": "The actual messaging system may differ from the one known by the client. For example, when using Kafka client libraries to communicate with Azure Event Hubs, the `messaging.system` is set to `kafka` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Apache ActiveMQ", + "id": "activemq", + "stability": "development", + "value": "activemq" + }, + { + "brief": "Amazon Simple Notification Service (SNS)", + "id": "aws.sns", + "stability": "development", + "value": "aws.sns" + }, + { + "brief": "Amazon Simple Queue Service (SQS)", + "id": "aws_sqs", + "stability": "development", + "value": "aws_sqs" + }, + { + "brief": "Azure Event Grid", + "id": "eventgrid", + "stability": "development", + "value": "eventgrid" + }, + { + "brief": "Azure Event Hubs", + "id": "eventhubs", + "stability": "development", + "value": "eventhubs" + }, + { + "brief": "Azure Service Bus", + "id": "servicebus", + "stability": "development", + "value": "servicebus" + }, + { + "brief": "Google Cloud Pub/Sub", + "id": "gcp_pubsub", + "stability": "development", + "value": "gcp_pubsub" + }, + { + "brief": "Java Message Service", + "id": "jms", + "stability": "development", + "value": "jms" + }, + { + "brief": "Apache Kafka", + "id": "kafka", + "stability": "development", + "value": "kafka" + }, + { + "brief": "RabbitMQ", + "id": "rabbitmq", + "stability": "development", + "value": "rabbitmq" + }, + { + "brief": "Apache RocketMQ", + "id": "rocketmq", + "stability": "development", + "value": "rocketmq" + }, + { + "brief": "Apache Pulsar", + "id": "pulsar", + "stability": "development", + "value": "pulsar" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the consumer group with which a consumer is associated.\n", + "examples": [ + "my-group", + "indexer" + ], + "name": "messaging.consumer.group.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.consumer.group.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the destination subscription from which a message is consumed.", + "examples": [ + "subscription-a" + ], + "name": "messaging.destination.subscription.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.destination.subscription.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "process", + "consume", + "handle" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Duration of processing operation.", + "id": "metric.messaging.process.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.process.duration", + "note": "This metric MUST be reported for operations with `messaging.operation.type` that matches `process`.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "if and only if `messaging.destination.name` is known to have low cardinality. Otherwise, `messaging.destination.template` MAY be populated." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Low cardinality representation of the messaging destination name", + "examples": [ + "/customers/{customerId}" + ], + "name": "messaging.destination.template", + "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", + "requirement_level": { + "conditionally_required": "if available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The messaging system as identified by the client instrumentation.", + "name": "messaging.system", + "note": "The actual messaging system may differ from the one known by the client. For example, when using Kafka client libraries to communicate with Azure Event Hubs, the `messaging.system` is set to `kafka` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Apache ActiveMQ", + "id": "activemq", + "stability": "development", + "value": "activemq" + }, + { + "brief": "Amazon Simple Notification Service (SNS)", + "id": "aws.sns", + "stability": "development", + "value": "aws.sns" + }, + { + "brief": "Amazon Simple Queue Service (SQS)", + "id": "aws_sqs", + "stability": "development", + "value": "aws_sqs" + }, + { + "brief": "Azure Event Grid", + "id": "eventgrid", + "stability": "development", + "value": "eventgrid" + }, + { + "brief": "Azure Event Hubs", + "id": "eventhubs", + "stability": "development", + "value": "eventhubs" + }, + { + "brief": "Azure Service Bus", + "id": "servicebus", + "stability": "development", + "value": "servicebus" + }, + { + "brief": "Google Cloud Pub/Sub", + "id": "gcp_pubsub", + "stability": "development", + "value": "gcp_pubsub" + }, + { + "brief": "Java Message Service", + "id": "jms", + "stability": "development", + "value": "jms" + }, + { + "brief": "Apache Kafka", + "id": "kafka", + "stability": "development", + "value": "kafka" + }, + { + "brief": "RabbitMQ", + "id": "rabbitmq", + "stability": "development", + "value": "rabbitmq" + }, + { + "brief": "Apache RocketMQ", + "id": "rocketmq", + "stability": "development", + "value": "rocketmq" + }, + { + "brief": "Apache Pulsar", + "id": "pulsar", + "stability": "development", + "value": "pulsar" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "send", + "schedule", + "enqueue" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Number of messages producer attempted to send to the broker.", + "id": "metric.messaging.client.sent.messages", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.client.sent.messages", + "note": "This metric MUST NOT count messages that were created but haven\u0027t yet been sent.\n", + "stability": "development", + "type": "metric", + "unit": "{message}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "if and only if `messaging.destination.name` is known to have low cardinality. Otherwise, `messaging.destination.template` MAY be populated." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Low cardinality representation of the messaging destination name", + "examples": [ + "/customers/{customerId}" + ], + "name": "messaging.destination.template", + "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", + "requirement_level": { + "conditionally_required": "if available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The messaging system as identified by the client instrumentation.", + "name": "messaging.system", + "note": "The actual messaging system may differ from the one known by the client. For example, when using Kafka client libraries to communicate with Azure Event Hubs, the `messaging.system` is set to `kafka` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Apache ActiveMQ", + "id": "activemq", + "stability": "development", + "value": "activemq" + }, + { + "brief": "Amazon Simple Notification Service (SNS)", + "id": "aws.sns", + "stability": "development", + "value": "aws.sns" + }, + { + "brief": "Amazon Simple Queue Service (SQS)", + "id": "aws_sqs", + "stability": "development", + "value": "aws_sqs" + }, + { + "brief": "Azure Event Grid", + "id": "eventgrid", + "stability": "development", + "value": "eventgrid" + }, + { + "brief": "Azure Event Hubs", + "id": "eventhubs", + "stability": "development", + "value": "eventhubs" + }, + { + "brief": "Azure Service Bus", + "id": "servicebus", + "stability": "development", + "value": "servicebus" + }, + { + "brief": "Google Cloud Pub/Sub", + "id": "gcp_pubsub", + "stability": "development", + "value": "gcp_pubsub" + }, + { + "brief": "Java Message Service", + "id": "jms", + "stability": "development", + "value": "jms" + }, + { + "brief": "Apache Kafka", + "id": "kafka", + "stability": "development", + "value": "kafka" + }, + { + "brief": "RabbitMQ", + "id": "rabbitmq", + "stability": "development", + "value": "rabbitmq" + }, + { + "brief": "Apache RocketMQ", + "id": "rocketmq", + "stability": "development", + "value": "rocketmq" + }, + { + "brief": "Apache Pulsar", + "id": "pulsar", + "stability": "development", + "value": "pulsar" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the consumer group with which a consumer is associated.\n", + "examples": [ + "my-group", + "indexer" + ], + "name": "messaging.consumer.group.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.consumer.group.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the destination subscription from which a message is consumed.", + "examples": [ + "subscription-a" + ], + "name": "messaging.destination.subscription.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.destination.subscription.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "receive", + "peek", + "poll", + "consume" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Number of messages that were delivered to the application.", + "id": "metric.messaging.client.consumed.messages", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.client.consumed.messages", + "note": "Records the number of messages pulled from the broker or number of messages dispatched to the application in push-based scenarios.\nThe metric SHOULD be reported once per message delivery. For example, if receiving and processing operations are both instrumented for a single message delivery, this counter is incremented when the message is received and not reported when it is processed.\n", + "stability": "development", + "type": "metric", + "unit": "{message}" + }, + { + "attributes": [ + { + "brief": "Human readable (not intended to be parsed) OS version information, like e.g. reported by `ver` or `lsb_release -a` commands.\n", + "examples": [ + "Microsoft Windows [Version 10.0.18363.778]", + "Ubuntu 18.04.1 LTS" + ], + "name": "os.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Human readable operating system name.", + "examples": [ + "iOS", + "Android", + "Ubuntu" + ], + "name": "os.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version string of the operating system as defined in [Version Attributes](/docs/resource/README.md#version-attributes).\n", + "examples": [ + "14.2.1", + "18.04.1" + ], + "name": "os.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The operating system type.\n", + "name": "os.type", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Microsoft Windows", + "id": "windows", + "stability": "development", + "value": "windows" + }, + { + "brief": "Linux", + "id": "linux", + "stability": "development", + "value": "linux" + }, + { + "brief": "Apple Darwin", + "id": "darwin", + "stability": "development", + "value": "darwin" + }, + { + "brief": "FreeBSD", + "id": "freebsd", + "stability": "development", + "value": "freebsd" + }, + { + "brief": "NetBSD", + "id": "netbsd", + "stability": "development", + "value": "netbsd" + }, + { + "brief": "OpenBSD", + "id": "openbsd", + "stability": "development", + "value": "openbsd" + }, + { + "brief": "DragonFly BSD", + "id": "dragonflybsd", + "stability": "development", + "value": "dragonflybsd" + }, + { + "brief": "HP-UX (Hewlett Packard Unix)", + "id": "hpux", + "stability": "development", + "value": "hpux" + }, + { + "brief": "AIX (Advanced Interactive eXecutive)", + "id": "aix", + "stability": "development", + "value": "aix" + }, + { + "brief": "SunOS, Oracle Solaris", + "id": "solaris", + "stability": "development", + "value": "solaris" + }, + { + "brief": "Deprecated. Use `zos` instead.", + "deprecated": { + "note": "Replaced by `zos`.", + "reason": "renamed", + "renamed_to": "zos" + }, + "id": "z_os", + "stability": "development", + "value": "z_os" + }, + { + "brief": "IBM z/OS", + "id": "zos", + "stability": "development", + "value": "zos" + } + ] + } + }, + { + "brief": "Unique identifier for a particular build or compilation of the operating system.", + "examples": [ + "TQ3C.230805.001.B2", + "20E247", + "22621" + ], + "name": "os.build_id", + "note": "`build_id` values SHOULD be obtained from the following sources:\n\n| OS | Primary | Fallback |\n| ------- | ------- | ------- |\n| Windows | `CurrentBuildNumber` from registry `HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion` | - |\n| MacOS | `ProductBuildVersion` from `/System/Library/CoreServices/SystemVersion.plist` | `ProductBuildVersion` from `/System/Library/CoreServices/ServerVersion.plist` |\n| Linux | `BUILD_ID` from `/etc/os-release` | `BUILD_ID` from `/usr/lib/os-release`; \u003cbr\u003e contents of `/proc/sys/kernel/osrelease`|\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The operating system (OS) on which the process represented by this resource is running.\n", + "id": "entity.os", + "lineage": { + "attributes": { + "os.build_id": { + "inherited_fields": [ + "brief", + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "note" + ], + "source_group": "registry.os" + }, + "os.description": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.os" + }, + "os.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.os" + }, + "os.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.os" + }, + "os.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.os" + } + }, + "provenance": { + "path": "/home/weaver/source/os/entities.yaml", + "registry_id": "main" + } + }, + "name": "os", + "note": "In case of virtualized environments, this is the operating system as it is observed by the process, i.e., the virtualized guest rather than the underlying host.\n", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The ID of the new session being started.", + "examples": "00112233-4455-6677-8899-aabbccddeeff", + "name": "session.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The previous `session.id` for this user, when known.", + "examples": "00112233-4455-6677-8899-aabbccddeeff", + "name": "session.previous_id", + "requirement_level": { + "conditionally_required": "If the new session is being created as a continuation of a previous session, the `session.previous_id` SHOULD be included in the event. The `session.id` and `session.previous_id` attributes MUST have different values.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Indicates that a new session has been started, optionally linking to the prior session.\n", + "id": "event.session.start", + "lineage": { + "attributes": { + "session.id": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.session" + }, + "session.previous_id": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.session" + } + }, + "provenance": { + "path": "/home/weaver/source/session/events.yaml", + "registry_id": "main" + } + }, + "name": "session.start", + "note": "For instrumentation that tracks user behavior during user sessions, a `session.start` event MUST be emitted every time a session is created. When a new session is created as a continuation of a prior session, the `session.previous_id` SHOULD be included in the event. The values of `session.id` and `session.previous_id` MUST be different.\nWhen the `session.start` event contains both `session.id` and `session.previous_id` fields, the event indicates that the previous session has ended. If the session ID in `session.previous_id` has not yet ended via explicit `session.end` event, then the consumer SHOULD treat this continuation event as semantically equivalent to `session.end(session.previous_id)` and `session.start(session.id)`.\n", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "The ID of the session being ended.", + "examples": "00112233-4455-6677-8899-aabbccddeeff", + "name": "session.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Indicates that a session has ended.\n", + "id": "event.session.end", + "lineage": { + "attributes": { + "session.id": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.session" + } + }, + "provenance": { + "path": "/home/weaver/source/session/events.yaml", + "registry_id": "main" + } + }, + "name": "session.end", + "note": "For instrumentation that tracks user behavior during user sessions, a `session.end` event SHOULD be emitted every time a session ends. When a session ends and continues as a new session, this event SHOULD be emitted prior to the `session.start` event.\n", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "The full invoked ARN as provided on the `Context` passed to the function (`Lambda-Runtime-Invoked-Function-Arn` header on the `/runtime/invocation/next` applicable).\n", + "examples": [ + "arn:aws:lambda:us-east-1:123456:function:myfunction:myalias" + ], + "name": "aws.lambda.invoked_arn", + "note": "This may be different from `cloud.resource_id` if an alias is involved.", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The UUID of the [AWS Lambda EvenSource Mapping](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html). An event source is mapped to a lambda function. It\u0027s contents are read by Lambda and used to trigger a function. This isn\u0027t available in the lambda execution context or the lambda runtime environtment. This is going to be populated by the AWS SDK for each language when that UUID is present. Some of these operations are Create/Delete/Get/List/Update EventSourceMapping.\n", + "examples": [ + "587ad24b-03b9-4413-8202-bbd56b36e5b7" + ], + "name": "aws.lambda.resource_mapping.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents AWS Lambda invocation.\n", + "id": "span.aws.lambda.server", + "lineage": { + "attributes": { + "aws.lambda.invoked_arn": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.lambda" + }, + "aws.lambda.resource_mapping.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.lambda" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/lambda-spans.yaml", + "registry_id": "main" + } + }, + "note": "Consider setting other attributes of the [`faas` resource][faasres] and [trace][faas] conventions\nand the [cloud resource conventions][cloud].\n\n**Span name** MUST be set to the function name from the Lambda `Context`\nunless stated otherwise.\n\n**Span kind** MUST be `SERVER` unless stated otherwise.\n", + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`.\n", + "examples": [ + "/usr/bin/cmd/otelcol" + ], + "name": "process.executable.path", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`. SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data.\n", + "examples": [ + [ + "cmd/otecol", + "--config=config.yaml" + ] + ], + "name": "process.command_args", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The name of the process executable. On Linux based systems, this SHOULD be set to the base name of the target of `/proc/[pid]/exe`. On Windows, this SHOULD be set to the base name of `GetProcessImageFileNameW`.\n", + "examples": [ + "otelcol" + ], + "name": "process.executable.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Process identifier (PID).\n", + "examples": [ + 1234 + ], + "name": "process.pid", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "The exit code of the process.\n", + "examples": [ + 127 + ], + "name": "process.exit.code", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "if and only if process.exit.code is not 0" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Common CLI attributes.\n", + "id": "attributes.cli.common", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "process.command_args": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.executable.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.executable.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.exit.code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.pid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + } + }, + "provenance": { + "path": "/home/weaver/source/cli/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`.\n", + "examples": [ + "/usr/bin/cmd/otelcol" + ], + "name": "process.executable.path", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`. SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data.\n", + "examples": [ + [ + "cmd/otecol", + "--config=config.yaml" + ] + ], + "name": "process.command_args", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The name of the process executable. On Linux based systems, this SHOULD be set to the base name of the target of `/proc/[pid]/exe`. On Windows, this SHOULD be set to the base name of `GetProcessImageFileNameW`.\n", + "examples": [ + "otelcol" + ], + "name": "process.executable.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Process identifier (PID).\n", + "examples": [ + 1234 + ], + "name": "process.pid", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "The exit code of the process.\n", + "examples": [ + 127 + ], + "name": "process.exit.code", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "if and only if process.exit.code is not 0" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "This span describes CLI (Command Line Interfaces) program execution from a callee perspective.\n", + "id": "span.cli.internal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "process.command_args": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.executable.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.executable.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.exit.code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.pid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + } + }, + "provenance": { + "path": "/home/weaver/source/cli/spans.yaml", + "registry_id": "main" + } + }, + "note": "**Span name** SHOULD be set to {process.executable.name}.\nInstrumentations that have additional context about executed commands MAY use\na different low-cardinality span name format and SHOULD document it.\n\n**Span status** SHOULD follow the [Recording Errors](/docs/general/recording-errors.md) document.\nAn Error is defined as when the `{process.exit.code}` attribute is not 0.\n", + "span_kind": "internal", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`.\n", + "examples": [ + "/usr/bin/cmd/otelcol" + ], + "name": "process.executable.path", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`. SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data.\n", + "examples": [ + [ + "cmd/otecol", + "--config=config.yaml" + ] + ], + "name": "process.command_args", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The name of the process executable. On Linux based systems, this SHOULD be set to the base name of the target of `/proc/[pid]/exe`. On Windows, this SHOULD be set to the base name of `GetProcessImageFileNameW`.\n", + "examples": [ + "otelcol" + ], + "name": "process.executable.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Process identifier (PID).\n", + "examples": [ + 1234 + ], + "name": "process.pid", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "The exit code of the process.\n", + "examples": [ + 127 + ], + "name": "process.exit.code", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "if and only if process.exit.code is not 0" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "This span describes CLI (Command Line Interfaces) program execution from a caller perspective.\n", + "id": "span.cli.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "process.command_args": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.executable.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.executable.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.exit.code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.pid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + } + }, + "provenance": { + "path": "/home/weaver/source/cli/spans.yaml", + "registry_id": "main" + } + }, + "note": "**Span name** SHOULD be set to {process.executable.name}.\nInstrumentations that have additional context about executed commands MAY use\na different low-cardinality span name format and SHOULD document it.\n\n**Span status** SHOULD follow the [Recording Errors](/docs/general/recording-errors.md) document.\nAn Error is defined as when the `{process.exit.code}` attribute is not 0.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "A unique identifier representing the device\n", + "examples": [ + "123456789012345", + "01:23:45:67:89:AB" + ], + "name": "device.id", + "note": "Its value SHOULD be identical for all apps on a device and it SHOULD NOT change if an app is uninstalled and re-installed.\nHowever, it might be resettable by the user for all apps on a device.\nHardware IDs (e.g. vendor-specific serial number, IMEI or MAC address) MAY be used as values.\n\nMore information about Android identifier best practices can be found in the [Android user data IDs guide](https://developer.android.com/training/articles/user-data-ids).\n\n\u003e [!WARNING]\n\u003e\n\u003e This attribute may contain sensitive (PII) information. Caution should be taken when storing personal data or anything which can identify a user. GDPR and data protection laws may apply,\n\u003e ensure you do your own due diligence.\n\u003e\n\u003e Due to these reasons, this identifier is not recommended for consumer applications and will likely result in rejection from both Google Play and App Store.\n\u003e However, it may be appropriate for specific enterprise scenarios, such as kiosk devices or enterprise-managed devices, with appropriate compliance clearance.\n\u003e Any instrumentation providing this identifier MUST implement it as an opt-in feature.\n\u003e\n\u003e See [`app.installation.id`](/docs/registry/attributes/app.md#app-installation-id) for a more privacy-preserving alternative.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the device manufacturer\n", + "examples": [ + "Apple", + "Samsung" + ], + "name": "device.manufacturer", + "note": "The Android OS provides this field via [Build](https://developer.android.com/reference/android/os/Build#MANUFACTURER). iOS apps SHOULD hardcode the value `Apple`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The model identifier for the device\n", + "examples": [ + "iPhone3,4", + "SM-G920F" + ], + "name": "device.model.identifier", + "note": "It\u0027s recommended this value represents a machine-readable version of the model identifier rather than the market or consumer-friendly name of the device.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The marketing name for the device model\n", + "examples": [ + "iPhone 6s Plus", + "Samsung Galaxy S6" + ], + "name": "device.model.name", + "note": "It\u0027s recommended this value represents a human-readable version of the device model rather than a machine-readable alternative.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes device attributes.\n", + "display_name": "Device Attributes", + "id": "registry.device", + "lineage": { + "provenance": { + "path": "/home/weaver/source/device/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Indicates that the exception is escaping the scope of the span.\n", + "deprecated": { + "note": "It\u0027s no longer recommended to record exceptions that are handled and do not escape the scope of a span.\n", + "reason": "obsoleted" + }, + "name": "exception.escaped", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + }, + { + "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)\n", + "name": "exception.stacktrace", + "requirement_level": "recommended", + "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": { + "conditionally_required": "Required if `exception.message` is not set, recommended otherwise." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The exception message.", + "examples": [ + "Division by zero", + "Can\u0027t convert \u0027int\u0027 object to str implicitly" + ], + "name": "exception.message", + "requirement_level": { + "conditionally_required": "Required if `exception.type` is not set, recommended otherwise." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "This event describes a single exception.\n", + "id": "event.exception", + "lineage": { + "attributes": { + "exception.escaped": { + "inherited_fields": [ + "brief", + "deprecated", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.exception.deprecated" + }, + "exception.message": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.exception" + }, + "exception.stacktrace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.exception" + }, + "exception.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.exception" + } + }, + "provenance": { + "path": "/home/weaver/source/exceptions/events.yaml", + "registry_id": "main" + } + }, + "name": "exception", + "stability": "stable", + "type": "event" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The maximum number of tokens the model generates for a request.", + "examples": [ + 100 + ], + "name": "gen_ai.request.max_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The temperature setting for the GenAI request.", + "examples": [ + 0.0 + ], + "name": "gen_ai.request.temperature", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_p sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_p", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "List of sequences that the model will use to stop generating further tokens.", + "examples": [ + [ + "forest", + "lived" + ] + ], + "name": "gen_ai.request.stop_sequences", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The frequency penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.frequency_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The presence penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.presence_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of reasons the model stopped generating tokens, corresponding to each generation received.", + "examples": [ + [ + "stop" + ], + [ + "stop", + "length" + ] + ], + "name": "gen_ai.response.finish_reasons", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of tokens used in the GenAI input (prompt).", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of tokens used in the GenAI response (completion).", + "examples": [ + 180 + ], + "name": "gen_ai.usage.output_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.", + "examples": [ + "conv_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.conversation.id", + "note": "Instrumentations SHOULD populate conversation id when they have it readily available\nfor a given operation, for example:\n\n- when client framework being instrumented manages conversation history\n(see [LlamaIndex chat store](https://docs.llamaindex.ai/en/stable/module_guides/storing/chat_stores/))\n\n- when instrumenting GenAI client libraries that maintain conversation on the backend side\n(see [AWS Bedrock agent sessions](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html),\n[OpenAI Assistant threads](https://platform.openai.com/docs/api-reference/threads))\n\nApplication developers that manage conversation history MAY add conversation id to GenAI and other\nspans or logs using custom span or log record processors or hooks provided by instrumentation\nlibraries.\n", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The chat history provided to the model as an input.\n", + "examples": [ + "[\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n },\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n },\n {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy, 57°F\"\n }\n ]\n }\n]\n" + ], + "name": "gen_ai.input.messages", + "note": "Instrumentations MUST follow [Input messages JSON schema](/docs/gen-ai/gen-ai-input-messages.json).\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nMessages MUST be provided in the order they were sent to the model.\nInstrumentations MAY provide a way for users to filter or truncate\ninput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "Messages returned by the model where each message represents a specific model response (choice, candidate).", + "examples": [ + "[\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n }\n]\n" + ], + "name": "gen_ai.output.messages", + "note": "Instrumentations MUST follow [Output messages JSON schema](/docs/gen-ai/gen-ai-output-messages.json)\n\nEach message represents a single output choice/candidate generated by\nthe model. Each message corresponds to exactly one generation\n(choice/candidate) and vice versa - one choice cannot be split across\nmultiple messages or one message cannot contain parts from multiple choices.\n\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\noutput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "Represents the content type requested by the client.", + "name": "gen_ai.output.type", + "note": "This attribute SHOULD be used when the client requests output of a specific type. The model may return zero or more outputs of this type.\nThis attribute specifies the output modality and not the actual output format. For example, if an image is requested, the actual output could be a URL pointing to an image file.\nAdditional output format details may be recorded in the future in the `gen_ai.output.{type}.*` attributes.\n", + "requirement_level": { + "conditionally_required": "when applicable and if the request includes an output format." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Plain text", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object with known or unknown schema", + "id": "json", + "stability": "development", + "value": "json" + }, + { + "brief": "Image", + "id": "image", + "stability": "development", + "value": "image" + }, + { + "brief": "Speech", + "id": "speech", + "stability": "development", + "value": "speech" + } + ] + } + }, + { + "brief": "The target number of candidate completions to return.", + "examples": [ + 3 + ], + "name": "gen_ai.request.choice.count", + "requirement_level": { + "conditionally_required": "if available, in the request, and !=1" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Requests with same seed value more likely to return same result.", + "examples": [ + 100 + ], + "name": "gen_ai.request.seed", + "requirement_level": { + "conditionally_required": "if applicable and if the request includes a seed" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "note": "If available. The name of the GenAI model that provided the response. If the model is supplied by a vendor, then the value must be the exact name of the model actually used. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "note": "This attribute SHOULD be used when the corresponding provider or API\nallows to provide system instructions or messages separately from the\nchat history.\n\nInstructions that are part of the chat history SHOULD be recorded in\n`gen_ai.input.messages` attribute instead.\n\nInstrumentations MUST follow [System instructions JSON schema](/docs/gen-ai/gen-ai-system-instructions.json).\n\nWhen recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\nsystem instructions.\n\n\u003e [!Warning]\n\u003e This attribute may contain sensitive information.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The list of source system tool definitions available to the GenAI agent or model.", + "examples": [ + "[\n {\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \"description\": \"Get the current weather in a given location\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ]\n }\n },\n \"required\": [\n \"location\",\n \"unit\"\n ]\n }\n }\n]\n" + ], + "name": "gen_ai.tool.definitions", + "note": "The value of this attribute matches source system tool definition format.\n\nIt\u0027s expected to be an array of objects where each object represents a tool definition. In case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an array. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n\nSince this attribute could be large, it\u0027s NOT RECOMMENDED to populate\nit by default. Instrumentations MAY provide a way to enable\npopulating this attribute.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Describes the details of a GenAI completion request including chat history and parameters.\n", + "id": "event.gen_ai.client.inference.operation.details", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/events.yaml", + "registry_id": "main" + } + }, + "name": "gen_ai.client.inference.operation.details", + "note": "This event is opt-in and could be used to store input and output details independently from traces.\n", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "A free-form explanation for the assigned score provided by the evaluator.", + "examples": [ + "The response is factually accurate but lacks sufficient detail to fully address the question." + ], + "name": "gen_ai.evaluation.explanation", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the evaluation metric used for the GenAI response.", + "examples": [ + "Relevance", + "IntentResolution" + ], + "name": "gen_ai.evaluation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The evaluation score returned by the evaluator.", + "examples": [ + 4.0 + ], + "name": "gen_ai.evaluation.score.value", + "requirement_level": { + "conditionally_required": "if applicable" + }, + "stability": "development", + "type": "double" + }, + { + "brief": "Human readable label for evaluation.", + "examples": [ + "relevant", + "not_relevant", + "correct", + "incorrect", + "pass", + "fail" + ], + "name": "gen_ai.evaluation.score.label", + "note": "This attribute provides a human-readable interpretation of the evaluation score produced by an evaluator. For example, a score value of 1 could mean \"relevant\" in one evaluation system and \"not relevant\" in another, depending on the scoring range and evaluator. The label SHOULD have low cardinality. Possible values depend on the evaluation metric and evaluator used; implementations SHOULD document the possible values.\n", + "requirement_level": { + "conditionally_required": "if applicable" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "note": "The unique identifier assigned to the specific\ncompletion being evaluated. This attribute helps correlate the evaluation\nevent with the corresponding operation when span id is not available.\n", + "requirement_level": { + "recommended": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI Evaluation provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "This event captures the result of evaluating GenAI output for quality, accuracy, or other characteristics. This event SHOULD be parented to GenAI operation span being evaluated when possible or set `gen_ai.response.id` when span id is not available.\n", + "id": "event.gen_ai.evaluation.result", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.evaluation.explanation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.evaluation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.evaluation.score.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.evaluation.score.value": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/events.yaml", + "registry_id": "main" + } + }, + "name": "gen_ai.evaluation.result", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Logical addresses of the adapter (e.g. IP address, or WWPN)\n", + "examples": [ + [ + "172.16.8.21", + "57.11.193.42" + ] + ], + "name": "hw.network.logical_addresses", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Physical address of the adapter (e.g. MAC address, or WWNN)\n", + "examples": [ + "00-90-F5-E9-7B-36" + ], + "name": "hw.network.physical_address", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for network adapter metrics\n", + "id": "metric_attributes.hw.network", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.logical_addresses": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.physical_address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/network-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Logical addresses of the adapter (e.g. IP address, or WWPN)\n", + "examples": [ + [ + "172.16.8.21", + "57.11.193.42" + ] + ], + "name": "hw.network.logical_addresses", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Physical address of the adapter (e.g. MAC address, or WWNN)\n", + "examples": [ + "00-90-F5-E9-7B-36" + ], + "name": "hw.network.physical_address", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Link speed.", + "id": "metric.hw.network.bandwidth.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.logical_addresses": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.physical_address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/network-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.network.bandwidth.limit", + "stability": "development", + "type": "metric", + "unit": "By/s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Logical addresses of the adapter (e.g. IP address, or WWPN)\n", + "examples": [ + [ + "172.16.8.21", + "57.11.193.42" + ] + ], + "name": "hw.network.logical_addresses", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Physical address of the adapter (e.g. MAC address, or WWNN)\n", + "examples": [ + "00-90-F5-E9-7B-36" + ], + "name": "hw.network.physical_address", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Utilization of the network bandwidth as a fraction.", + "id": "metric.hw.network.bandwidth.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.logical_addresses": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.physical_address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/network-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.network.bandwidth.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Logical addresses of the adapter (e.g. IP address, or WWPN)\n", + "examples": [ + [ + "172.16.8.21", + "57.11.193.42" + ] + ], + "name": "hw.network.logical_addresses", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Physical address of the adapter (e.g. MAC address, or WWNN)\n", + "examples": [ + "00-90-F5-E9-7B-36" + ], + "name": "hw.network.physical_address", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The network IO operation direction.", + "examples": [ + "receive", + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + } + ], + "brief": "Received and transmitted network traffic in bytes.", + "id": "metric.hw.network.io", + "instrument": "counter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.logical_addresses": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.physical_address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/network-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.network.io", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Logical addresses of the adapter (e.g. IP address, or WWPN)\n", + "examples": [ + [ + "172.16.8.21", + "57.11.193.42" + ] + ], + "name": "hw.network.logical_addresses", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Physical address of the adapter (e.g. MAC address, or WWNN)\n", + "examples": [ + "00-90-F5-E9-7B-36" + ], + "name": "hw.network.physical_address", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The network IO operation direction.", + "examples": [ + "receive", + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + } + ], + "brief": "Received and transmitted network traffic in packets (or frames).", + "id": "metric.hw.network.packets", + "instrument": "counter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.logical_addresses": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.physical_address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/network-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.network.packets", + "stability": "development", + "type": "metric", + "unit": "{packet}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Logical addresses of the adapter (e.g. IP address, or WWPN)\n", + "examples": [ + [ + "172.16.8.21", + "57.11.193.42" + ] + ], + "name": "hw.network.logical_addresses", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Physical address of the adapter (e.g. MAC address, or WWNN)\n", + "examples": [ + "00-90-F5-E9-7B-36" + ], + "name": "hw.network.physical_address", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Link status: `1` (up) or `0` (down).", + "id": "metric.hw.network.up", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.logical_addresses": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.network.physical_address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/network-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.network.up", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "attributes": [ + { + "brief": "The name of the cluster.\n", + "examples": [ + "opentelemetry-cluster" + ], + "name": "k8s.cluster.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A pseudo-ID for the cluster, set to the UID of the `kube-system` namespace.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "k8s.cluster.uid", + "note": "K8s doesn\u0027t have support for obtaining a cluster ID. If this is ever\nadded, we will recommend collecting the `k8s.cluster.uid` through the\nofficial APIs. In the meantime, we are able to use the `uid` of the\n`kube-system` namespace as a proxy for cluster ID. Read on for the\nrationale.\n\nEvery object created in a K8s cluster is assigned a distinct UID. The\n`kube-system` namespace is used by Kubernetes itself and will exist\nfor the lifetime of the cluster. Using the `uid` of the `kube-system`\nnamespace is a reasonable proxy for the K8s ClusterID as it will only\nchange if the cluster is rebuilt. Furthermore, Kubernetes UIDs are\nUUIDs as standardized by\n[ISO/IEC 9834-8 and ITU-T X.667](https://www.itu.int/ITU-T/studygroups/com17/oid.html).\nWhich states:\n\n\u003e If generated according to one of the mechanisms defined in Rec.\n\u003e ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be\n\u003e different from all other UUIDs generated before 3603 A.D., or is\n\u003e extremely likely to be different (depending on the mechanism chosen).\n\nTherefore, UIDs between clusters should be extremely unlikely to\nconflict.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Node.\n", + "examples": [ + "node-1" + ], + "name": "k8s.node.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The UID of the Node.\n", + "examples": [ + "1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2" + ], + "name": "k8s.node.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Node, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "arm64", + "" + ], + "name": "k8s.node.label", + "note": "Examples:\n\n- A label `kubernetes.io/arch` with value `arm64` SHOULD be recorded\n as the `k8s.node.label.kubernetes.io/arch` attribute with value `\"arm64\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.node.label.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Node, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "0", + "" + ], + "name": "k8s.node.annotation", + "note": "Examples:\n\n- An annotation `node.alpha.kubernetes.io/ttl` with value `0` SHOULD be recorded as\n the `k8s.node.annotation.node.alpha.kubernetes.io/ttl` attribute with value `\"0\"`.\n- An annotation `data` with empty string value SHOULD be recorded as\n the `k8s.node.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The name of the namespace that the pod is running in.\n", + "examples": [ + "default" + ], + "name": "k8s.namespace.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Namespace, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "default", + "" + ], + "name": "k8s.namespace.label", + "note": "\nExamples:\n\n- A label `kubernetes.io/metadata.name` with value `default` SHOULD be recorded\n as the `k8s.namespace.label.kubernetes.io/metadata.name` attribute with value `\"default\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.namespace.label.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Namespace, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "0", + "" + ], + "name": "k8s.namespace.annotation", + "note": "\nExamples:\n\n- A label `ttl` with value `0` SHOULD be recorded\n as the `k8s.namespace.annotation.ttl` attribute with value `\"0\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.namespace.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The UID of the Pod.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.pod.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Pod.\n", + "examples": [ + "opentelemetry-pod-autoconf" + ], + "name": "k8s.pod.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Pod, the `\u003ckey\u003e` being the label name, the value being the label value.\n", + "examples": [ + "my-app", + "x64", + "" + ], + "name": "k8s.pod.label", + "note": "Examples:\n\n- A label `app` with value `my-app` SHOULD be recorded as\n the `k8s.pod.label.app` attribute with value `\"my-app\"`.\n- A label `mycompany.io/arch` with value `x64` SHOULD be recorded as\n the `k8s.pod.label.mycompany.io/arch` attribute with value `\"x64\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.pod.label.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Pod, the `\u003ckey\u003e` being the annotation name, the value being the annotation value.\n", + "examples": [ + "true", + "x64", + "" + ], + "name": "k8s.pod.annotation", + "note": "Examples:\n\n- An annotation `kubernetes.io/enforce-mountable-secrets` with value `true` SHOULD be recorded as\n the `k8s.pod.annotation.kubernetes.io/enforce-mountable-secrets` attribute with value `\"true\"`.\n- An annotation `mycompany.io/arch` with value `x64` SHOULD be recorded as\n the `k8s.pod.annotation.mycompany.io/arch` attribute with value `\"x64\"`.\n- An annotation `data` with empty string value SHOULD be recorded as\n the `k8s.pod.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The name of the Container from Pod specification, must be unique within a Pod. Container runtime usually uses different globally unique name (`container.name`).\n", + "examples": [ + "redis" + ], + "name": "k8s.container.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Number of times the container was restarted. This attribute can be used to identify a particular container (running or stopped) within a container spec.\n", + "name": "k8s.container.restart_count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Last terminated reason of the Container.\n", + "examples": [ + "Evicted", + "Error" + ], + "name": "k8s.container.status.last_terminated_reason", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The UID of the ReplicaSet.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.replicaset.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the ReplicaSet.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.replicaset.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the ReplicaSet, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "guestbook", + "" + ], + "name": "k8s.replicaset.label", + "note": "\nExamples:\n\n- A label `app` with value `guestbook` SHOULD be recorded\n as the `k8s.replicaset.label.app` attribute with value `\"guestbook\"`.\n- A label `injected` with empty string value SHOULD be recorded as\n the `k8s.replicaset.label.injected` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the ReplicaSet, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "0", + "" + ], + "name": "k8s.replicaset.annotation", + "note": "\nExamples:\n\n- A label `replicas` with value `0` SHOULD be recorded\n as the `k8s.replicaset.annotation.replicas` attribute with value `\"0\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.replicaset.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The UID of the replication controller.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.replicationcontroller.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the replication controller.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.replicationcontroller.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The UID of the resource quota.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.resourcequota.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the resource quota.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.resourcequota.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The UID of the Deployment.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.deployment.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Deployment.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.deployment.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Deployment, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "guestbook", + "" + ], + "name": "k8s.deployment.label", + "note": "\nExamples:\n\n- A label `replicas` with value `0` SHOULD be recorded\n as the `k8s.deployment.label.app` attribute with value `\"guestbook\"`.\n- A label `injected` with empty string value SHOULD be recorded as\n the `k8s.deployment.label.injected` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Deployment, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "1", + "" + ], + "name": "k8s.deployment.annotation", + "note": "\nExamples:\n\n- A label `replicas` with value `1` SHOULD be recorded\n as the `k8s.deployment.annotation.replicas` attribute with value `\"1\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.deployment.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The UID of the StatefulSet.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.statefulset.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the StatefulSet.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.statefulset.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the StatefulSet, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "guestbook", + "" + ], + "name": "k8s.statefulset.label", + "note": "\nExamples:\n\n- A label `replicas` with value `0` SHOULD be recorded\n as the `k8s.statefulset.label.app` attribute with value `\"guestbook\"`.\n- A label `injected` with empty string value SHOULD be recorded as\n the `k8s.statefulset.label.injected` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the StatefulSet, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "1", + "" + ], + "name": "k8s.statefulset.annotation", + "note": "\nExamples:\n\n- A label `replicas` with value `1` SHOULD be recorded\n as the `k8s.statefulset.annotation.replicas` attribute with value `\"1\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.statefulset.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The UID of the DaemonSet.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.daemonset.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the DaemonSet.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.daemonset.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the DaemonSet, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "guestbook", + "" + ], + "name": "k8s.daemonset.label", + "note": "\nExamples:\n\n- A label `app` with value `guestbook` SHOULD be recorded\n as the `k8s.daemonset.label.app` attribute with value `\"guestbook\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.daemonset.label.injected` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the DaemonSet, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "1", + "" + ], + "name": "k8s.daemonset.annotation", + "note": "\nExamples:\n\n- A label `replicas` with value `1` SHOULD be recorded\n as the `k8s.daemonset.annotation.replicas` attribute with value `\"1\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.daemonset.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The UID of the horizontal pod autoscaler.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.hpa.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the horizontal pod autoscaler.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.hpa.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The kind of the target resource to scale for the HorizontalPodAutoscaler.\n", + "examples": [ + "Deployment", + "StatefulSet" + ], + "name": "k8s.hpa.scaletargetref.kind", + "note": "This maps to the `kind` field in the `scaleTargetRef` of the HPA spec.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the target resource to scale for the HorizontalPodAutoscaler.\n", + "examples": [ + "my-deployment", + "my-statefulset" + ], + "name": "k8s.hpa.scaletargetref.name", + "note": "This maps to the `name` field in the `scaleTargetRef` of the HPA spec.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The API version of the target resource to scale for the HorizontalPodAutoscaler.\n", + "examples": [ + "apps/v1", + "autoscaling/v2" + ], + "name": "k8s.hpa.scaletargetref.api_version", + "note": "This maps to the `apiVersion` field in the `scaleTargetRef` of the HPA spec.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of metric source for the horizontal pod autoscaler.\n", + "examples": [ + "Resource", + "ContainerResource" + ], + "name": "k8s.hpa.metric.type", + "note": "This attribute reflects the `type` field of spec.metrics[] in the HPA.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The UID of the Job.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.job.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Job.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.job.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the Job, the `\u003ckey\u003e` being the label name, the value being the label value, even if the value is empty.\n", + "examples": [ + "ci", + "" + ], + "name": "k8s.job.label", + "note": "\nExamples:\n\n- A label `jobtype` with value `ci` SHOULD be recorded\n as the `k8s.job.label.jobtype` attribute with value `\"ci\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.job.label.automated` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The annotation placed on the Job, the `\u003ckey\u003e` being the annotation name, the value being the annotation value, even if the value is empty.\n", + "examples": [ + "1", + "" + ], + "name": "k8s.job.annotation", + "note": "\nExamples:\n\n- A label `number` with value `1` SHOULD be recorded\n as the `k8s.job.annotation.number` attribute with value `\"1\"`.\n- A label `data` with empty string value SHOULD be recorded as\n the `k8s.job.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The UID of the CronJob.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "k8s.cronjob.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the CronJob.\n", + "examples": [ + "opentelemetry" + ], + "name": "k8s.cronjob.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The label placed on the CronJob, the `\u003ckey\u003e` being the label name, the value being the label value.\n", + "examples": [ + "weekly", + "" + ], + "name": "k8s.cronjob.label", + "note": "Examples:\n\n- A label `type` with value `weekly` SHOULD be recorded as the\n `k8s.cronjob.label.type` attribute with value `\"weekly\"`.\n- A label `automated` with empty string value SHOULD be recorded as\n the `k8s.cronjob.label.automated` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The cronjob annotation placed on the CronJob, the `\u003ckey\u003e` being the annotation name, the value being the annotation value.\n", + "examples": [ + "4", + "" + ], + "name": "k8s.cronjob.annotation", + "note": "Examples:\n\n- An annotation `retries` with value `4` SHOULD be recorded as the\n `k8s.cronjob.annotation.retries` attribute with value `\"4\"`.\n- An annotation `data` with empty string value SHOULD be recorded as\n the `k8s.cronjob.annotation.data` attribute with value `\"\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The name of the K8s volume.\n", + "examples": [ + "volume0" + ], + "name": "k8s.volume.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the K8s volume.\n", + "examples": [ + "emptyDir", + "persistentVolumeClaim" + ], + "name": "k8s.volume.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A [persistentVolumeClaim](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim) volume", + "id": "persistent_volume_claim", + "stability": "development", + "value": "persistentVolumeClaim" + }, + { + "brief": "A [configMap](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#configmap) volume", + "id": "config_map", + "stability": "development", + "value": "configMap" + }, + { + "brief": "A [downwardAPI](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#downwardapi) volume", + "id": "downward_api", + "stability": "development", + "value": "downwardAPI" + }, + { + "brief": "An [emptyDir](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#emptydir) volume", + "id": "empty_dir", + "stability": "development", + "value": "emptyDir" + }, + { + "brief": "A [secret](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#secret) volume", + "id": "secret", + "stability": "development", + "value": "secret" + }, + { + "brief": "A [local](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#local) volume", + "id": "local", + "stability": "development", + "value": "local" + } + ] + } + }, + { + "brief": "The phase of the K8s namespace.\n", + "examples": [ + "active", + "terminating" + ], + "name": "k8s.namespace.phase", + "note": "This attribute aligns with the `phase` field of the\n[K8s NamespaceStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#namespacestatus-v1-core)\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Active namespace phase as described by [K8s API](https://pkg.go.dev/k8s.io/api@v0.31.3/core/v1#NamespacePhase)", + "id": "active", + "stability": "development", + "value": "active" + }, + { + "brief": "Terminating namespace phase as described by [K8s API](https://pkg.go.dev/k8s.io/api@v0.31.3/core/v1#NamespacePhase)", + "id": "terminating", + "stability": "development", + "value": "terminating" + } + ] + } + }, + { + "brief": "The condition type of a K8s Node.\n", + "examples": [ + "Ready", + "DiskPressure" + ], + "name": "k8s.node.condition.type", + "note": "K8s Node conditions as described\nby [K8s documentation](https://v1-32.docs.kubernetes.io/docs/reference/node/node-status/#condition).\n\nThis attribute aligns with the `type` field of the\n[NodeCondition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#nodecondition-v1-core)\n\nThe set of possible values is not limited to those listed here. Managed Kubernetes environments,\nor custom controllers MAY introduce additional node condition types.\nWhen this occurs, the exact value as reported by the Kubernetes API SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The node is healthy and ready to accept pods", + "id": "ready", + "stability": "development", + "value": "Ready" + }, + { + "brief": "Pressure exists on the disk size—that is, if the disk capacity is low", + "id": "disk_pressure", + "stability": "development", + "value": "DiskPressure" + }, + { + "brief": "Pressure exists on the node memory—that is, if the node memory is low", + "id": "memory_pressure", + "stability": "development", + "value": "MemoryPressure" + }, + { + "brief": "Pressure exists on the processes—that is, if there are too many processes on the node", + "id": "pid_pressure", + "stability": "development", + "value": "PIDPressure" + }, + { + "brief": "The network for the node is not correctly configured", + "id": "network_unavailable", + "stability": "development", + "value": "NetworkUnavailable" + } + ] + } + }, + { + "brief": "The status of the condition, one of True, False, Unknown.\n", + "examples": [ + "true", + "false", + "unknown" + ], + "name": "k8s.node.condition.status", + "note": "This attribute aligns with the `status` field of the\n[NodeCondition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#nodecondition-v1-core)\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "condition_true", + "stability": "development", + "value": "true" + }, + { + "id": "condition_false", + "stability": "development", + "value": "false" + }, + { + "id": "condition_unknown", + "stability": "development", + "value": "unknown" + } + ] + } + }, + { + "brief": "The state of the container. [K8s ContainerState](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstate-v1-core)\n", + "examples": [ + "terminated", + "running", + "waiting" + ], + "name": "k8s.container.status.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The container has terminated.", + "id": "terminated", + "stability": "development", + "value": "terminated" + }, + { + "brief": "The container is running.", + "id": "running", + "stability": "development", + "value": "running" + }, + { + "brief": "The container is waiting.", + "id": "waiting", + "stability": "development", + "value": "waiting" + } + ] + } + }, + { + "brief": "The reason for the container state. Corresponds to the `reason` field of the: [K8s ContainerStateWaiting](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstatewaiting-v1-core) or [K8s ContainerStateTerminated](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstateterminated-v1-core)\n", + "examples": [ + "ContainerCreating", + "CrashLoopBackOff", + "CreateContainerConfigError", + "ErrImagePull", + "ImagePullBackOff", + "OOMKilled", + "Completed", + "Error", + "ContainerCannotRun" + ], + "name": "k8s.container.status.reason", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The container is being created.", + "id": "container_creating", + "stability": "development", + "value": "ContainerCreating" + }, + { + "brief": "The container is in a crash loop back off state.", + "id": "crash_loop_back_off", + "stability": "development", + "value": "CrashLoopBackOff" + }, + { + "brief": "There was an error creating the container configuration.", + "id": "create_container_config_error", + "stability": "development", + "value": "CreateContainerConfigError" + }, + { + "brief": "There was an error pulling the container image.", + "id": "err_image_pull", + "stability": "development", + "value": "ErrImagePull" + }, + { + "brief": "The container image pull is in back off state.", + "id": "image_pull_back_off", + "stability": "development", + "value": "ImagePullBackOff" + }, + { + "brief": "The container was killed due to out of memory.", + "id": "oom_killed", + "stability": "development", + "value": "OOMKilled" + }, + { + "brief": "The container has completed execution.", + "id": "completed", + "stability": "development", + "value": "Completed" + }, + { + "brief": "There was an error with the container.", + "id": "error", + "stability": "development", + "value": "Error" + }, + { + "brief": "The container cannot run.", + "id": "container_cannot_run", + "stability": "development", + "value": "ContainerCannotRun" + } + ] + } + }, + { + "brief": "The size (identifier) of the K8s huge page.\n", + "examples": [ + "2Mi" + ], + "name": "k8s.hugepage.size", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object.\n", + "examples": [ + "gold.storageclass.storage.k8s.io" + ], + "name": "k8s.storageclass.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the K8s resource a resource quota defines.\n", + "examples": [ + "count/replicationcontrollers" + ], + "name": "k8s.resourcequota.resource_name", + "note": "The value for this attribute can be either the full `count/\u003cresource\u003e[.\u003cgroup\u003e]` string (e.g., count/deployments.apps, count/pods), or, for certain core Kubernetes resources, just the resource name (e.g., pods, services, configmaps). Both forms are supported by Kubernetes for object count quotas. See [Kubernetes Resource Quotas documentation](https://kubernetes.io/docs/concepts/policy/resource-quotas/#quota-on-object-count) for more details.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The reason for the pod state. Corresponds to the `reason` field of the: [K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podstatus-v1-core)\n", + "examples": [ + "Evicted", + "NodeAffinity" + ], + "name": "k8s.pod.status.reason", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The pod is evicted.", + "id": "evicted", + "stability": "development", + "value": "Evicted" + }, + { + "brief": "The pod is in a status because of its node affinity", + "id": "node_affinity", + "stability": "development", + "value": "NodeAffinity" + }, + { + "brief": "The reason on a pod when its state cannot be confirmed as kubelet is unresponsive on the node it is (was) running.\n", + "id": "node_lost", + "stability": "development", + "value": "NodeLost" + }, + { + "brief": "The node is shutdown", + "id": "shutdown", + "stability": "development", + "value": "Shutdown" + }, + { + "brief": "The pod was rejected admission to the node because of an error during admission that could not be categorized.\n", + "id": "unexpected_admission_error", + "stability": "development", + "value": "UnexpectedAdmissionError" + } + ] + } + }, + { + "brief": "The phase for the pod. Corresponds to the `phase` field of the: [K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podstatus-v1-core)\n", + "examples": [ + "Pending", + "Running" + ], + "name": "k8s.pod.status.phase", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The pod has been accepted by the system, but one or more of the containers has not been started. This includes time before being bound to a node, as well as time spent pulling images onto the host.\n", + "id": "pending", + "stability": "development", + "value": "Pending" + }, + { + "brief": "The pod has been bound to a node and all of the containers have been started. At least one container is still running or is in the process of being restarted.\n", + "id": "running", + "stability": "development", + "value": "Running" + }, + { + "brief": "All containers in the pod have voluntarily terminated with a container exit code of 0, and the system is not going to restart any of these containers.\n", + "id": "succeeded", + "stability": "development", + "value": "Succeeded" + }, + { + "brief": "All containers in the pod have terminated, and at least one container has terminated in a failure (exited with a non-zero exit code or was stopped by the system).\n", + "id": "failed", + "stability": "development", + "value": "Failed" + }, + { + "brief": "For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n", + "id": "unknown", + "stability": "development", + "value": "Unknown" + } + ] + } + } + ], + "brief": "Kubernetes resource attributes.\n", + "display_name": "Kubernetes Attributes", + "id": "registry.k8s", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The enforced hard limit of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.cpu.limit.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.cpu.limit.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The current observed total usage of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.cpu.limit.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.cpu.limit.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The enforced hard limit of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.cpu.request.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.cpu.request.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The current observed total usage of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.cpu.request.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.cpu.request.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The enforced hard limit of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.memory.limit.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.memory.limit.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The current observed total usage of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.memory.limit.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.memory.limit.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The enforced hard limit of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.memory.request.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.memory.request.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The current observed total usage of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.memory.request.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.memory.request.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The size (identifier) of the K8s huge page.\n", + "examples": [ + "2Mi" + ], + "name": "k8s.hugepage.size", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The enforced hard limit of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.hugepage_count.request.hard", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.hugepage.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.hugepage_count.request.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "{hugepage}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The size (identifier) of the K8s huge page.\n", + "examples": [ + "2Mi" + ], + "name": "k8s.hugepage.size", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The current observed total usage of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.hugepage_count.request.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.hugepage.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.hugepage_count.request.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "{hugepage}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object.\n", + "examples": [ + "gold.storageclass.storage.k8s.io" + ], + "name": "k8s.storageclass.name", + "requirement_level": { + "conditionally_required": "The `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "The enforced hard limit of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.storage.request.hard", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.storageclass.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.storage.request.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n\nThe `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object.\n", + "examples": [ + "gold.storageclass.storage.k8s.io" + ], + "name": "k8s.storageclass.name", + "requirement_level": { + "conditionally_required": "The `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "The current observed total usage of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.storage.request.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.storageclass.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.storage.request.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n\nThe `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object.\n", + "examples": [ + "gold.storageclass.storage.k8s.io" + ], + "name": "k8s.storageclass.name", + "requirement_level": { + "conditionally_required": "The `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "The enforced hard limit of the resource across all projects.\n", + "id": "metric.openshift.clusterquota.persistentvolumeclaim_count.hard", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.storageclass.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.persistentvolumeclaim_count.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n\nThe `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n", + "stability": "development", + "type": "metric", + "unit": "{persistentvolumeclaim}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object.\n", + "examples": [ + "gold.storageclass.storage.k8s.io" + ], + "name": "k8s.storageclass.name", + "requirement_level": { + "conditionally_required": "The `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "The current observed total usage of the resource across all projects.\n", + "id": "metric.openshift.clusterquota.persistentvolumeclaim_count.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.storageclass.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.persistentvolumeclaim_count.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n\nThe `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n", + "stability": "development", + "type": "metric", + "unit": "{persistentvolumeclaim}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The enforced hard limit of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.ephemeral_storage.request.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.ephemeral_storage.request.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The current observed total usage of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.ephemeral_storage.request.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.ephemeral_storage.request.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The enforced hard limit of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.ephemeral_storage.limit.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.ephemeral_storage.limit.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The current observed total usage of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.ephemeral_storage.limit.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.ephemeral_storage.limit.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the K8s resource a resource quota defines.\n", + "examples": [ + "count/replicationcontrollers" + ], + "name": "k8s.resourcequota.resource_name", + "note": "The value for this attribute can be either the full `count/\u003cresource\u003e[.\u003cgroup\u003e]` string (e.g., count/deployments.apps, count/pods), or, for certain core Kubernetes resources, just the resource name (e.g., pods, services, configmaps). Both forms are supported by Kubernetes for object count quotas. See [Kubernetes Resource Quotas documentation](https://kubernetes.io/docs/concepts/policy/resource-quotas/#quota-on-object-count) for more details.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The enforced hard limit of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.object_count.hard", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.resourcequota.resource_name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.object_count.hard", + "note": "This metric is retrieved from the `Status.Total.Hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "{object}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the K8s resource a resource quota defines.\n", + "examples": [ + "count/replicationcontrollers" + ], + "name": "k8s.resourcequota.resource_name", + "note": "The value for this attribute can be either the full `count/\u003cresource\u003e[.\u003cgroup\u003e]` string (e.g., count/deployments.apps, count/pods), or, for certain core Kubernetes resources, just the resource name (e.g., pods, services, configmaps). Both forms are supported by Kubernetes for object count quotas. See [Kubernetes Resource Quotas documentation](https://kubernetes.io/docs/concepts/policy/resource-quotas/#quota-on-object-count) for more details.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The current observed total usage of the resource across all projects.\n", + "entity_associations": [ + "openshift.clusterquota" + ], + "id": "metric.openshift.clusterquota.object_count.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.resourcequota.resource_name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/openshift/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "openshift.clusterquota.object_count.used", + "note": "This metric is retrieved from the `Status.Total.Used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core)\nof the\n[ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#status-total).\n", + "stability": "development", + "type": "metric", + "unit": "{object}" + }, + { + "attributes": [ + { + "brief": "Process identifier (PID).\n", + "examples": [ + 1234 + ], + "name": "process.pid", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Parent Process identifier (PPID).\n", + "examples": [ + 111 + ], + "name": "process.parent_pid", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Virtual process identifier.\n", + "examples": [ + 12 + ], + "name": "process.vpid", + "note": "The process ID within a PID namespace. This is not necessarily unique across all processes on the host but it is unique within the process namespace that the process exists within.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The PID of the process\u0027s session leader. This is also the session ID (SID) of the process.\n", + "examples": [ + 14 + ], + "name": "process.session_leader.pid", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The PID of the process\u0027s group leader. This is also the process group ID (PGID) of the process.\n", + "examples": [ + 23 + ], + "name": "process.group_leader.pid", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The GNU build ID as found in the `.note.gnu.build-id` ELF section (hex string).\n", + "examples": [ + "c89b11207f6479603b0d49bf291c092c2b719293" + ], + "name": "process.executable.build_id.gnu", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The Go build ID as retrieved by `go tool buildid \u003cgo executable\u003e`.\n", + "examples": [ + "foh3mEXu7BLZjsN9pOwG/kATcXlYVCDEFouRMQed_/WwRFB1hPo9LBkekthSPG/x8hMC8emW2cCjXD0_1aY" + ], + "name": "process.executable.build_id.go", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Profiling specific build ID for executables. See the OTel specification for Profiles for more information.\n", + "examples": [ + "600DCAFE4A110000F2BF38C493F5FB92" + ], + "name": "process.executable.build_id.htlhash", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the process executable. On Linux based systems, this SHOULD be set to the base name of the target of `/proc/[pid]/exe`. On Windows, this SHOULD be set to the base name of `GetProcessImageFileNameW`.\n", + "examples": [ + "otelcol" + ], + "name": "process.executable.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`.\n", + "examples": [ + "/usr/bin/cmd/otelcol" + ], + "name": "process.executable.path", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The command used to launch the process (i.e. the command name). On Linux based systems, can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to the first parameter extracted from `GetCommandLineW`.\n", + "examples": [ + "cmd/otelcol" + ], + "name": "process.command", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full command used to launch the process as a single string representing the full command. On Windows, can be set to the result of `GetCommandLineW`. Do not set this if you have to assemble it just for monitoring; use `process.command_args` instead. SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data.\n", + "examples": [ + "C:\\cmd\\otecol --config=\"my directory\\config.yaml\"" + ], + "name": "process.command_line", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`. SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data.\n", + "examples": [ + [ + "cmd/otecol", + "--config=config.yaml" + ] + ], + "name": "process.command_args", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Length of the process.command_args array\n", + "examples": [ + 4 + ], + "name": "process.args_count", + "note": "This field can be useful for querying or performing bucket analysis on how many arguments were provided to start a process. More arguments may be an indication of suspicious activity.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The username of the user that owns the process.\n", + "examples": [ + "root" + ], + "name": "process.owner", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The effective user ID (EUID) of the process.\n", + "examples": [ + 1001 + ], + "name": "process.user.id", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The username of the effective user of the process.\n", + "examples": [ + "root" + ], + "name": "process.user.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The real user ID (RUID) of the process.\n", + "examples": [ + 1000 + ], + "name": "process.real_user.id", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The username of the real user of the process.\n", + "examples": [ + "operator" + ], + "name": "process.real_user.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The saved user ID (SUID) of the process.\n", + "examples": [ + 1002 + ], + "name": "process.saved_user.id", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The username of the saved user.\n", + "examples": [ + "operator" + ], + "name": "process.saved_user.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the runtime of this process.\n", + "examples": [ + "OpenJDK Runtime Environment" + ], + "name": "process.runtime.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version of the runtime of this process, as returned by the runtime without modification.\n", + "examples": "14.0.2", + "name": "process.runtime.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment.\n", + "examples": "Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0", + "name": "process.runtime.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Process title (proctitle)\n", + "examples": [ + "cat /etc/hostname", + "xfce4-session", + "bash" + ], + "name": "process.title", + "note": "In many Unix-like systems, process title (proctitle), is the string that represents the name or command line of a running process, displayed by system monitoring tools like ps, top, and htop.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The date and time the process was created, in ISO 8601 format.\n", + "examples": [ + "2023-11-21T09:25:34.853Z" + ], + "name": "process.creation.time", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The date and time the process exited, in ISO 8601 format.\n", + "examples": [ + "2023-11-21T09:26:12.315Z" + ], + "name": "process.exit.time", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The exit code of the process.\n", + "examples": [ + 127 + ], + "name": "process.exit.code", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Whether the process is connected to an interactive shell.\n", + "name": "process.interactive", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The working directory of the process.\n", + "examples": [ + "/root" + ], + "name": "process.working_directory", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Specifies whether the context switches for this data point were voluntary or involuntary.", + "name": "process.context_switch.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "voluntary", + "stability": "development", + "value": "voluntary" + }, + { + "id": "involuntary", + "stability": "development", + "value": "involuntary" + } + ] + } + }, + { + "brief": "Process environment variables, `\u003ckey\u003e` being the environment variable name, the value being the environment variable value.\n", + "examples": [ + "ubuntu", + "/usr/local/bin:/usr/bin" + ], + "name": "process.environment_variable", + "note": "Examples:\n\n- an environment variable `USER` with value `\"ubuntu\"` SHOULD be recorded\nas the `process.environment_variable.USER` attribute with value `\"ubuntu\"`.\n\n- an environment variable `PATH` with value `\"/usr/local/bin:/usr/bin\"`\nSHOULD be recorded as the `process.environment_variable.PATH` attribute\nwith value `\"/usr/local/bin:/usr/bin\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The process state, e.g., [Linux Process State Codes](https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES)\n", + "examples": [ + "running" + ], + "name": "process.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "running", + "stability": "development", + "value": "running" + }, + { + "id": "sleeping", + "stability": "development", + "value": "sleeping" + }, + { + "id": "stopped", + "stability": "development", + "value": "stopped" + }, + { + "id": "defunct", + "stability": "development", + "value": "defunct" + } + ] + } + } + ], + "brief": "An operating system process.\n", + "display_name": "Process Attributes", + "id": "registry.process", + "lineage": { + "provenance": { + "path": "/home/weaver/source/process/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The control group associated with the process.", + "examples": [ + "1:name=systemd:/user.slice/user-1000.slice/session-3.scope", + "0::/user.slice/user-1000.slice/user@1000.service/tmux-spawn-0267755b-4639-4a27-90ed-f19f88e53748.scope" + ], + "name": "process.linux.cgroup", + "note": "Control groups (cgroups) are a kernel feature used to organize and manage process resources. This attribute provides the path(s) to the cgroup(s) associated with the process, which should match the contents of the [/proc/\\[PID\\]/cgroup](https://man7.org/linux/man-pages/man7/cgroups.7.html) file.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes Linux Process attributes", + "id": "registry.process.linux", + "lineage": { + "provenance": { + "path": "/home/weaver/source/process/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Source address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "source.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "source.address", + "note": "When observed from the destination side, and when communicating through an intermediary, `source.address` SHOULD represent the source address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Source port number", + "examples": [ + 3389, + 2888 + ], + "name": "source.port", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "These attributes may be used to describe the sender of a network exchange/packet. These should be used when there is no client/server relationship between the two sides, or when that relationship is unknown. This covers low-level network interactions (e.g. packet tracing) where you don\u0027t know if there was a connection or which side initiated it. This also covers unidirectional UDP flows and peer-to-peer communication where the \"user-facing\" surface of the protocol / API doesn\u0027t expose a clear notion of client and server.\n", + "display_name": "Source Attributes", + "id": "registry.source", + "lineage": { + "provenance": { + "path": "/home/weaver/source/source/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The human readable file name of the artifact, typically generated during build and release processes. Often includes the package name and version in the file name.\n", + "examples": [ + "golang-binary-amd64-v0.1.0", + "docker-image-amd64-v0.1.0", + "release-1.tar.gz", + "file-name-package.tar.gz" + ], + "name": "artifact.filename", + "note": "This file name can also act as the [Package Name](https://slsa.dev/spec/v1.0/terminology#package-model)\nin cases where the package ecosystem maps accordingly.\nAdditionally, the artifact [can be published](https://slsa.dev/spec/v1.0/terminology#software-supply-chain)\nfor others, but that is not a guarantee.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version of the artifact.\n", + "examples": [ + "v0.1.0", + "1.2.1", + "122691-build" + ], + "name": "artifact.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [Package URL](https://github.com/package-url/purl-spec) of the [package artifact](https://slsa.dev/spec/v1.0/terminology#package-model) provides a standard way to identify and locate the packaged artifact.\n", + "examples": [ + "pkg:github/package-url/purl-spec@1209109710924", + "pkg:npm/foo@12.12.3" + ], + "name": "artifact.purl", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full [hash value (see glossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf), often found in checksum.txt on a release of the artifact and used to verify package integrity.\n", + "examples": [ + "9ff4c52759e2c4ac70b7d517bc7fcdc1cda631ca0045271ddd1b192544f8a3e9" + ], + "name": "artifact.hash", + "note": "The specific algorithm used to create the cryptographic hash value is\nnot defined. In situations where an artifact has multiple\ncryptographic hashes, it is up to the implementer to choose which\nhash value to set here; this should be the most secure hash algorithm\nthat is suitable for the situation and consistent with the\ncorresponding attestation. The implementer can then provide the other\nhash values through an additional set of attribute extensions as they\ndeem necessary.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The id of the build [software attestation](https://slsa.dev/attestation-model).\n", + "examples": [ + "123" + ], + "name": "artifact.attestation.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The provenance filename of the built attestation which directly relates to the build artifact filename. This filename SHOULD accompany the artifact at publish time. See the [SLSA Relationship](https://slsa.dev/spec/v1.0/distributing-provenance#relationship-between-artifacts-and-attestations) specification for more information.\n", + "examples": [ + "golang-binary-amd64-v0.1.0.attestation", + "docker-image-amd64-v0.1.0.intoto.json1", + "release-1.tar.gz.attestation", + "file-name-package.tar.gz.intoto.json1" + ], + "name": "artifact.attestation.filename", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full [hash value (see glossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf), of the built attestation. Some envelopes in the [software attestation space](https://github.com/in-toto/attestation/tree/main/spec) also refer to this as the **digest**.\n", + "examples": [ + "1b31dfcd5b7f9267bf2ff47651df1cfb9147b9e4df1f335accf65b4cda498408" + ], + "name": "artifact.attestation.hash", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This group describes attributes specific to artifacts. Artifacts are files or other immutable objects that are intended for distribution. This definition aligns directly with the [SLSA](https://slsa.dev/spec/v1.0/terminology#package-model) package model.\n", + "display_name": "Artifact Attributes", + "id": "registry.artifact", + "lineage": { + "provenance": { + "path": "/home/weaver/source/artifact/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The human readable name of the pipeline within a CI/CD system.\n", + "examples": [ + "Build and Test", + "Lint", + "Deploy Go Project", + "deploy_to_environment" + ], + "name": "cicd.pipeline.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier of a pipeline run within a CI/CD system.\n", + "examples": [ + "120912" + ], + "name": "cicd.pipeline.run.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [URL](https://wikipedia.org/wiki/URL) of the pipeline run, providing the complete address in order to locate and identify the pipeline run.\n", + "examples": [ + "https://github.com/open-telemetry/semantic-conventions/actions/runs/9753949763?pr=1075" + ], + "name": "cicd.pipeline.run.url.full", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The pipeline run goes through these states during its lifecycle.\n", + "examples": [ + "pending", + "executing", + "finalizing" + ], + "name": "cicd.pipeline.run.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The run pending state spans from the event triggering the pipeline run until the execution of the run starts (eg. time spent in a queue, provisioning agents, creating run resources).\n", + "id": "pending", + "stability": "development", + "value": "pending" + }, + { + "brief": "The executing state spans the execution of any run tasks (eg. build, test).", + "id": "executing", + "stability": "development", + "value": "executing" + }, + { + "brief": "The finalizing state spans from when the run has finished executing (eg. cleanup of run resources).", + "id": "finalizing", + "stability": "development", + "value": "finalizing" + } + ] + } + }, + { + "brief": "The human readable name of a task within a pipeline. Task here most closely aligns with a [computing process](https://wikipedia.org/wiki/Pipeline_(computing)) in a pipeline. Other terms for tasks include commands, steps, and procedures.\n", + "examples": [ + "Run GoLang Linter", + "Go Build", + "go-test", + "deploy_binary" + ], + "name": "cicd.pipeline.task.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier of a task run within a pipeline.\n", + "examples": [ + "12097" + ], + "name": "cicd.pipeline.task.run.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [URL](https://wikipedia.org/wiki/URL) of the pipeline task run, providing the complete address in order to locate and identify the pipeline task run.\n", + "examples": [ + "https://github.com/open-telemetry/semantic-conventions/actions/runs/9753949763/job/26920038674?pr=1075" + ], + "name": "cicd.pipeline.task.run.url.full", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The result of a task run.\n", + "examples": [ + "success", + "failure", + "timeout", + "skipped" + ], + "name": "cicd.pipeline.task.run.result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The task run finished successfully.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "The task run did not finish successfully, eg. due to a compile error or a failing test. Such failures are usually detected by non-zero exit codes of the tools executed in the task run.", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "The task run failed due to an error in the CICD system, eg. due to the worker being killed.", + "id": "error", + "stability": "development", + "value": "error" + }, + { + "brief": "A timeout caused the task run to be interrupted.", + "id": "timeout", + "stability": "development", + "value": "timeout" + }, + { + "brief": "The task run was cancelled, eg. by a user manually cancelling the task run.", + "id": "cancellation", + "stability": "development", + "value": "cancellation" + }, + { + "brief": "The task run was skipped, eg. due to a precondition not being met.", + "id": "skip", + "stability": "development", + "value": "skip" + } + ] + } + }, + { + "brief": "The type of the task within a pipeline.\n", + "examples": [ + "build", + "test", + "deploy" + ], + "name": "cicd.pipeline.task.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "build", + "id": "build", + "stability": "development", + "value": "build" + }, + { + "brief": "test", + "id": "test", + "stability": "development", + "value": "test" + }, + { + "brief": "deploy", + "id": "deploy", + "stability": "development", + "value": "deploy" + } + ] + } + }, + { + "brief": "The result of a pipeline run.\n", + "examples": [ + "success", + "failure", + "timeout", + "skipped" + ], + "name": "cicd.pipeline.result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The pipeline run finished successfully.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "The pipeline run did not finish successfully, eg. due to a compile error or a failing test. Such failures are usually detected by non-zero exit codes of the tools executed in the pipeline run.", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "The pipeline run failed due to an error in the CICD system, eg. due to the worker being killed.", + "id": "error", + "stability": "development", + "value": "error" + }, + { + "brief": "A timeout caused the pipeline run to be interrupted.", + "id": "timeout", + "stability": "development", + "value": "timeout" + }, + { + "brief": "The pipeline run was cancelled, eg. by a user manually cancelling the pipeline run.", + "id": "cancellation", + "stability": "development", + "value": "cancellation" + }, + { + "brief": "The pipeline run was skipped, eg. due to a precondition not being met.", + "id": "skip", + "stability": "development", + "value": "skip" + } + ] + } + }, + { + "brief": "The kind of action a pipeline run is performing.\n", + "examples": [ + "BUILD", + "RUN", + "SYNC" + ], + "name": "cicd.pipeline.action.name", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The pipeline run is executing a build.", + "id": "build", + "stability": "development", + "value": "BUILD" + }, + { + "brief": "The pipeline run is executing.", + "id": "run", + "stability": "development", + "value": "RUN" + }, + { + "brief": "The pipeline run is executing a sync.", + "id": "sync", + "stability": "development", + "value": "SYNC" + } + ] + } + }, + { + "brief": "The unique identifier of a worker within a CICD system.", + "examples": [ + "abc123", + "10.0.1.2", + "controller" + ], + "name": "cicd.worker.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of a worker within a CICD system.", + "examples": [ + "agent-abc", + "controller", + "Ubuntu LTS" + ], + "name": "cicd.worker.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [URL](https://wikipedia.org/wiki/URL) of the worker, providing the complete address in order to locate and identify the worker.", + "examples": [ + "https://cicd.example.org/worker/abc123" + ], + "name": "cicd.worker.url.full", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The state of a CICD worker / agent.\n", + "examples": [ + "idle", + "busy", + "down" + ], + "name": "cicd.worker.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The worker is not performing work for the CICD system. It is available to the CICD system to perform work on (online / idle).", + "id": "available", + "note": "Pipelines might have conditions on which workers they are able to run so not every worker might be available to every pipeline.", + "stability": "development", + "value": "available" + }, + { + "brief": "The worker is performing work for the CICD system.", + "id": "busy", + "stability": "development", + "value": "busy" + }, + { + "brief": "The worker is not available to the CICD system (disconnected / down).", + "id": "offline", + "stability": "development", + "value": "offline" + } + ] + } + }, + { + "brief": "The name of a component of the CICD system.", + "examples": [ + "controller", + "scheduler", + "agent" + ], + "name": "cicd.system.component", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This group describes attributes specific to pipelines within a Continuous Integration and Continuous Deployment (CI/CD) system. A [pipeline](https://wikipedia.org/wiki/Pipeline_(computing)) in this case is a series of steps that are performed in order to deliver a new version of software. This aligns with the [Britannica](https://www.britannica.com/dictionary/pipeline) definition of a pipeline where a **pipeline** is the system for developing and producing something. In the context of CI/CD, a pipeline produces or delivers software.\n", + "display_name": "CI/CD Pipeline Attributes", + "id": "registry.cicd.pipeline", + "lineage": { + "provenance": { + "path": "/home/weaver/source/cicd/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The logical CPU number [0..n-1]", + "examples": [ + 1 + ], + "name": "cpu.logical_number", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The mode of the CPU", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "note": "Following states SHOULD be used: `user`, `system`, `nice`, `idle`, `iowait`, `interrupt`, `steal`", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + } + ], + "brief": "Deprecated. Use `system.cpu.time` instead.", + "deprecated": { + "note": "Replaced by `system.cpu.time`.", + "reason": "renamed", + "renamed_to": "system.cpu.time" + }, + "id": "metric.cpu.time", + "instrument": "counter", + "lineage": { + "attributes": { + "cpu.logical_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cpu" + }, + "cpu.mode": { + "inherited_fields": [ + "brief", + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "note" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/cpu/deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "cpu.time", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The logical CPU number [0..n-1]", + "examples": [ + 1 + ], + "name": "cpu.logical_number", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The mode of the CPU", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "note": "Following states SHOULD be used: `user`, `system`, `nice`, `idle`, `iowait`, `interrupt`, `steal`", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + } + ], + "brief": "Deprecated. Use `system.cpu.utilization` instead.", + "deprecated": { + "note": "Replaced by `system.cpu.utilization`.", + "reason": "renamed", + "renamed_to": "system.cpu.utilization" + }, + "id": "metric.cpu.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "cpu.logical_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cpu" + }, + "cpu.mode": { + "inherited_fields": [ + "brief", + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "note" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/cpu/deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "cpu.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated. Use `system.cpu.frequency` instead.", + "deprecated": { + "note": "Replaced by `system.cpu.frequency`.", + "reason": "renamed", + "renamed_to": "system.cpu.frequency" + }, + "id": "metric.cpu.frequency", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/cpu/deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "cpu.frequency", + "stability": "development", + "type": "metric", + "unit": "{Hz}" + }, + { + "attributes": [ + { + "brief": "The disk IO operation direction.", + "examples": [ + "read" + ], + "name": "disk.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "read", + "stability": "development", + "value": "read" + }, + { + "id": "write", + "stability": "development", + "value": "write" + } + ] + } + } + ], + "brief": "These attributes may be used for any disk related operation.\n", + "display_name": "Disk Attributes", + "id": "registry.disk", + "lineage": { + "provenance": { + "path": "/home/weaver/source/disk/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + }, + { + "brief": "The name of the invoked function.\n", + "examples": "my-function", + "name": "faas.invoked_name", + "note": "SHOULD be equal to the `faas.name` resource attribute of the invoked function.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The cloud provider of the invoked function.\n", + "name": "faas.invoked_provider", + "note": "SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Alibaba Cloud", + "id": "alibaba_cloud", + "stability": "development", + "value": "alibaba_cloud" + }, + { + "brief": "Amazon Web Services", + "id": "aws", + "stability": "development", + "value": "aws" + }, + { + "brief": "Microsoft Azure", + "id": "azure", + "stability": "development", + "value": "azure" + }, + { + "brief": "Google Cloud Platform", + "id": "gcp", + "stability": "development", + "value": "gcp" + }, + { + "brief": "Tencent Cloud", + "id": "tencent_cloud", + "stability": "development", + "value": "tencent_cloud" + } + ] + } + }, + { + "brief": "The cloud region of the invoked function.\n", + "examples": "eu-central-1", + "name": "faas.invoked_region", + "note": "SHOULD be equal to the `cloud.region` resource attribute of the invoked function.\n", + "requirement_level": { + "conditionally_required": "For some cloud providers, like AWS or GCP, the region in which a function is hosted is essential to uniquely identify the function and also part of its endpoint. Since it\u0027s part of the endpoint being called, the region is always known to clients. In these cases, `faas.invoked_region` MUST be set accordingly. If the region is unknown to the client or not required for identifying the invoked function, setting `faas.invoked_region` is optional.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Describes FaaS attributes.", + "id": "attributes.faas.common", + "lineage": { + "attributes": { + "faas.invoked_name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.faas" + }, + "faas.invoked_provider": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.faas" + }, + "faas.invoked_region": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.faas" + }, + "faas.trigger": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RAID Level of the logical disk\n", + "examples": [ + "RAID0+1", + "RAID5", + "RAID10" + ], + "name": "hw.logical_disk.raid_level", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for logical disk metrics\n", + "id": "metric_attributes.hw.logical_disk", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.logical_disk.raid_level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/logical-disk-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RAID Level of the logical disk\n", + "examples": [ + "RAID0+1", + "RAID5", + "RAID10" + ], + "name": "hw.logical_disk.raid_level", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Size of the logical disk.", + "id": "metric.hw.logical_disk.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.logical_disk.raid_level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/logical-disk-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.logical_disk.limit", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RAID Level of the logical disk\n", + "examples": [ + "RAID0+1", + "RAID5", + "RAID10" + ], + "name": "hw.logical_disk.raid_level", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "State of the logical disk space usage\n", + "examples": [ + "used", + "free" + ], + "name": "hw.logical_disk.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Used", + "id": "used", + "stability": "development", + "value": "used" + }, + { + "brief": "Free", + "id": "free", + "stability": "development", + "value": "free" + } + ] + } + } + ], + "brief": "Logical disk space usage.", + "id": "metric.hw.logical_disk.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.logical_disk.raid_level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.logical_disk.state": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/logical-disk-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.logical_disk.usage", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RAID Level of the logical disk\n", + "examples": [ + "RAID0+1", + "RAID5", + "RAID10" + ], + "name": "hw.logical_disk.raid_level", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "State of the logical disk space usage\n", + "examples": [ + "used", + "free" + ], + "name": "hw.logical_disk.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Used", + "id": "used", + "stability": "development", + "value": "used" + }, + { + "brief": "Free", + "id": "free", + "stability": "development", + "value": "free" + } + ] + } + } + ], + "brief": "Logical disk space utilization as a fraction.", + "id": "metric.hw.logical_disk.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.logical_disk.raid_level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.logical_disk.state": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/logical-disk-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.logical_disk.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "attributes": [ + { + "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": "Name of the garbage collector cause.", + "examples": [ + "System.gc()", + "Allocation Failure" + ], + "name": "jvm.gc.cause", + "note": "Garbage collector cause is generally obtained via [GarbageCollectionNotificationInfo#getGcCause()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcCause()).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "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": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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": "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": { + "members": [ + { + "brief": "A thread that has not yet started is in this state.", + "id": "new", + "stability": "stable", + "value": "new" + }, + { + "brief": "A thread executing in the Java virtual machine is in this state.", + "id": "runnable", + "stability": "stable", + "value": "runnable" + }, + { + "brief": "A thread that is blocked waiting for a monitor lock is in this state.", + "id": "blocked", + "stability": "stable", + "value": "blocked" + }, + { + "brief": "A thread that is waiting indefinitely for another thread to perform a particular action is in this state.", + "id": "waiting", + "stability": "stable", + "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.", + "id": "timed_waiting", + "stability": "stable", + "value": "timed_waiting" + }, + { + "brief": "A thread that has exited is in this state.", + "id": "terminated", + "stability": "stable", + "value": "terminated" + } + ] + } + }, + { + "brief": "Name of the buffer pool.", + "examples": [ + "mapped", + "direct" + ], + "name": "jvm.buffer.pool.name", + "note": "Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines Java Virtual machine related attributes.\n", + "display_name": "Java Virtual Machine (JVM) Attributes", + "id": "registry.jvm", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Defines minimal set of attributes used by all messaging systems.\n", + "id": "attributes.messaging.trace.minimal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "A unique identifier for the client that consumes or produces a message.\n", + "examples": [ + "client-5", + "myhost@8742@s8083jm" + ], + "name": "messaging.client.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\".\n", + "examples": "MyConversationId", + "name": "messaging.message.conversation_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The number of messages sent, received, or processed in the scope of the batching operation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "messaging.batch.message_count", + "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", + "requirement_level": { + "conditionally_required": "If the span describes an operation on a batch of messages." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the consumer group with which a consumer is associated.\n", + "examples": [ + "my-group", + "indexer" + ], + "name": "messaging.consumer.group.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.consumer.group.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A boolean that is true if the message destination is anonymous (could be unnamed or have auto-generated name).", + "name": "messaging.destination.anonymous", + "requirement_level": { + "conditionally_required": "If value is `true`. When missing, the value is assumed to be `false`." + }, + "stability": "development", + "type": "boolean" + }, + { + "brief": "The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": { + "recommended": "When applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the destination subscription from which a message is consumed.", + "examples": [ + "subscription-a" + ], + "name": "messaging.destination.subscription.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.destination.subscription.name` is applicable and what it means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "Low cardinality representation of the messaging destination name", + "examples": [ + "/customers/{customerId}" + ], + "name": "messaging.destination.template", + "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", + "requirement_level": { + "conditionally_required": "If available. Instrumentations MUST NOT use `messaging.destination.name` as template unless low-cardinality of destination name is guaranteed.\n" + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A boolean that is true if the message destination is temporary and might not exist anymore after messages are processed.", + "name": "messaging.destination.temporary", + "requirement_level": { + "conditionally_required": "If value is `true`. When missing, the value is assumed to be `false`." + }, + "stability": "development", + "type": "boolean" + }, + { + "brief": "The size of the message body in bytes.\n", + "examples": 1439, + "name": "messaging.message.body.size", + "note": "This can refer to both the compressed or uncompressed body size. If both sizes are known, the uncompressed\nbody size should be used.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The size of the message body and metadata in bytes.\n", + "examples": 2738, + "name": "messaging.message.envelope.size", + "note": "This can refer to both the compressed or uncompressed size. If both sizes are known, the uncompressed\nsize should be used.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The messaging system as identified by the client instrumentation.", + "name": "messaging.system", + "note": "The actual messaging system may differ from the one known by the client. For example, when using Kafka client libraries to communicate with Azure Event Hubs, the `messaging.system` is set to `kafka` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "brief": "Apache ActiveMQ", + "id": "activemq", + "stability": "development", + "value": "activemq" + }, + { + "brief": "Amazon Simple Notification Service (SNS)", + "id": "aws.sns", + "stability": "development", + "value": "aws.sns" + }, + { + "brief": "Amazon Simple Queue Service (SQS)", + "id": "aws_sqs", + "stability": "development", + "value": "aws_sqs" + }, + { + "brief": "Azure Event Grid", + "id": "eventgrid", + "stability": "development", + "value": "eventgrid" + }, + { + "brief": "Azure Event Hubs", + "id": "eventhubs", + "stability": "development", + "value": "eventhubs" + }, + { + "brief": "Azure Service Bus", + "id": "servicebus", + "stability": "development", + "value": "servicebus" + }, + { + "brief": "Google Cloud Pub/Sub", + "id": "gcp_pubsub", + "stability": "development", + "value": "gcp_pubsub" + }, + { + "brief": "Java Message Service", + "id": "jms", + "stability": "development", + "value": "jms" + }, + { + "brief": "Apache Kafka", + "id": "kafka", + "stability": "development", + "value": "kafka" + }, + { + "brief": "RabbitMQ", + "id": "rabbitmq", + "stability": "development", + "value": "rabbitmq" + }, + { + "brief": "Apache RocketMQ", + "id": "rocketmq", + "stability": "development", + "value": "rocketmq" + }, + { + "brief": "Apache Pulsar", + "id": "pulsar", + "stability": "development", + "value": "pulsar" + } + ] + } + }, + { + "brief": "Peer address of the messaging intermediary node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `network.peer.*` attributes are applicable.\nNetwork peer address and port are important when the application interacts with individual intermediary nodes directly,\nIf a messaging operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": { + "recommended": "If applicable for this messaging system." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port of the messaging intermediary node where the operation was performed.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "if and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Defines a full set of attributes used in messaging systems.\n", + "id": "messaging.attributes", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.client.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.anonymous": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.temporary": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.conversation_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.message.envelope.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "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", + "note": "If an operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Attributes that describe messaging operation along with network information.", + "id": "messaging.network.attributes", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The size of the message body in bytes.\n", + "examples": 1439, + "name": "messaging.message.body.size", + "note": "This can refer to both the compressed or uncompressed body size. If both sizes are known, the uncompressed\nbody size should be used.\n", + "requirement_level": "opt_in", + "stability": "development", + "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", + "note": "If an operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The message destination name", + "examples": [ + "direct_logs:warning", + "logs" + ], + "name": "messaging.destination.name", + "note": "In RabbitMQ, the destination is defined by an *exchange*, a *routing key* and for consumers, a *queue*.\n\n`messaging.destination.name` SHOULD be set to:\n\n- **On the producer side**: `{exchange}:{routing key}` when both values are present and non-empty.\nWhen only one is available, only that value SHOULD be used. E.g., `{exchange}` or `{routing key}`.\nOtherwise: `amq.default` when the default exchange is used and no routing key is provided\n\n- **On the consumer side**: `{exchange}:{routing key}:{queue}` when all values are present and non-empty.\nIf any has an empty value (e.g., the default exchange is used) it SHOULD be omitted.\nFor cases when `{routing key}` and `{queue}` are equal, only one of them SHOULD\nbe used, e.g., `{exchange}:{routing key}`.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "Message [correlation Id](https://www.rabbitmq.com/tutorials/tutorial-six-java#correlation-id) property.\n", + "examples": "MyConversationId", + "name": "messaging.message.conversation_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RabbitMQ message routing key.\n", + "examples": "myKey", + "name": "messaging.rabbitmq.destination.routing_key", + "requirement_level": { + "conditionally_required": "If not empty." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "RabbitMQ message delivery tag\n", + "examples": 123, + "name": "messaging.rabbitmq.message.delivery_tag", + "requirement_level": { + "conditionally_required": "When available." + }, + "stability": "development", + "type": "int" + } + ], + "brief": "Attributes for RabbitMQ\n", + "id": "messaging.rabbitmq", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.conversation_id": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.rabbitmq.destination.routing_key": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rabbitmq" + }, + "messaging.rabbitmq.message.delivery_tag": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rabbitmq" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "A unique identifier for the client that consumes or produces a message.\n", + "examples": [ + "client-5", + "myhost@8742@s8083jm" + ], + "name": "messaging.client.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The number of messages sent, received, or processed in the scope of the batching operation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "messaging.batch.message_count", + "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", + "requirement_level": { + "conditionally_required": "If the span describes an operation on a batch of messages." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Kafka [consumer group id](https://docs.confluent.io/platform/current/clients/consumer.html).", + "examples": [ + "my-group", + "indexer" + ], + "name": "messaging.consumer.group.name", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "String representation of the partition id the message (or batch) is sent to or received from.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "Message keys in Kafka are used for grouping alike messages to ensure they\u0027re processed on the same partition. They differ from `messaging.message.id` in that they\u0027re not unique. If the key is `null`, the attribute MUST NOT be set.\n", + "examples": "myKey", + "name": "messaging.kafka.message.key", + "note": "If the key type is not string, it\u0027s string representation has to be supplied for the attribute. If the key has no unambiguous, canonical string form, don\u0027t include its value.\n", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "A boolean that is true if the message is a tombstone.", + "name": "messaging.kafka.message.tombstone", + "requirement_level": { + "conditionally_required": "If value is `true`. When missing, the value is assumed to be `false`." + }, + "stability": "development", + "type": "boolean" + }, + { + "brief": "The offset of a record in the corresponding Kafka partition.\n", + "examples": 42, + "name": "messaging.kafka.offset", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The size of the message body in bytes. Only applicable for spans describing single message operations.", + "examples": 1439, + "name": "messaging.message.body.size", + "note": "This can refer to both the compressed or uncompressed body size. If both sizes are known, the uncompressed\nbody size should be used.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + } + ], + "brief": "Attributes for Apache Kafka\n", + "id": "messaging.kafka", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.client.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.kafka.message.key": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.kafka" + }, + "messaging.kafka.message.tombstone": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.kafka" + }, + "messaging.kafka.offset": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.kafka" + }, + "messaging.message.body.size": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "A unique identifier for the client that consumes or produces a message.\n", + "examples": [ + "client-5", + "myhost@8742@s8083jm" + ], + "name": "messaging.client.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Model of message consumption. This only applies to consumer spans.\n", + "name": "messaging.rocketmq.consumption_model", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Clustering consumption model", + "id": "clustering", + "stability": "development", + "value": "clustering" + }, + { + "brief": "Broadcasting consumption model", + "id": "broadcasting", + "stability": "development", + "value": "broadcasting" + } + ] + } + }, + { + "brief": "Key(s) of message, another way to mark message besides message id.\n", + "examples": [ + [ + "keyA", + "keyB" + ] + ], + "name": "messaging.rocketmq.message.keys", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The secondary classifier of message besides topic.\n", + "examples": "tagA", + "name": "messaging.rocketmq.message.tag", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of message.\n", + "name": "messaging.rocketmq.message.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Normal message", + "id": "normal", + "stability": "development", + "value": "normal" + }, + { + "brief": "FIFO message", + "id": "fifo", + "stability": "development", + "value": "fifo" + }, + { + "brief": "Delay message", + "id": "delay", + "stability": "development", + "value": "delay" + }, + { + "brief": "Transaction message", + "id": "transaction", + "stability": "development", + "value": "transaction" + } + ] + } + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The number of messages sent, received, or processed in the scope of the batching operation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "messaging.batch.message_count", + "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", + "requirement_level": { + "conditionally_required": "If the span describes an operation on a batch of messages." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The size of the message body in bytes.\n", + "examples": 1439, + "name": "messaging.message.body.size", + "note": "This can refer to both the compressed or uncompressed body size. If both sizes are known, the uncompressed\nbody size should be used.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "RocketMQ [consumer group name](https://rocketmq.apache.org/docs/domainModel/07consumergroup).", + "examples": [ + "my-group", + "indexer" + ], + "name": "messaging.consumer.group.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "The delay time level for delay message, which determines the message delay time.\n", + "examples": 3, + "name": "messaging.rocketmq.message.delay_time_level", + "requirement_level": { + "conditionally_required": "If the message type is delay and delivery timestamp is not specified." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The timestamp in milliseconds that the delay message is expected to be delivered to consumer.\n", + "examples": 1665987217045, + "name": "messaging.rocketmq.message.delivery_timestamp", + "requirement_level": { + "conditionally_required": "If the message type is delay and delay time level is not specified." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "It is essential for FIFO message. Messages that belong to the same message group are always processed one by one within the same consumer group.\n", + "examples": "myMessageGroup", + "name": "messaging.rocketmq.message.group", + "requirement_level": { + "conditionally_required": "If the message type is FIFO." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Namespace of RocketMQ resources, resources in different namespaces are individual.\n", + "examples": "myNamespace", + "name": "messaging.rocketmq.namespace", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes for Apache RocketMQ\n", + "id": "messaging.rocketmq", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.client.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.rocketmq.consumption_model": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.delay_time_level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.delivery_timestamp": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.group": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.keys": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.tag": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.type": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rocketmq" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The ack id for a given message.\n", + "examples": "ack_id", + "name": "messaging.gcp_pubsub.message.ack_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ack deadline in seconds set for the modify ack deadline request.\n", + "examples": 10, + "name": "messaging.gcp_pubsub.message.ack_deadline", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The delivery attempt for a given message.\n", + "examples": 2, + "name": "messaging.gcp_pubsub.message.delivery_attempt", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The number of messages sent, received, or processed in the scope of the batching operation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "messaging.batch.message_count", + "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", + "requirement_level": { + "conditionally_required": "If the span describes an operation on a batch of messages." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Google Pub/Sub [subscription name](https://cloud.google.com/pubsub/docs/subscription-overview).", + "examples": [ + "subscription-a" + ], + "name": "messaging.destination.subscription.name", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "The ordering key for a given message. If the attribute is not present, the message does not have an ordering key.\n", + "examples": "ordering_key", + "name": "messaging.gcp_pubsub.message.ordering_key", + "requirement_level": { + "conditionally_required": "If the message type has an ordering key set." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "note": "The `messaging.operation.name` has the following list of well-known values in the context of Google Pub/Sub.\nIf one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.\n\n- `ack` and `nack` for settlement operations\n- `send` for publishing operations\n- `modack` for extending the lease for a single message or batch of messages\n- `subscribe` for operations that represent the time from after the message was received to when the message is acknowledged, negatively acknowledged, or expired.\n- `create` and `receive` for [common messaging operations](/docs/messaging/messaging-spans.md#operation-types)\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes for Google Cloud Pub/Sub\n", + "id": "messaging.gcp_pubsub", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.gcp_pubsub.message.ack_deadline": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.gcp_pubsub" + }, + "messaging.gcp_pubsub.message.ack_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.gcp_pubsub" + }, + "messaging.gcp_pubsub.message.delivery_attempt": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.gcp_pubsub" + }, + "messaging.gcp_pubsub.message.ordering_key": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.gcp_pubsub" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The UTC epoch seconds at which the message has been accepted and stored in the entity.\n", + "examples": 1701393730, + "name": "messaging.servicebus.message.enqueued_time", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The number of messages sent, received, or processed in the scope of the batching operation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "messaging.batch.message_count", + "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", + "requirement_level": { + "conditionally_required": "If the span describes an operation on a batch of messages." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Azure Service Bus [subscription name](https://learn.microsoft.com/azure/service-bus-messaging/service-bus-queues-topics-subscriptions#topics-and-subscriptions).", + "examples": [ + "subscription-a" + ], + "name": "messaging.destination.subscription.name", + "requirement_level": { + "conditionally_required": "If messages are received from the subscription." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "Message [correlation Id](https://learn.microsoft.com/azure/service-bus-messaging/service-bus-messages-payloads#message-routing-and-correlation) property.", + "examples": "MyConversationId", + "name": "messaging.message.conversation_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Azure Service Bus operation name.", + "examples": [ + "send", + "receive", + "complete", + "process", + "peek" + ], + "name": "messaging.operation.name", + "note": "The operation name SHOULD match one of the following values:\n\n- sender operations: `send`, `schedule`, `cancel_scheduled`\n- transaction operations: `create_transaction`, `commit_transaction`, `rollback_transaction`\n- receiver operation: `receive`, `peek`, `receive_deferred`, `renew_message_lock`\n- settlement operations: `abandon`, `complete`, `defer`, `dead_letter`, `delete`\n- session operations: `accept_session`, `get_session_state`, `set_session_state`, `renew_session_lock`\n\nIf none of the above operation names apply, the attribute SHOULD be set\nto the name of the client method in snake_case.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "Describes the [settlement type](https://learn.microsoft.com/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock).\n", + "name": "messaging.servicebus.disposition_status", + "requirement_level": { + "conditionally_required": "if and only if `messaging.operation` is `settle`." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Message is completed", + "id": "complete", + "stability": "development", + "value": "complete" + }, + { + "brief": "Message is abandoned", + "id": "abandon", + "stability": "development", + "value": "abandon" + }, + { + "brief": "Message is sent to dead letter queue", + "id": "dead_letter", + "stability": "development", + "value": "dead_letter" + }, + { + "brief": "Message is deferred", + "id": "defer", + "stability": "development", + "value": "defer" + } + ] + } + }, + { + "brief": "Number of deliveries that have been attempted for this message.\n", + "examples": 2, + "name": "messaging.servicebus.message.delivery_count", + "requirement_level": { + "conditionally_required": "If delivery count is available and is bigger than 0." + }, + "stability": "development", + "type": "int" + } + ], + "brief": "Attributes for Azure Service Bus\n", + "id": "messaging.servicebus", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.conversation_id": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.servicebus.disposition_status": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.servicebus" + }, + "messaging.servicebus.message.delivery_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.servicebus" + }, + "messaging.servicebus.message.enqueued_time": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.servicebus" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The UTC epoch seconds at which the message has been accepted and stored in the entity.\n", + "examples": 1701393730, + "name": "messaging.eventhubs.message.enqueued_time", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The number of messages sent, received, or processed in the scope of the batching operation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "messaging.batch.message_count", + "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", + "requirement_level": { + "conditionally_required": "If the span describes an operation on a batch of messages." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Azure Event Hubs [consumer group name](https://learn.microsoft.com/azure/event-hubs/event-hubs-features#consumer-groups).", + "examples": [ + "my-group", + "indexer" + ], + "name": "messaging.consumer.group.name", + "requirement_level": { + "conditionally_required": "On consumer spans." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "String representation of the partition id messages are sent to or received from, unique within the Event Hub.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "Azure Event Hubs operation name.", + "examples": [ + "send", + "receive", + "checkpoint" + ], + "name": "messaging.operation.name", + "note": "The operation name SHOULD match one of the following values:\n\n- `send`\n- `receive`\n- `process`\n- `checkpoint`\n- `get_partition_properties`\n- `get_event_hub_properties`\n\nIf none of the above operation names apply, the attribute SHOULD be set\nto the name of the client method in snake_case.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes for Azure Event Hubs\n", + "id": "messaging.eventhubs", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.eventhubs.message.enqueued_time": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.eventhubs" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The URL of the AWS SQS Queue. It\u0027s a unique identifier for a queue in Amazon Simple Queue Service (SQS) and is used to access the queue and perform actions on it.\n", + "examples": [ + "https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue" + ], + "name": "aws.sqs.queue.url", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Attributes that exist for SQS request types.", + "id": "messaging.aws.sqs", + "lineage": { + "attributes": { + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.sqs.queue.url": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.sqs" + }, + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ARN of the AWS SNS Topic. An Amazon SNS [topic](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) is a logical access point that acts as a communication channel.\n", + "examples": [ + "arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE" + ], + "name": "aws.sns.topic.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "If span describes operation on a single message or if the value applies to all messages in the batch." + }, + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": { + "recommended": "If span describes operation on a single message." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Attributes that exist for SNS request types.", + "id": "messaging.aws.sns", + "lineage": { + "attributes": { + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.sns.topic.arn": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.sns" + }, + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the number of messages received per RPC.", + "deprecated": { + "note": "Removed, no replacement at this time.", + "reason": "obsoleted" + }, + "id": "metric.rpc.client.requests_per_rpc", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.client.requests_per_rpc", + "note": "Should be 1 for all non-streaming RPCs.\n\n**Streaming**: This metric is required for server and client streaming RPCs\n", + "stability": "development", + "type": "metric", + "unit": "{count}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the number of messages sent per RPC.", + "deprecated": { + "note": "Removed, no replacement at this time.", + "reason": "obsoleted" + }, + "id": "metric.rpc.client.responses_per_rpc", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.client.responses_per_rpc", + "note": "Should be 1 for all non-streaming RPCs.\n\n**Streaming**: This metric is required for server and client streaming RPCs\n", + "stability": "development", + "type": "metric", + "unit": "{count}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the number of messages received per RPC.", + "deprecated": { + "note": "Removed, no replacement at this time.", + "reason": "obsoleted" + }, + "id": "metric.rpc.server.requests_per_rpc", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.server.requests_per_rpc", + "note": "Should be 1 for all non-streaming RPCs.\n\n**Streaming** : This metric is required for server and client streaming RPCs\n", + "stability": "development", + "type": "metric", + "unit": "{count}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the number of messages sent per RPC.", + "deprecated": { + "note": "Removed, no replacement at this time.", + "reason": "obsoleted" + }, + "id": "metric.rpc.server.responses_per_rpc", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.server.responses_per_rpc", + "note": "Should be 1 for all non-streaming RPCs.\n\n**Streaming**: This metric is required for server and client streaming RPCs\n", + "stability": "development", + "type": "metric", + "unit": "{count}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The time the system has been running.", + "entity_associations": [ + "host" + ], + "id": "metric.system.uptime", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.uptime", + "note": "Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available.\nThe actual accuracy would depend on the instrumentation and operating system.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Reports the number of actual physical processor cores on the hardware.", + "entity_associations": [ + "host" + ], + "id": "metric.system.cpu.physical.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.cpu.physical.count", + "note": "Calculated by multiplying the number of sockets by the number of cores per socket", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Reports the number of logical (virtual) processor cores created by the operating system to manage multitasking.", + "entity_associations": [ + "host" + ], + "id": "metric.system.cpu.logical.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.cpu.logical.count", + "note": "Calculated by multiplying the number of sockets by the number of cores per socket, and then by the number of threads per core", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The mode of the CPU", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "note": "Following states SHOULD be used: `user`, `system`, `nice`, `idle`, `iowait`, `interrupt`, `steal`", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + }, + { + "brief": "The logical CPU number [0..n-1]", + "examples": [ + 1 + ], + "name": "cpu.logical_number", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + } + ], + "brief": "Seconds each logical CPU spent on each mode.", + "entity_associations": [ + "host" + ], + "id": "metric.system.cpu.time", + "instrument": "counter", + "lineage": { + "attributes": { + "cpu.logical_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cpu" + }, + "cpu.mode": { + "inherited_fields": [ + "brief", + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "note" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.cpu.time", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The logical CPU number [0..n-1]", + "examples": [ + 1 + ], + "name": "cpu.logical_number", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The mode of the CPU", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "note": "Following modes SHOULD be used: `user`, `system`, `nice`, `idle`, `iowait`, `interrupt`, `steal`", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + } + ], + "brief": "For each logical CPU, the utilization is calculated as the change in cumulative CPU time (cpu.time) over a measurement interval, divided by the elapsed time.", + "entity_associations": [ + "host" + ], + "id": "metric.system.cpu.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "cpu.logical_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cpu" + }, + "cpu.mode": { + "inherited_fields": [ + "brief", + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "note" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.cpu.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The logical CPU number [0..n-1]", + "examples": [ + 1 + ], + "name": "cpu.logical_number", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "Operating frequency of the logical CPU in Hertz.", + "entity_associations": [ + "host" + ], + "id": "metric.system.cpu.frequency", + "instrument": "gauge", + "lineage": { + "attributes": { + "cpu.logical_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.cpu.frequency", + "stability": "development", + "type": "metric", + "unit": "Hz" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The memory state", + "examples": [ + "free", + "cached" + ], + "name": "system.memory.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Actual used virtual memory in bytes.", + "id": "used", + "note": "Calculation based on the operating system metrics. On Linux, this corresponds to \"MemTotal - MemAvailable\" from /proc/meminfo, which more accurately reflects memory in active use by applications compared to older formulas based on free, cached, and buffers. If MemAvailable is not available, a fallback to those older formulas may be used.\n", + "stability": "development", + "value": "used" + }, + { + "id": "free", + "stability": "development", + "value": "free" + }, + { + "deprecated": { + "note": "Removed, report shared memory usage with `metric.system.memory.shared` metric", + "reason": "uncategorized" + }, + "id": "shared", + "stability": "development", + "value": "shared" + }, + { + "id": "buffers", + "stability": "development", + "value": "buffers" + }, + { + "id": "cached", + "stability": "development", + "value": "cached" + } + ] + } + } + ], + "brief": "Reports memory in use by state.", + "entity_associations": [ + "host" + ], + "id": "metric.system.memory.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "system.memory.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.memory" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.memory.usage", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Total virtual memory available in the system.", + "entity_associations": [ + "host" + ], + "id": "metric.system.memory.limit", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.memory.limit", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Shared memory used (mostly by tmpfs).", + "entity_associations": [ + "host" + ], + "id": "metric.system.memory.shared", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.memory.shared", + "note": "Equivalent of `shared` from [`free` command](https://man7.org/linux/man-pages/man1/free.1.html) or\n`Shmem` from [`/proc/meminfo`](https://man7.org/linux/man-pages/man5/proc.5.html)\"\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The memory state", + "examples": [ + "free", + "cached" + ], + "name": "system.memory.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Actual used virtual memory in bytes.", + "id": "used", + "note": "Calculation based on the operating system metrics. On Linux, this corresponds to \"MemTotal - MemAvailable\" from /proc/meminfo, which more accurately reflects memory in active use by applications compared to older formulas based on free, cached, and buffers. If MemAvailable is not available, a fallback to those older formulas may be used.\n", + "stability": "development", + "value": "used" + }, + { + "id": "free", + "stability": "development", + "value": "free" + }, + { + "deprecated": { + "note": "Removed, report shared memory usage with `metric.system.memory.shared` metric", + "reason": "uncategorized" + }, + "id": "shared", + "stability": "development", + "value": "shared" + }, + { + "id": "buffers", + "stability": "development", + "value": "buffers" + }, + { + "id": "cached", + "stability": "development", + "value": "cached" + } + ] + } + } + ], + "brief": "Percentage of memory bytes in use.", + "entity_associations": [ + "host" + ], + "id": "metric.system.memory.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "system.memory.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.memory" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.memory.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The memory paging state", + "examples": [ + "free" + ], + "name": "system.paging.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "used", + "stability": "development", + "value": "used" + }, + { + "id": "free", + "stability": "development", + "value": "free" + } + ] + } + }, + { + "brief": "Unique identifier for the device responsible for managing paging operations.", + "examples": [ + "/dev/dm-0" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Unix swap or windows pagefile usage.", + "entity_associations": [ + "host" + ], + "id": "metric.system.paging.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "system.device": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.system" + }, + "system.paging.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.paging" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.paging.usage", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The memory paging state", + "examples": [ + "free" + ], + "name": "system.paging.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "used", + "stability": "development", + "value": "used" + }, + { + "id": "free", + "stability": "development", + "value": "free" + } + ] + } + }, + { + "brief": "Unique identifier for the device responsible for managing paging operations.", + "examples": [ + "/dev/dm-0" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Swap (unix) or pagefile (windows) utilization.", + "entity_associations": [ + "host" + ], + "id": "metric.system.paging.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "system.device": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.system" + }, + "system.paging.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.paging" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.paging.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The paging fault type", + "examples": [ + "minor" + ], + "name": "system.paging.fault.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "major", + "stability": "development", + "value": "major" + }, + { + "id": "minor", + "stability": "development", + "value": "minor" + } + ] + } + } + ], + "brief": "The number of page faults.", + "entity_associations": [ + "host" + ], + "id": "metric.system.paging.faults", + "instrument": "counter", + "lineage": { + "attributes": { + "system.paging.fault.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.paging" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.paging.faults", + "stability": "development", + "type": "metric", + "unit": "{fault}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The paging fault type", + "examples": [ + "minor" + ], + "name": "system.paging.fault.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "major", + "stability": "development", + "value": "major" + }, + { + "id": "minor", + "stability": "development", + "value": "minor" + } + ] + } + }, + { + "brief": "The paging access direction", + "examples": [ + "in" + ], + "name": "system.paging.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "in", + "stability": "development", + "value": "in" + }, + { + "id": "out", + "stability": "development", + "value": "out" + } + ] + } + } + ], + "brief": "The number of paging operations.", + "entity_associations": [ + "host" + ], + "id": "metric.system.paging.operations", + "instrument": "counter", + "lineage": { + "attributes": { + "system.paging.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.paging" + }, + "system.paging.fault.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.paging" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.paging.operations", + "stability": "development", + "type": "metric", + "unit": "{operation}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The disk IO operation direction.", + "examples": [ + "read" + ], + "name": "disk.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "read", + "stability": "development", + "value": "read" + }, + { + "id": "write", + "stability": "development", + "value": "write" + } + ] + } + }, + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Disk bytes transferred.", + "entity_associations": [ + "host" + ], + "id": "metric.system.disk.io", + "instrument": "counter", + "lineage": { + "attributes": { + "disk.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.disk" + }, + "system.device": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.disk.io", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The disk IO operation direction.", + "examples": [ + "read" + ], + "name": "disk.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "read", + "stability": "development", + "value": "read" + }, + { + "id": "write", + "stability": "development", + "value": "write" + } + ] + } + }, + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Disk operations count.", + "entity_associations": [ + "host" + ], + "id": "metric.system.disk.operations", + "instrument": "counter", + "lineage": { + "attributes": { + "disk.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.disk" + }, + "system.device": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.disk.operations", + "stability": "development", + "type": "metric", + "unit": "{operation}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Time disk spent activated.", + "entity_associations": [ + "host" + ], + "id": "metric.system.disk.io_time", + "instrument": "counter", + "lineage": { + "attributes": { + "system.device": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.disk.io_time", + "note": "The real elapsed time (\"wall clock\") used in the I/O path (time from operations running in parallel are not counted). Measured as:\n\n- Linux: Field 13 from [procfs-diskstats](https://www.kernel.org/doc/Documentation/ABI/testing/procfs-diskstats)\n- Windows: The complement of\n [\"Disk\\% Idle Time\"](https://learn.microsoft.com/archive/blogs/askcore/windows-performance-monitor-disk-counters-explained#windows-performance-monitor-disk-counters-explained)\n performance counter: `uptime * (100 - \"Disk\\% Idle Time\") / 100`\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The disk IO operation direction.", + "examples": [ + "read" + ], + "name": "disk.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "read", + "stability": "development", + "value": "read" + }, + { + "id": "write", + "stability": "development", + "value": "write" + } + ] + } + }, + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Sum of the time each operation took to complete.", + "entity_associations": [ + "host" + ], + "id": "metric.system.disk.operation_time", + "instrument": "counter", + "lineage": { + "attributes": { + "disk.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.disk" + }, + "system.device": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.disk.operation_time", + "note": "Because it is the sum of time each request took, parallel-issued requests each contribute to make the count grow. Measured as:\n\n- Linux: Fields 7 \u0026 11 from [procfs-diskstats](https://www.kernel.org/doc/Documentation/ABI/testing/procfs-diskstats)\n- Windows: \"Avg. Disk sec/Read\" perf counter multiplied by \"Disk Reads/sec\" perf counter (similar for Writes)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The disk IO operation direction.", + "examples": [ + "read" + ], + "name": "disk.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "read", + "stability": "development", + "value": "read" + }, + { + "id": "write", + "stability": "development", + "value": "write" + } + ] + } + }, + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of disk reads/writes merged into single physical disk access operations.", + "entity_associations": [ + "host" + ], + "id": "metric.system.disk.merged", + "instrument": "counter", + "lineage": { + "attributes": { + "disk.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.disk" + }, + "system.device": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.disk.merged", + "stability": "development", + "type": "metric", + "unit": "{operation}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The total storage capacity of the disk.", + "entity_associations": [ + "host" + ], + "id": "metric.system.disk.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "system.device": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.disk.limit", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The filesystem state", + "examples": [ + "used" + ], + "name": "system.filesystem.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "used", + "stability": "development", + "value": "used" + }, + { + "id": "free", + "stability": "development", + "value": "free" + }, + { + "id": "reserved", + "stability": "development", + "value": "reserved" + } + ] + } + }, + { + "brief": "The filesystem type", + "examples": [ + "ext4" + ], + "name": "system.filesystem.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "fat32", + "stability": "development", + "value": "fat32" + }, + { + "id": "exfat", + "stability": "development", + "value": "exfat" + }, + { + "id": "ntfs", + "stability": "development", + "value": "ntfs" + }, + { + "id": "refs", + "stability": "development", + "value": "refs" + }, + { + "id": "hfsplus", + "stability": "development", + "value": "hfsplus" + }, + { + "id": "ext4", + "stability": "development", + "value": "ext4" + } + ] + } + }, + { + "brief": "The filesystem mode", + "examples": [ + "rw, ro" + ], + "name": "system.filesystem.mode", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The filesystem mount path", + "examples": [ + "/mnt/data" + ], + "name": "system.filesystem.mountpoint", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Identifier for the device where the filesystem resides.", + "examples": [ + "/dev/sda", + "\\network-drive" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Reports a filesystem\u0027s space usage across different states.", + "entity_associations": [ + "host" + ], + "id": "metric.system.filesystem.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "system.device": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.system" + }, + "system.filesystem.mode": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + }, + "system.filesystem.mountpoint": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + }, + "system.filesystem.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + }, + "system.filesystem.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.filesystem.usage", + "note": "The sum of all `system.filesystem.usage` values over the different `system.filesystem.state` attributes\nSHOULD equal the total storage capacity of the filesystem, that is `system.filesystem.limit`.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The filesystem state", + "examples": [ + "used" + ], + "name": "system.filesystem.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "used", + "stability": "development", + "value": "used" + }, + { + "id": "free", + "stability": "development", + "value": "free" + }, + { + "id": "reserved", + "stability": "development", + "value": "reserved" + } + ] + } + }, + { + "brief": "The filesystem type", + "examples": [ + "ext4" + ], + "name": "system.filesystem.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "fat32", + "stability": "development", + "value": "fat32" + }, + { + "id": "exfat", + "stability": "development", + "value": "exfat" + }, + { + "id": "ntfs", + "stability": "development", + "value": "ntfs" + }, + { + "id": "refs", + "stability": "development", + "value": "refs" + }, + { + "id": "hfsplus", + "stability": "development", + "value": "hfsplus" + }, + { + "id": "ext4", + "stability": "development", + "value": "ext4" + } + ] + } + }, + { + "brief": "The filesystem mode", + "examples": [ + "rw, ro" + ], + "name": "system.filesystem.mode", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The filesystem mount path", + "examples": [ + "/mnt/data" + ], + "name": "system.filesystem.mountpoint", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Identifier for the device where the filesystem resides.", + "examples": [ + "/dev/sda", + "\\network-drive" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Fraction of filesystem bytes used.", + "entity_associations": [ + "host" + ], + "id": "metric.system.filesystem.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "system.device": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.system" + }, + "system.filesystem.mode": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + }, + "system.filesystem.mountpoint": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + }, + "system.filesystem.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + }, + "system.filesystem.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.filesystem.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The filesystem type", + "examples": [ + "ext4" + ], + "name": "system.filesystem.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "fat32", + "stability": "development", + "value": "fat32" + }, + { + "id": "exfat", + "stability": "development", + "value": "exfat" + }, + { + "id": "ntfs", + "stability": "development", + "value": "ntfs" + }, + { + "id": "refs", + "stability": "development", + "value": "refs" + }, + { + "id": "hfsplus", + "stability": "development", + "value": "hfsplus" + }, + { + "id": "ext4", + "stability": "development", + "value": "ext4" + } + ] + } + }, + { + "brief": "The filesystem mode", + "examples": [ + "rw, ro" + ], + "name": "system.filesystem.mode", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The filesystem mount path", + "examples": [ + "/mnt/data" + ], + "name": "system.filesystem.mountpoint", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Identifier for the device where the filesystem resides.", + "examples": [ + "/dev/sda", + "\\network-drive" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The total storage capacity of the filesystem.", + "entity_associations": [ + "host" + ], + "id": "metric.system.filesystem.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "system.device": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.system" + }, + "system.filesystem.mode": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + }, + "system.filesystem.mountpoint": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + }, + "system.filesystem.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.filesystem" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.filesystem.limit", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Count of packets that are dropped or discarded even though there was no error.", + "entity_associations": [ + "host" + ], + "id": "metric.system.network.packet.dropped", + "instrument": "counter", + "lineage": { + "attributes": { + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.network.packet.dropped", + "note": "Measured as:\n\n- Linux: the `drop` column in `/proc/net/dev` ([source](https://web.archive.org/web/20180321091318/http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html))\n- Windows: [`InDiscards`/`OutDiscards`](https://docs.microsoft.com/windows/win32/api/netioapi/ns-netioapi-mib_if_row2)\n from [`GetIfEntry2`](https://docs.microsoft.com/windows/win32/api/netioapi/nf-netioapi-getifentry2)\n", + "stability": "development", + "type": "metric", + "unit": "{packet}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of packets transferred.", + "entity_associations": [ + "host" + ], + "id": "metric.system.network.packet.count", + "instrument": "counter", + "lineage": { + "attributes": { + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "system.device": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.network.packet.count", + "stability": "development", + "type": "metric", + "unit": "{packet}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Count of network errors detected.", + "entity_associations": [ + "host" + ], + "id": "metric.system.network.errors", + "instrument": "counter", + "lineage": { + "attributes": { + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.network.errors", + "note": "Measured as:\n\n- Linux: the `errs` column in `/proc/net/dev` ([source](https://web.archive.org/web/20180321091318/http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html)).\n- Windows: [`InErrors`/`OutErrors`](https://docs.microsoft.com/windows/win32/api/netioapi/ns-netioapi-mib_if_row2)\n from [`GetIfEntry2`](https://docs.microsoft.com/windows/win32/api/netioapi/nf-netioapi-getifentry2).\n", + "stability": "development", + "type": "metric", + "unit": "{error}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of bytes transmitted and received.", + "entity_associations": [ + "host" + ], + "id": "metric.system.network.io", + "instrument": "counter", + "lineage": { + "attributes": { + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.network.io", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The state of network connection", + "examples": [ + "close_wait" + ], + "name": "network.connection.state", + "note": "Connection states are defined as part of the [rfc9293](https://datatracker.ietf.org/doc/html/rfc9293#section-3.3.2)", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "closed", + "stability": "development", + "value": "closed" + }, + { + "id": "close_wait", + "stability": "development", + "value": "close_wait" + }, + { + "id": "closing", + "stability": "development", + "value": "closing" + }, + { + "id": "established", + "stability": "development", + "value": "established" + }, + { + "id": "fin_wait_1", + "stability": "development", + "value": "fin_wait_1" + }, + { + "id": "fin_wait_2", + "stability": "development", + "value": "fin_wait_2" + }, + { + "id": "last_ack", + "stability": "development", + "value": "last_ack" + }, + { + "id": "listen", + "stability": "development", + "value": "listen" + }, + { + "id": "syn_received", + "stability": "development", + "value": "syn_received" + }, + { + "id": "syn_sent", + "stability": "development", + "value": "syn_sent" + }, + { + "id": "time_wait", + "stability": "development", + "value": "time_wait" + } + ] + } + } + ], + "brief": "The number of connections.", + "entity_associations": [ + "host" + ], + "id": "metric.system.network.connection.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.connection.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.network.connection.count", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The process state, e.g., [Linux Process State Codes](https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES)\n", + "examples": [ + "running" + ], + "name": "process.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "running", + "stability": "development", + "value": "running" + }, + { + "id": "sleeping", + "stability": "development", + "value": "sleeping" + }, + { + "id": "stopped", + "stability": "development", + "value": "stopped" + }, + { + "id": "defunct", + "stability": "development", + "value": "defunct" + } + ] + } + } + ], + "brief": "Total number of processes in each state.", + "entity_associations": [ + "host" + ], + "id": "metric.system.process.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "process.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.process" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.process.count", + "stability": "development", + "type": "metric", + "unit": "{process}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Total number of processes created over uptime of the host.", + "entity_associations": [ + "host" + ], + "id": "metric.system.process.created", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.process.created", + "stability": "development", + "type": "metric", + "unit": "{process}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "An estimate of how much memory is available for starting new applications, without causing swapping.", + "entity_associations": [ + "host" + ], + "id": "metric.system.linux.memory.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.linux.memory.available", + "note": "This is an alternative to `system.memory.usage` metric with `state=free`.\nLinux starting from 3.14 exports \"available\" memory. It takes \"free\" memory as a baseline, and then factors in kernel-specific values.\nThis is supposed to be more accurate than just \"free\" memory.\nFor reference, see the calculations [here](https://superuser.com/a/980821).\nSee also `MemAvailable` in [/proc/meminfo](https://man7.org/linux/man-pages/man5/proc.5.html).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The Linux Slab memory state", + "examples": [ + "reclaimable", + "unreclaimable" + ], + "name": "linux.memory.slab.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "reclaimable", + "stability": "development", + "value": "reclaimable" + }, + { + "id": "unreclaimable", + "stability": "development", + "value": "unreclaimable" + } + ] + } + } + ], + "brief": "Reports the memory used by the Linux kernel for managing caches of frequently used objects.", + "entity_associations": [ + "host" + ], + "id": "metric.system.linux.memory.slab.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "linux.memory.slab.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.linux.memory" + } + }, + "provenance": { + "path": "/home/weaver/source/system/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "system.linux.memory.slab.usage", + "note": "The sum over the `reclaimable` and `unreclaimable` state values in `linux.memory.slab.usage` SHOULD be equal to the total slab memory available on the system.\nNote that the total slab memory is not constant and may vary over time.\nSee also the [Slab allocator](https://blogs.oracle.com/linux/post/understanding-linux-kernel-memory-statistics) and `Slab` in [/proc/meminfo](https://man7.org/linux/man-pages/man5/proc.5.html).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "attributes": [ + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.base.name", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.base.type", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + }, + { + "brief": "The revision, literally [revised version](https://www.merriam-webster.com/dictionary/revision), The revision most often refers to a commit object in Git, or a revision number in SVN.\n", + "examples": [ + "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", + "main", + "123", + "HEAD" + ], + "name": "vcs.ref.base.revision", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits. The\nrevision can be a full [hash value (see\nglossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf),\nof the recorded change to a ref within a repository pointing to a\ncommit [commit](https://git-scm.com/docs/git-commit) object. It does\nnot necessarily have to be a hash; it can simply define a [revision\nnumber](https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html)\nwhich is an integer that is monotonically increasing. In cases where\nit is identical to the `ref.base.name`, it SHOULD still be included.\nIt is up to the implementer to decide which value to set as the\nrevision based on the VCS system and situational context.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.head.name", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.head.type", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + }, + { + "brief": "The revision, literally [revised version](https://www.merriam-webster.com/dictionary/revision), The revision most often refers to a commit object in Git, or a revision number in SVN.\n", + "examples": [ + "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", + "main", + "123", + "HEAD" + ], + "name": "vcs.ref.head.revision", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.The revision can be a full [hash value (see\nglossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf),\nof the recorded change to a ref within a repository pointing to a\ncommit [commit](https://git-scm.com/docs/git-commit) object. It does\nnot necessarily have to be a hash; it can simply define a [revision\nnumber](https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html)\nwhich is an integer that is monotonically increasing. In cases where\nit is identical to the `ref.head.name`, it SHOULD still be included.\nIt is up to the implementer to decide which value to set as the\nrevision based on the VCS system and situational context.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + }, + { + "brief": "The type of revision comparison.\n", + "examples": [ + "ahead", + "behind" + ], + "name": "vcs.revision_delta.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "How many revisions the change is behind the target ref.", + "id": "behind", + "stability": "development", + "value": "behind" + }, + { + "brief": "How many revisions the change is ahead of the target ref.", + "id": "ahead", + "stability": "development", + "value": "ahead" + } + ] + } + }, + { + "brief": "The type of line change being measured on a branch or change.\n", + "examples": [ + "added", + "removed" + ], + "name": "vcs.line_change.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "How many lines were added.", + "id": "added", + "stability": "development", + "value": "added" + }, + { + "brief": "How many lines were removed.", + "id": "removed", + "stability": "development", + "value": "removed" + } + ] + } + }, + { + "brief": "The human readable title of the change (pull request/merge request/changelist). This title is often a brief summary of the change and may get merged in to a ref as the commit summary.\n", + "examples": [ + "Fixes broken thing", + "feat: add my new feature", + "[chore] update dependency" + ], + "name": "vcs.change.title", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ID of the change (pull request/merge request/changelist) if applicable. This is usually a unique (within repository) identifier generated by the VCS system.\n", + "examples": [ + "123" + ], + "name": "vcs.change.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The state of the change (pull request/merge request/changelist).\n", + "examples": [ + "open", + "closed", + "merged" + ], + "name": "vcs.change.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Open means the change is currently active and under review. It hasn\u0027t been merged into the target branch yet, and it\u0027s still possible to make changes or add comments.", + "id": "open", + "stability": "development", + "value": "open" + }, + { + "brief": "WIP (work-in-progress, draft) means the change is still in progress and not yet ready for a full review. It might still undergo significant changes.", + "id": "wip", + "stability": "development", + "value": "wip" + }, + { + "brief": "Closed means the merge request has been closed without merging. This can happen for various reasons, such as the changes being deemed unnecessary, the issue being resolved in another way, or the author deciding to withdraw the request.", + "id": "closed", + "stability": "development", + "value": "closed" + }, + { + "brief": "Merged indicates that the change has been successfully integrated into the target codebase.", + "id": "merged", + "stability": "development", + "value": "merged" + } + ] + } + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + } + ], + "brief": "This group defines the attributes for [Version Control Systems (VCS)](https://wikipedia.org/wiki/Version_control).\n", + "display_name": "VCS Repository Attributes", + "id": "registry.vcs.repository", + "lineage": { + "provenance": { + "path": "/home/weaver/source/vcs/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The Amazon Resource Name (ARN) of an [ECS container instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).\n", + "examples": [ + "arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9" + ], + "name": "aws.ecs.container.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ARN of an [ECS cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).\n", + "examples": [ + "arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster" + ], + "name": "aws.ecs.cluster.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n", + "name": "aws.ecs.launchtype", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Amazon EC2", + "id": "ec2", + "stability": "development", + "value": "ec2" + }, + { + "brief": "Amazon Fargate", + "id": "fargate", + "stability": "development", + "value": "fargate" + } + ] + } + }, + { + "brief": "The ARN of a running [ECS task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids).\n", + "examples": [ + "arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b", + "arn:aws:ecs:us-west-1:123456789123:task/my-cluster/task-id/23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd" + ], + "name": "aws.ecs.task.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The family name of the [ECS task definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) used to create the ECS task.\n", + "examples": [ + "opentelemetry-family" + ], + "name": "aws.ecs.task.family", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The revision for the task definition used to create the ECS task.\n", + "examples": [ + "8", + "26" + ], + "name": "aws.ecs.task.revision", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ID of a running ECS task. The ID MUST be extracted from `task.arn`.\n", + "examples": [ + "10838bed-421f-43ef-870a-f43feacbbb5b", + "23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd" + ], + "name": "aws.ecs.task.id", + "requirement_level": { + "conditionally_required": "If and only if `task.arn` is populated." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Entities used by AWS Elastic Container Service (ECS).\n", + "id": "entity.aws.ecs", + "lineage": { + "attributes": { + "aws.ecs.cluster.arn": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.ecs" + }, + "aws.ecs.container.arn": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.ecs" + }, + "aws.ecs.launchtype": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.ecs" + }, + "aws.ecs.task.arn": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.ecs" + }, + "aws.ecs.task.family": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.ecs" + }, + "aws.ecs.task.id": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.aws.ecs" + }, + "aws.ecs.task.revision": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.ecs" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/ecs-entities.yaml", + "registry_id": "main" + } + }, + "name": "aws.ecs", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + } + ], + "brief": "General client attributes.\n", + "id": "client", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.client" + } + }, + "provenance": { + "path": "/home/weaver/source/client/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Value of the garbage collector collection generation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "cpython.gc.generation", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "generation_0", + "stability": "development", + "value": 0 + }, + { + "brief": "Generation 1", + "id": "generation_1", + "stability": "development", + "value": 1 + }, + { + "brief": "Generation 2", + "id": "generation_2", + "stability": "development", + "value": 2 + } + ] + } + } + ], + "brief": "The number of times a generation was collected since interpreter start.", + "id": "metric.cpython.gc.collections", + "instrument": "counter", + "lineage": { + "attributes": { + "cpython.gc.generation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cpython" + } + }, + "provenance": { + "path": "/home/weaver/source/cpython/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "cpython.gc.collections", + "note": "This metric reports data from [`gc.stats()`](https://docs.python.org/3/library/gc.html#gc.get_stats).\n", + "stability": "development", + "type": "metric", + "unit": "{collection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Value of the garbage collector collection generation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "cpython.gc.generation", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "generation_0", + "stability": "development", + "value": 0 + }, + { + "brief": "Generation 1", + "id": "generation_1", + "stability": "development", + "value": 1 + }, + { + "brief": "Generation 2", + "id": "generation_2", + "stability": "development", + "value": 2 + } + ] + } + } + ], + "brief": "The total number of objects collected inside a generation since interpreter start.", + "id": "metric.cpython.gc.collected_objects", + "instrument": "counter", + "lineage": { + "attributes": { + "cpython.gc.generation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cpython" + } + }, + "provenance": { + "path": "/home/weaver/source/cpython/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "cpython.gc.collected_objects", + "note": "This metric reports data from [`gc.stats()`](https://docs.python.org/3/library/gc.html#gc.get_stats).\n", + "stability": "development", + "type": "metric", + "unit": "{object}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Value of the garbage collector collection generation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "cpython.gc.generation", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "generation_0", + "stability": "development", + "value": 0 + }, + { + "brief": "Generation 1", + "id": "generation_1", + "stability": "development", + "value": 1 + }, + { + "brief": "Generation 2", + "id": "generation_2", + "stability": "development", + "value": 2 + } + ] + } + } + ], + "brief": "The total number of objects which were found to be uncollectable inside a generation since interpreter start.", + "id": "metric.cpython.gc.uncollectable_objects", + "instrument": "counter", + "lineage": { + "attributes": { + "cpython.gc.generation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cpython" + } + }, + "provenance": { + "path": "/home/weaver/source/cpython/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "cpython.gc.uncollectable_objects", + "note": "This metric reports data from [`gc.stats()`](https://docs.python.org/3/library/gc.html#gc.get_stats).\n", + "stability": "development", + "type": "metric", + "unit": "{object}" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for CPU metrics\n", + "id": "metric_attributes.hw.cpu", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/cpu-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "CPU current frequency.", + "id": "metric.hw.cpu.speed", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/cpu-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.cpu.speed", + "stability": "development", + "type": "metric", + "unit": "Hz" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of limit for hardware components\n", + "examples": [ + "throttled", + "max", + "turbo" + ], + "name": "hw.limit_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Critical", + "id": "critical", + "stability": "development", + "value": "critical" + }, + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "High Critical", + "id": "high_critical", + "stability": "development", + "value": "high.critical" + }, + { + "brief": "High Degraded", + "id": "high_degraded", + "stability": "development", + "value": "high.degraded" + }, + { + "brief": "Low Critical", + "id": "low_critical", + "stability": "development", + "value": "low.critical" + }, + { + "brief": "Low Degraded", + "id": "low_degraded", + "stability": "development", + "value": "low.degraded" + }, + { + "brief": "Maximum", + "id": "max", + "stability": "development", + "value": "max" + }, + { + "brief": "Throttled", + "id": "throttled", + "stability": "development", + "value": "throttled" + }, + { + "brief": "Turbo", + "id": "turbo", + "stability": "development", + "value": "turbo" + } + ] + } + } + ], + "brief": "CPU maximum frequency.", + "id": "metric.hw.cpu.speed.limit", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.limit_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/cpu-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.cpu.speed.limit", + "stability": "development", + "type": "metric", + "unit": "Hz" + }, + { + "attributes": [ + { + "brief": "The Linux Slab memory state", + "examples": [ + "reclaimable", + "unreclaimable" + ], + "name": "linux.memory.slab.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "reclaimable", + "stability": "development", + "value": "reclaimable" + }, + { + "id": "unreclaimable", + "stability": "development", + "value": "unreclaimable" + } + ] + } + } + ], + "brief": "Describes Linux Memory attributes", + "display_name": "Linux Memory Attributes", + "id": "registry.linux.memory", + "lineage": { + "provenance": { + "path": "/home/weaver/source/linux/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `cpu.mode` instead.", + "deprecated": { + "note": "Replaced by `cpu.mode`.", + "reason": "renamed", + "renamed_to": "cpu.mode" + }, + "name": "process.cpu.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "system", + "stability": "development", + "value": "system" + }, + { + "id": "user", + "stability": "development", + "value": "user" + }, + { + "id": "wait", + "stability": "development", + "value": "wait" + } + ] + } + }, + { + "brief": "\"Deprecated, use `process.executable.build_id.htlhash` instead.\"\n", + "deprecated": { + "note": "Replaced by `process.executable.build_id.htlhash`.", + "reason": "renamed", + "renamed_to": "process.executable.build_id.htlhash" + }, + "examples": [ + "600DCAFE4A110000F2BF38C493F5FB92" + ], + "name": "process.executable.build_id.profiling", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "\"Deprecated, use `process.context_switch.type` instead.\"\n", + "deprecated": { + "note": "Replaced by `process.context_switch.type`.", + "reason": "renamed", + "renamed_to": "process.context_switch.type" + }, + "name": "process.context_switch_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "voluntary", + "stability": "development", + "value": "voluntary" + }, + { + "id": "involuntary", + "stability": "development", + "value": "involuntary" + } + ] + } + }, + { + "brief": "Deprecated, use `system.paging.fault.type` instead.", + "deprecated": { + "note": "Replaced by `system.paging.fault.type`.", + "reason": "renamed", + "renamed_to": "system.paging.fault.type" + }, + "name": "process.paging.fault_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "major", + "stability": "development", + "value": "major" + }, + { + "id": "minor", + "stability": "development", + "value": "minor" + } + ] + } + } + ], + "brief": "Deprecated process attributes.", + "display_name": "Deprecated Process Attributes", + "id": "registry.process.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/process/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "SignalR HTTP connection closure status.", + "examples": [ + "app_shutdown", + "timeout" + ], + "name": "signalr.connection.status", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The connection was closed normally.", + "id": "normal_closure", + "stability": "stable", + "value": "normal_closure" + }, + { + "brief": "The connection was closed due to a timeout.", + "id": "timeout", + "stability": "stable", + "value": "timeout" + }, + { + "brief": "The connection was closed because the app is shutting down.", + "id": "app_shutdown", + "stability": "stable", + "value": "app_shutdown" + } + ] + } + }, + { + "brief": "[SignalR transport type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)", + "examples": [ + "web_sockets", + "long_polling" + ], + "name": "signalr.transport", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "ServerSentEvents protocol", + "id": "server_sent_events", + "stability": "stable", + "value": "server_sent_events" + }, + { + "brief": "LongPolling protocol", + "id": "long_polling", + "stability": "stable", + "value": "long_polling" + }, + { + "brief": "WebSockets protocol", + "id": "web_sockets", + "stability": "stable", + "value": "web_sockets" + } + ] + } + } + ], + "brief": "The duration of connections on the server.", + "id": "metric.signalr.server.connection.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "signalr.connection.status": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.signalr" + }, + "signalr.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.signalr" + } + }, + "provenance": { + "path": "/home/weaver/source/signalr/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "signalr.server.connection.duration", + "note": "Meter name: `Microsoft.AspNetCore.Http.Connections`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "SignalR HTTP connection closure status.", + "examples": [ + "app_shutdown", + "timeout" + ], + "name": "signalr.connection.status", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The connection was closed normally.", + "id": "normal_closure", + "stability": "stable", + "value": "normal_closure" + }, + { + "brief": "The connection was closed due to a timeout.", + "id": "timeout", + "stability": "stable", + "value": "timeout" + }, + { + "brief": "The connection was closed because the app is shutting down.", + "id": "app_shutdown", + "stability": "stable", + "value": "app_shutdown" + } + ] + } + }, + { + "brief": "[SignalR transport type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)", + "examples": [ + "web_sockets", + "long_polling" + ], + "name": "signalr.transport", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "ServerSentEvents protocol", + "id": "server_sent_events", + "stability": "stable", + "value": "server_sent_events" + }, + { + "brief": "LongPolling protocol", + "id": "long_polling", + "stability": "stable", + "value": "long_polling" + }, + { + "brief": "WebSockets protocol", + "id": "web_sockets", + "stability": "stable", + "value": "web_sockets" + } + ] + } + } + ], + "brief": "Number of connections that are currently active on the server.", + "id": "metric.signalr.server.active_connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "signalr.connection.status": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.signalr" + }, + "signalr.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.signalr" + } + }, + "provenance": { + "path": "/home/weaver/source/signalr/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "signalr.server.active_connections", + "note": "Meter name: `Microsoft.AspNetCore.Http.Connections`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "attributes": [ + { + "brief": "Logical name of the service.\n", + "examples": [ + "CICS TS", + "Datacom", + "ADABAS" + ], + "name": "service.name", + "note": "For z/OS system software, SHOULD be set to an abbreviated name of the z/OS system software.", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "The version string of the service API or implementation. The format is not defined by these conventions.\n", + "examples": "5.6", + "name": "service.version", + "note": "For z/OS system software, SHOULD be set to the version of the z/OS system software.", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "The string ID of the service instance.\n", + "examples": "CICSPROD", + "name": "service.instance.id", + "note": "For z/OS system software, SHOULD be set to the identifier representing the current instance of the the z/OS system software, e.g., the CICS region APPLID or IMS region IMSID.", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "A namespace for `service.name`.\n", + "examples": "CICSPLX2", + "name": "service.namespace", + "note": "For z/OS system software, SHOULD be set to the identifier representing of a grouping of the z/OS system software instances, e.g., the name of the CICSPLEX.", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "A software service running on a z/OS system.", + "id": "service.zos.software", + "lineage": { + "attributes": { + "service.instance.id": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.service" + }, + "service.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.service" + }, + "service.namespace": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.service" + }, + "service.version": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.service" + } + }, + "provenance": { + "path": "/home/weaver/source/zos/common.yaml", + "registry_id": "main" + } + }, + "name": "service.zos.software", + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The command used to launch the process (i.e. the command name). On z/OS, SHOULD be set to the name of the job used to start the z/OS system software.", + "examples": "CICSSTRT", + "name": "process.command", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Process identifier (PID).\n", + "examples": "008A", + "name": "process.pid", + "note": "On z/OS, SHOULD be set to the Address Space Identifier.", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "The username of the user that owns the process.\n", + "examples": "CICSUSR", + "name": "process.owner", + "note": "On z/OS, SHOULD be set to the user under which the z/OS system software is executed.", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment.\n", + "examples": "IBM Customer Information Control System (CICS) Transaction Server for z/OS Version 5.6", + "name": "process.runtime.description", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the runtime of this process.\n", + "examples": "CICS Transaction Server z/OS Version 5.6", + "name": "process.runtime.name", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The version of the runtime of this process, as returned by the runtime without modification.\n", + "examples": "5.6", + "name": "process.runtime.version", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "A process running on a z/OS system.", + "id": "process.zos", + "lineage": { + "attributes": { + "process.command": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.owner": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.pid": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.runtime.description": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.runtime.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.runtime.version": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.process" + } + }, + "provenance": { + "path": "/home/weaver/source/zos/common.yaml", + "registry_id": "main" + } + }, + "name": "process.zos", + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The operating system type.\n", + "examples": "zos", + "name": "os.type", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Microsoft Windows", + "id": "windows", + "stability": "development", + "value": "windows" + }, + { + "brief": "Linux", + "id": "linux", + "stability": "development", + "value": "linux" + }, + { + "brief": "Apple Darwin", + "id": "darwin", + "stability": "development", + "value": "darwin" + }, + { + "brief": "FreeBSD", + "id": "freebsd", + "stability": "development", + "value": "freebsd" + }, + { + "brief": "NetBSD", + "id": "netbsd", + "stability": "development", + "value": "netbsd" + }, + { + "brief": "OpenBSD", + "id": "openbsd", + "stability": "development", + "value": "openbsd" + }, + { + "brief": "DragonFly BSD", + "id": "dragonflybsd", + "stability": "development", + "value": "dragonflybsd" + }, + { + "brief": "HP-UX (Hewlett Packard Unix)", + "id": "hpux", + "stability": "development", + "value": "hpux" + }, + { + "brief": "AIX (Advanced Interactive eXecutive)", + "id": "aix", + "stability": "development", + "value": "aix" + }, + { + "brief": "SunOS, Oracle Solaris", + "id": "solaris", + "stability": "development", + "value": "solaris" + }, + { + "brief": "Deprecated. Use `zos` instead.", + "deprecated": { + "note": "Replaced by `zos`.", + "reason": "renamed", + "renamed_to": "zos" + }, + "id": "z_os", + "stability": "development", + "value": "z_os" + }, + { + "brief": "IBM z/OS", + "id": "zos", + "stability": "development", + "value": "zos" + } + ] + } + }, + { + "brief": "Human readable OS version information, e.g., as reported by command `d iplinfo`.", + "examples": "IBM z/OS 3.1", + "name": "os.description", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "Human readable operating system name.", + "examples": "z/OS", + "name": "os.name", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The version string of the operating system. On z/OS, SHOULD be the release returned by the command `d iplinfo`.", + "examples": "3.1.0", + "name": "os.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The operating system on a z/OS system.", + "id": "os.zos", + "lineage": { + "attributes": { + "os.description": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.os" + }, + "os.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.os" + }, + "os.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.os" + }, + "os.version": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.os" + } + }, + "provenance": { + "path": "/home/weaver/source/zos/common.yaml", + "registry_id": "main" + } + }, + "name": "os.zos", + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the host. On z/OS, SHOULD be the full qualified hostname used to register the z/OS system in DNS.", + "examples": "SYS1.DOMAIN.COM", + "name": "host.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The CPU architecture the host system is running on.\n", + "examples": "s390x", + "name": "host.arch", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "AMD64", + "id": "amd64", + "stability": "development", + "value": "amd64" + }, + { + "brief": "ARM32", + "id": "arm32", + "stability": "development", + "value": "arm32" + }, + { + "brief": "ARM64", + "id": "arm64", + "stability": "development", + "value": "arm64" + }, + { + "brief": "Itanium", + "id": "ia64", + "stability": "development", + "value": "ia64" + }, + { + "brief": "32-bit PowerPC", + "id": "ppc32", + "stability": "development", + "value": "ppc32" + }, + { + "brief": "64-bit PowerPC", + "id": "ppc64", + "stability": "development", + "value": "ppc64" + }, + { + "brief": "IBM z/Architecture", + "id": "s390x", + "stability": "development", + "value": "s390x" + }, + { + "brief": "32-bit x86", + "id": "x86", + "stability": "development", + "value": "x86" + } + ] + } + }, + { + "brief": "Unique host ID. On z/OS, SHOULD be the concatenation of sysplex name and SMFID, separated by a dash", + "examples": "SYSPLEX1-SYS1", + "name": "host.id", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "The host of a z/OS system.", + "id": "host.zos", + "lineage": { + "attributes": { + "host.arch": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.host" + }, + "host.id": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.host" + }, + "host.name": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.host" + } + }, + "provenance": { + "path": "/home/weaver/source/zos/common.yaml", + "registry_id": "main" + } + }, + "name": "host.zos", + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Rate-limiting result, shows whether the lease was acquired or contains a rejection reason", + "examples": [ + "acquired", + "request_canceled" + ], + "name": "aspnetcore.rate_limiting.result", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Lease was acquired", + "id": "acquired", + "stability": "stable", + "value": "acquired" + }, + { + "brief": "Lease request was rejected by the endpoint limiter", + "id": "endpoint_limiter", + "stability": "stable", + "value": "endpoint_limiter" + }, + { + "brief": "Lease request was rejected by the global limiter", + "id": "global_limiter", + "stability": "stable", + "value": "global_limiter" + }, + { + "brief": "Lease request was canceled", + "id": "request_canceled", + "stability": "stable", + "value": "request_canceled" + } + ] + } + }, + { + "brief": "A value that indicates whether the matched route is a fallback route.", + "examples": [ + true + ], + "name": "aspnetcore.routing.is_fallback", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + }, + { + "brief": "Full type name of the [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) implementation that handled the exception.", + "examples": [ + "Contoso.MyHandler" + ], + "name": "aspnetcore.diagnostics.handler.type", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Flag indicating if request was handled by the application pipeline.", + "examples": [ + true + ], + "name": "aspnetcore.request.is_unhandled", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + }, + { + "brief": "Match result - success or failure", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.routing.match_status", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Match succeeded", + "id": "success", + "stability": "stable", + "value": "success" + }, + { + "brief": "Match failed", + "id": "failure", + "stability": "stable", + "value": "failure" + } + ] + } + }, + { + "brief": "ASP.NET Core exception middleware handling result.", + "examples": [ + "handled", + "unhandled" + ], + "name": "aspnetcore.diagnostics.exception.result", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Exception was handled by the exception handling middleware.", + "id": "handled", + "stability": "stable", + "value": "handled" + }, + { + "brief": "Exception was not handled by the exception handling middleware.", + "id": "unhandled", + "stability": "stable", + "value": "unhandled" + }, + { + "brief": "Exception handling was skipped because the response had started.", + "id": "skipped", + "stability": "stable", + "value": "skipped" + }, + { + "brief": "Exception handling didn\u0027t run because the request was aborted.", + "id": "aborted", + "stability": "stable", + "value": "aborted" + } + ] + } + }, + { + "brief": "The name of the library or subsystem using the memory pool instance.", + "examples": [ + "kestrel", + "iis" + ], + "name": "aspnetcore.memory_pool.owner", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The result of the authentication operation.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.authentication.result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Authentication was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Authentication failed.", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "No authentication information returned.", + "id": "none", + "stability": "development", + "value": "none" + } + ] + } + }, + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A value that indicates whether the user is authenticated.", + "examples": [ + true + ], + "name": "aspnetcore.user.is_authenticated", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + }, + { + "brief": "The name of the authorization policy.", + "examples": [ + "RequireAdminRole" + ], + "name": "aspnetcore.authorization.policy", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The result of calling the authorization service.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.authorization.result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Authorization was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Authorization failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + }, + { + "brief": "The result of the identity operation.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Identity operation was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Identity operation failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + }, + { + "brief": "The error code for a failed identity operation.", + "examples": [ + "DefaultError", + "PasswordMismatch" + ], + "name": "aspnetcore.identity.error_code", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The user update type.", + "examples": [ + "update", + "user_name", + "reset_password" + ], + "name": "aspnetcore.identity.user.update_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Identity user updated.", + "id": "update", + "stability": "development", + "value": "update" + }, + { + "brief": "Identity user name updated.", + "id": "user_name", + "stability": "development", + "value": "user_name" + }, + { + "brief": "Identity user password added.", + "id": "add_password", + "stability": "development", + "value": "add_password" + }, + { + "brief": "Identity user password changed.", + "id": "change_password", + "stability": "development", + "value": "change_password" + }, + { + "brief": "Identity user security stamp updated.", + "id": "security_stamp", + "stability": "development", + "value": "security_stamp" + }, + { + "brief": "Identity user password reset.", + "id": "reset_password", + "stability": "development", + "value": "reset_password" + }, + { + "brief": "Identity user login removed.", + "id": "remove_login", + "stability": "development", + "value": "remove_login" + }, + { + "brief": "Identity user login added.", + "id": "add_login", + "stability": "development", + "value": "add_login" + }, + { + "brief": "Identity user claims added.", + "id": "add_claims", + "stability": "development", + "value": "add_claims" + }, + { + "brief": "Identity user claim replaced.", + "id": "replace_claim", + "stability": "development", + "value": "replace_claim" + }, + { + "brief": "Identity user claims removed.", + "id": "remove_claims", + "stability": "development", + "value": "remove_claims" + }, + { + "brief": "Identity user added to roles.", + "id": "add_to_roles", + "stability": "development", + "value": "add_to_roles" + }, + { + "brief": "Identity user removed from roles.", + "id": "remove_from_roles", + "stability": "development", + "value": "remove_from_roles" + }, + { + "brief": "Identity user email set.", + "id": "set_email", + "stability": "development", + "value": "set_email" + }, + { + "brief": "Identity user email confirmed.", + "id": "confirm_email", + "stability": "development", + "value": "confirm_email" + }, + { + "brief": "Identity user password rehashed.", + "id": "password_rehash", + "stability": "development", + "value": "password_rehash" + }, + { + "brief": "Identity user password removed.", + "id": "remove_password", + "stability": "development", + "value": "remove_password" + }, + { + "brief": "Identity user email changed.", + "id": "change_email", + "stability": "development", + "value": "change_email" + }, + { + "brief": "Identity user phone number set.", + "id": "set_phone_number", + "stability": "development", + "value": "set_phone_number" + }, + { + "brief": "Identity user phone number changed.", + "id": "change_phone_number", + "stability": "development", + "value": "change_phone_number" + }, + { + "brief": "Identity user two-factor authentication enabled or disabled.", + "id": "set_two_factor_enabled", + "stability": "development", + "value": "set_two_factor_enabled" + }, + { + "brief": "Identity user lockout enabled or disabled.", + "id": "set_lockout_enabled", + "stability": "development", + "value": "set_lockout_enabled" + }, + { + "brief": "Identity user lockout end date set.", + "id": "set_lockout_end_date", + "stability": "development", + "value": "set_lockout_end_date" + }, + { + "brief": "Identity user access failure recorded.", + "id": "access_failed", + "stability": "development", + "value": "access_failed" + }, + { + "brief": "Identity user access failure count reset.", + "id": "reset_access_failed_count", + "stability": "development", + "value": "reset_access_failed_count" + }, + { + "brief": "Identity user authentication token set.", + "id": "set_authentication_token", + "stability": "development", + "value": "set_authentication_token" + }, + { + "brief": "Identity user authentication token removed.", + "id": "remove_authentication_token", + "stability": "development", + "value": "remove_authentication_token" + }, + { + "brief": "Identity user authenticator key reset.", + "id": "reset_authenticator_key", + "stability": "development", + "value": "reset_authenticator_key" + }, + { + "brief": "Identity user new two-factor recovery codes generated.", + "id": "generate_new_two_factor_recovery_codes", + "stability": "development", + "value": "generate_new_two_factor_recovery_codes" + }, + { + "brief": "Identity user two-factor recovery code redeemed.", + "id": "redeem_two_factor_recovery_code", + "stability": "development", + "value": "redeem_two_factor_recovery_code" + }, + { + "brief": "Identity user passkey set.", + "id": "set_passkey", + "stability": "development", + "value": "set_passkey" + }, + { + "brief": "Identity user passkey removed.", + "id": "remove_passkey", + "stability": "development", + "value": "remove_passkey" + }, + { + "brief": "Any update type that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "development", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The result from checking the password.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.password_check_result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Password check was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Password check was successful however the password was encoded using a deprecated algorithm and should be rehashed and updated.", + "id": "success_rehash_needed", + "stability": "development", + "value": "success_rehash_needed" + }, + { + "brief": "Password check failed.", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "Password check couldn\u0027t proceed because the password was missing from the user.", + "id": "password_missing", + "stability": "development", + "value": "password_missing" + }, + { + "brief": "Password check couldn\u0027t proceed because the user was missing.", + "id": "user_missing", + "stability": "development", + "value": "user_missing" + } + ] + } + }, + { + "brief": "What the token will be used for.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.token_purpose", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The token is for resetting a user password.", + "id": "reset_password", + "stability": "development", + "value": "reset_password" + }, + { + "brief": "The token is for changing a user phone number.", + "id": "change_phone_number", + "stability": "development", + "value": "change_phone_number" + }, + { + "brief": "The token is for confirming user email address.", + "id": "email_confirmation", + "stability": "development", + "value": "email_confirmation" + }, + { + "brief": "The token is for changing the user email address.", + "id": "change_email", + "stability": "development", + "value": "change_email" + }, + { + "brief": "The token is for changing user two factor settings.", + "id": "two_factor", + "stability": "development", + "value": "two_factor" + }, + { + "brief": "Any token purpose that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "development", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The result of token verification.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.token_verified", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Token verification was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Token verification failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + }, + { + "brief": "The authentication type.", + "examples": [ + "password", + "two_factor" + ], + "name": "aspnetcore.identity.sign_in.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Sign in with password.", + "id": "password", + "stability": "development", + "value": "password" + }, + { + "brief": "Sign in with two factory recovery code.", + "id": "two_factor_recovery_code", + "stability": "development", + "value": "two_factor_recovery_code" + }, + { + "brief": "Sign in with two factor authenticator app.", + "id": "two_factor_authenticator", + "stability": "development", + "value": "two_factor_authenticator" + }, + { + "brief": "Sign in with a two factor provider.", + "id": "two_factor", + "stability": "development", + "value": "two_factor" + }, + { + "brief": "Sign in with a previously registered third-party login.", + "id": "external", + "stability": "development", + "value": "external" + }, + { + "brief": "Sign in with passkey.", + "id": "passkey", + "stability": "development", + "value": "passkey" + } + ] + } + }, + { + "brief": "A flag indicating whether the sign in is persistent.", + "name": "aspnetcore.sign_in.is_persistent", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Whether the sign in result was success or failure.", + "examples": [ + "password", + "two_factor" + ], + "name": "aspnetcore.identity.sign_in.result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Sign in was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "User is locked out.", + "id": "locked_out", + "stability": "development", + "value": "locked_out" + }, + { + "brief": "User is not allowed to sign in.", + "id": "not_allowed", + "stability": "development", + "value": "not_allowed" + }, + { + "brief": "User requires two factory authentication to sign in.", + "id": "requires_two_factor", + "stability": "development", + "value": "requires_two_factor" + }, + { + "brief": "Sign in failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + } + ], + "brief": "ASP.NET Core attributes", + "display_name": "ASP.NET Core Attributes", + "id": "registry.aspnetcore", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aspnetcore/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The method or function fully-qualified name without arguments. The value should fit the natural representation of the language runtime, which is also likely the same used within `code.stacktrace` attribute value. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Function\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": [ + "com.example.MyHttpService.serveRequest", + "GuzzleHttp\\Client::transfer", + "fopen" + ], + "name": "code.function.name", + "note": "Values and format depends on each language runtime, thus it is impossible to provide an exhaustive list of examples.\nThe values are usually the same (or prefixes of) the ones found in native stack trace representation stored in\n`code.stacktrace` without information on arguments.\n\nExamples:\n\n* Java method: `com.example.MyHttpService.serveRequest`\n* Java anonymous class method: `com.mycompany.Main$1.myMethod`\n* Java lambda method: `com.mycompany.Main$$Lambda/0x0000748ae4149c00.myMethod`\n* PHP function: `GuzzleHttp\\Client::transfer`\n* Go function: `github.com/my/repo/pkg.foo.func5`\n* Elixir: `OpenTelemetry.Ctx.new`\n* Erlang: `opentelemetry_ctx:new`\n* Rust: `playground::my_module::my_cool_func`\n* C function: `fopen`\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path). This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Function\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": "/usr/local/MyApplication/content_root/app/index.php", + "name": "code.file.path", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The line number in `code.file.path` best representing the operation. It SHOULD point within the code unit named in `code.function.name`. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Line\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": 42, + "name": "code.line.number", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "The column number in `code.file.path` best representing the operation. It SHOULD point within the code unit named in `code.function.name`. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Line\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": 16, + "name": "code.column.number", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "A stacktrace as a string in the natural representation for the language runtime. The representation is identical to [`exception.stacktrace`](/docs/exceptions/exceptions-spans.md#stacktrace-representation). This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Location\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": "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)\n", + "name": "code.stacktrace", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + } + ], + "brief": "These attributes provide context about source code\n", + "id": "code", + "lineage": { + "attributes": { + "code.column.number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.code" + }, + "code.file.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.code" + }, + "code.function.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.code" + }, + "code.line.number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.code" + }, + "code.stacktrace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.code" + } + }, + "provenance": { + "path": "/home/weaver/source/code/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `deployment.environment.name` instead.\n", + "deprecated": { + "note": "Replaced by `deployment.environment.name`.", + "reason": "renamed", + "renamed_to": "deployment.environment.name" + }, + "examples": [ + "staging", + "production" + ], + "name": "deployment.environment", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated deployment attributes.\n", + "id": "registry.deployment.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/deployment/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `user.roles` instead.", + "deprecated": { + "note": "Use `user.roles` instead.", + "reason": "uncategorized" + }, + "examples": "admin", + "name": "enduser.role", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, no replacement at this time.", + "deprecated": { + "note": "Removed, no replacement at this time.", + "reason": "obsoleted" + }, + "examples": "read:message, write:files", + "name": "enduser.scope", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated enduser attributes.", + "display_name": "Deprecated End User Attributes", + "id": "registry.enduser.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/enduser/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The container within GCP where the AppHub application is defined.\n", + "examples": [ + "projects/my-container-project" + ], + "name": "gcp.apphub.application.container", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The GCP zone or region where the application is defined.\n", + "examples": [ + "us-central1" + ], + "name": "gcp.apphub.application.location", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the application as configured in AppHub.\n", + "examples": [ + "my-application" + ], + "name": "gcp.apphub.application.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes denoting data from an Application in AppHub. See [AppHub overview](https://cloud.google.com/app-hub/docs/overview).\n", + "id": "entity.gcp.apphub.application", + "lineage": { + "attributes": { + "gcp.apphub.application.container": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.apphub" + }, + "gcp.apphub.application.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.apphub" + }, + "gcp.apphub.application.location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.apphub" + } + }, + "provenance": { + "path": "/home/weaver/source/gcp/apphub.yaml", + "registry_id": "main" + } + }, + "name": "gcp.apphub.application", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the service as configured in AppHub.\n", + "examples": [ + "my-service" + ], + "name": "gcp.apphub.service.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Environment of a service is the stage of a software lifecycle.\n", + "name": "gcp.apphub.service.environment_type", + "note": "[See AppHub environment type](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type_1)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Production environment.", + "id": "production", + "stability": "development", + "value": "PRODUCTION" + }, + { + "brief": "Staging environment.", + "id": "staging", + "stability": "development", + "value": "STAGING" + }, + { + "brief": "Test environment.", + "id": "test", + "stability": "development", + "value": "TEST" + }, + { + "brief": "Development environment.", + "id": "development", + "stability": "development", + "value": "DEVELOPMENT" + } + ] + } + }, + { + "brief": "Criticality of a service indicates its importance to the business.\n", + "name": "gcp.apphub.service.criticality_type", + "note": "[See AppHub type enum](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Mission critical service.", + "id": "mission_critical", + "stability": "development", + "value": "MISSION_CRITICAL" + }, + { + "brief": "High impact.", + "id": "high", + "stability": "development", + "value": "HIGH" + }, + { + "brief": "Medium impact.", + "id": "medium", + "stability": "development", + "value": "MEDIUM" + }, + { + "brief": "Low impact.", + "id": "low", + "stability": "development", + "value": "LOW" + } + ] + } + } + ], + "brief": "Attributes denoting data from a Service in AppHub. See [AppHub overview](https://cloud.google.com/app-hub/docs/overview).\n", + "id": "entity.gcp.apphub.service", + "lineage": { + "attributes": { + "gcp.apphub.service.criticality_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.apphub" + }, + "gcp.apphub.service.environment_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.apphub" + }, + "gcp.apphub.service.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.apphub" + } + }, + "provenance": { + "path": "/home/weaver/source/gcp/apphub.yaml", + "registry_id": "main" + } + }, + "name": "gcp.apphub.service", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the workload as configured in AppHub.\n", + "examples": [ + "my-workload" + ], + "name": "gcp.apphub.workload.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Environment of a workload is the stage of a software lifecycle.\n", + "name": "gcp.apphub.workload.environment_type", + "note": "[See AppHub environment type](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type_1)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Production environment.", + "id": "production", + "stability": "development", + "value": "PRODUCTION" + }, + { + "brief": "Staging environment.", + "id": "staging", + "stability": "development", + "value": "STAGING" + }, + { + "brief": "Test environment.", + "id": "test", + "stability": "development", + "value": "TEST" + }, + { + "brief": "Development environment.", + "id": "development", + "stability": "development", + "value": "DEVELOPMENT" + } + ] + } + }, + { + "brief": "Criticality of a workload indicates its importance to the business.\n", + "name": "gcp.apphub.workload.criticality_type", + "note": "[See AppHub type enum](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Mission critical service.", + "id": "mission_critical", + "stability": "development", + "value": "MISSION_CRITICAL" + }, + { + "brief": "High impact.", + "id": "high", + "stability": "development", + "value": "HIGH" + }, + { + "brief": "Medium impact.", + "id": "medium", + "stability": "development", + "value": "MEDIUM" + }, + { + "brief": "Low impact.", + "id": "low", + "stability": "development", + "value": "LOW" + } + ] + } + } + ], + "brief": "Attributes denoting data from a Workload in AppHub. See [AppHub overview](https://cloud.google.com/app-hub/docs/overview).\n", + "id": "entity.gcp.apphub.workload", + "lineage": { + "attributes": { + "gcp.apphub.workload.criticality_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.apphub" + }, + "gcp.apphub.workload.environment_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.apphub" + }, + "gcp.apphub.workload.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.apphub" + } + }, + "provenance": { + "path": "/home/weaver/source/gcp/apphub.yaml", + "registry_id": "main" + } + }, + "name": "gcp.apphub.workload", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Driver version for the hardware component\n", + "examples": [ + "10.2.1-3" + ], + "name": "hw.driver_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for GPU metrics\n", + "id": "metric_attributes.hw.gpu", + "lineage": { + "attributes": { + "hw.driver_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/gpu-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Driver version for the hardware component\n", + "examples": [ + "10.2.1-3" + ], + "name": "hw.driver_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The network IO operation direction.", + "examples": [ + "receive", + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + } + ], + "brief": "Received and transmitted bytes by the GPU.", + "id": "metric.hw.gpu.io", + "instrument": "counter", + "lineage": { + "attributes": { + "hw.driver_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/gpu-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.gpu.io", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Driver version for the hardware component\n", + "examples": [ + "10.2.1-3" + ], + "name": "hw.driver_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Size of the GPU memory.", + "id": "metric.hw.gpu.memory.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.driver_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/gpu-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.gpu.memory.limit", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Driver version for the hardware component\n", + "examples": [ + "10.2.1-3" + ], + "name": "hw.driver_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Fraction of GPU memory used.", + "id": "metric.hw.gpu.memory.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.driver_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/gpu-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.gpu.memory.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Driver version for the hardware component\n", + "examples": [ + "10.2.1-3" + ], + "name": "hw.driver_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "GPU memory used.", + "id": "metric.hw.gpu.memory.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.driver_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/gpu-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.gpu.memory.usage", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Driver version for the hardware component\n", + "examples": [ + "10.2.1-3" + ], + "name": "hw.driver_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of task the GPU is performing\n", + "examples": [ + "decoder", + "encoder", + "general" + ], + "name": "hw.gpu.task", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Decoder", + "id": "decoder", + "stability": "development", + "value": "decoder" + }, + { + "brief": "Encoder", + "id": "encoder", + "stability": "development", + "value": "encoder" + }, + { + "brief": "General", + "id": "general", + "stability": "development", + "value": "general" + } + ] + } + } + ], + "brief": "Fraction of time spent in a specific task.", + "id": "metric.hw.gpu.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.driver_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.gpu.task": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/gpu-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.gpu.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `k8s.pod.label` instead.", + "deprecated": { + "note": "Replaced by `k8s.pod.label`.", + "reason": "renamed", + "renamed_to": "k8s.pod.label" + }, + "examples": [ + "my-app" + ], + "name": "k8s.pod.labels", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + } + ], + "brief": "Describes deprecated k8s attributes.", + "display_name": "Deprecated Kubernetes Attributes", + "id": "registry.k8s.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, no replacement at this time.", + "deprecated": { + "note": "Removed. No replacement at this time.", + "reason": "obsoleted" + }, + "examples": [ + "/var/my.sock" + ], + "name": "net.sock.peer.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `network.peer.address`.", + "deprecated": { + "note": "Replaced by `network.peer.address`.", + "reason": "renamed", + "renamed_to": "network.peer.address" + }, + "examples": [ + "192.168.0.1" + ], + "name": "net.sock.peer.addr", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `network.peer.port`.", + "deprecated": { + "note": "Replaced by `network.peer.port`.", + "reason": "renamed", + "renamed_to": "network.peer.port" + }, + "examples": [ + 65531 + ], + "name": "net.sock.peer.port", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `server.address` on client spans and `client.address` on server spans.", + "deprecated": { + "note": "Replaced by `server.address` on client spans and `client.address` on server spans.", + "reason": "uncategorized" + }, + "examples": [ + "example.com" + ], + "name": "net.peer.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `server.port` on client spans and `client.port` on server spans.", + "deprecated": { + "note": "Replaced by `server.port` on client spans and `client.port` on server spans.", + "reason": "uncategorized" + }, + "examples": [ + 8080 + ], + "name": "net.peer.port", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `network.peer.address`.", + "deprecated": { + "note": "Replaced by `network.peer.address`.", + "reason": "renamed", + "renamed_to": "network.peer.address" + }, + "examples": "127.0.0.1", + "name": "net.peer.ip", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `server.address`.", + "deprecated": { + "note": "Replaced by `server.address`.", + "reason": "renamed", + "renamed_to": "server.address" + }, + "examples": [ + "example.com" + ], + "name": "net.host.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `network.local.address`.", + "deprecated": { + "note": "Replaced by `network.local.address`.", + "reason": "renamed", + "renamed_to": "network.local.address" + }, + "examples": "192.168.0.1", + "name": "net.host.ip", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `server.port`.", + "deprecated": { + "note": "Replaced by `server.port`.", + "reason": "renamed", + "renamed_to": "server.port" + }, + "examples": [ + 8080 + ], + "name": "net.host.port", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `network.local.address`.", + "deprecated": { + "note": "Replaced by `network.local.address`.", + "reason": "renamed", + "renamed_to": "network.local.address" + }, + "examples": [ + "/var/my.sock" + ], + "name": "net.sock.host.addr", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `network.local.port`.", + "deprecated": { + "note": "Replaced by `network.local.port`.", + "reason": "renamed", + "renamed_to": "network.local.port" + }, + "examples": [ + 8080 + ], + "name": "net.sock.host.port", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `network.transport`.", + "deprecated": { + "note": "Replaced by `network.transport`.", + "reason": "renamed", + "renamed_to": "network.transport" + }, + "name": "net.transport", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "ip_tcp", + "stability": "development", + "value": "ip_tcp" + }, + { + "id": "ip_udp", + "stability": "development", + "value": "ip_udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "development", + "value": "pipe" + }, + { + "brief": "In-process communication.", + "id": "inproc", + "note": "Signals that there is only in-process communication not using a \"real\" network protocol in cases where network attributes would normally be expected. Usually all other network attributes can be left out in that case.\n", + "stability": "development", + "value": "inproc" + }, + { + "brief": "Something else (non IP-based).", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + }, + { + "brief": "Deprecated, use `network.protocol.name`.", + "deprecated": { + "note": "Replaced by `network.protocol.name`.", + "reason": "renamed", + "renamed_to": "network.protocol.name" + }, + "examples": [ + "amqp", + "http", + "mqtt" + ], + "name": "net.protocol.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `network.protocol.version`.", + "deprecated": { + "note": "Replaced by `network.protocol.version`.", + "reason": "renamed", + "renamed_to": "network.protocol.version" + }, + "examples": "3.1.1", + "name": "net.protocol.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `network.transport` and `network.type`.", + "deprecated": { + "note": "Split to `network.transport` and `network.type`.", + "reason": "uncategorized" + }, + "name": "net.sock.family", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "IPv4 address", + "id": "inet", + "stability": "development", + "value": "inet" + }, + { + "brief": "IPv6 address", + "id": "inet6", + "stability": "development", + "value": "inet6" + }, + { + "brief": "Unix domain socket path", + "id": "unix", + "stability": "development", + "value": "unix" + } + ] + } + } + ], + "brief": "These attributes may be used for any network related operation.\n", + "display_name": "Deprecated Network Attributes", + "id": "registry.network.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/network/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the duration of inbound RPC.", + "id": "metric.rpc.server.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.server.duration", + "note": "While streaming RPCs may record this metric as start-of-batch\nto end-of-batch, it\u0027s hard to interpret in practice.\n\n**Streaming**: N/A.\n", + "stability": "development", + "type": "metric", + "unit": "ms" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the size of RPC request messages (uncompressed).", + "id": "metric.rpc.server.request.size", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.server.request.size", + "note": "**Streaming**: Recorded per message in a streaming batch\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the size of RPC response messages (uncompressed).", + "id": "metric.rpc.server.response.size", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.server.response.size", + "note": "**Streaming**: Recorded per response in a streaming batch\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the duration of outbound RPC.", + "id": "metric.rpc.client.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.client.duration", + "note": "While streaming RPCs may record this metric as start-of-batch\nto end-of-batch, it\u0027s hard to interpret in practice.\n\n**Streaming**: N/A.\n", + "stability": "development", + "type": "metric", + "unit": "ms" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the size of RPC request messages (uncompressed).", + "id": "metric.rpc.client.request.size", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.client.request.size", + "note": "**Streaming**: Recorded per message in a streaming batch\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Measures the size of RPC response messages (uncompressed).", + "id": "metric.rpc.client.response.size", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "rpc.client.response.size", + "note": "**Streaming**: Recorded per response in a streaming batch\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Account or request [consistency level](https://learn.microsoft.com/azure/cosmos-db/consistency-levels).", + "examples": [ + "Eventual", + "ConsistentPrefix", + "BoundedStaleness", + "Strong", + "Session" + ], + "name": "azure.cosmosdb.consistency.level", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Strong", + "id": "strong", + "stability": "development", + "value": "Strong" + }, + { + "brief": "Bounded Staleness", + "id": "bounded_staleness", + "stability": "development", + "value": "BoundedStaleness" + }, + { + "brief": "Session", + "id": "session", + "stability": "development", + "value": "Session" + }, + { + "brief": "Eventual", + "id": "eventual", + "stability": "development", + "value": "Eventual" + }, + { + "brief": "Consistent Prefix", + "id": "consistent_prefix", + "stability": "development", + "value": "ConsistentPrefix" + } + ] + } + }, + { + "brief": "Cosmos DB sub status code.", + "examples": [ + 1000, + 1002 + ], + "name": "azure.cosmosdb.response.sub_status_code", + "requirement_level": { + "conditionally_required": "when response was received and contained sub-code." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "List of regions contacted during operation in the order that they were contacted. If there is more than one region listed, it indicates that the operation was performed on multiple regions i.e. cross-regional call.\n", + "examples": [ + [ + "North Central US", + "Australia East", + "Australia Southeast" + ] + ], + "name": "azure.cosmosdb.operation.contacted_regions", + "note": "Region name matches the format of `displayName` in [Azure Location API](https://learn.microsoft.com/rest/api/resources/subscriptions/list-locations)\n", + "requirement_level": { + "recommended": "If available" + }, + "stability": "development", + "type": "string[]" + }, + { + "brief": "Cosmos DB container name.\n", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "[Request units](https://learn.microsoft.com/azure/cosmos-db/request-units) consumed by the operation.", + "id": "metric.azure.cosmosdb.client.operation.request_charge", + "instrument": "histogram", + "lineage": { + "attributes": { + "azure.cosmosdb.consistency.level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.cosmosdb.operation.contacted_regions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.cosmosdb.response.sub_status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "db.collection.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/azure/cosmosdb-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "azure.cosmosdb.client.operation.request_charge", + "stability": "development", + "type": "metric", + "unit": "{request_unit}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Number of active client instances.", + "id": "metric.azure.cosmosdb.client.active_instance.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/azure/cosmosdb-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "azure.cosmosdb.client.active_instance.count", + "stability": "development", + "type": "metric", + "unit": "{instance}" + }, + { + "attributes": [ + { + "brief": "The mode of the CPU", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + }, + { + "brief": "The logical CPU number [0..n-1]", + "examples": [ + 1 + ], + "name": "cpu.logical_number", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "Attributes specific to a cpu instance.", + "display_name": "CPU Attributes", + "id": "registry.cpu", + "lineage": { + "provenance": { + "path": "/home/weaver/source/cpu/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.state` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.state`.", + "reason": "renamed", + "renamed_to": "db.client.connection.state" + }, + "examples": [ + "idle" + ], + "name": "db.client.connections.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "id": "used", + "stability": "development", + "value": "used" + } + ] + } + }, + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `db.client.connection.count` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.count`.", + "reason": "renamed", + "renamed_to": "db.client.connection.count" + }, + "id": "metric.db.client.connections.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connections.pool.name": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + }, + "db.client.connections.state": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connections.usage", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `db.client.connection.idle.max` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.idle.max`.", + "reason": "renamed", + "renamed_to": "db.client.connection.idle.max" + }, + "id": "metric.db.client.connections.idle.max", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connections.pool.name": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connections.idle.max", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `db.client.connection.idle.min` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.idle.min`.", + "reason": "renamed", + "renamed_to": "db.client.connection.idle.min" + }, + "id": "metric.db.client.connections.idle.min", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connections.pool.name": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connections.idle.min", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `db.client.connection.max` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.max`.", + "reason": "renamed", + "renamed_to": "db.client.connection.max" + }, + "id": "metric.db.client.connections.max", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connections.pool.name": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connections.max", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `db.client.connection.pending_requests` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pending_requests`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pending_requests" + }, + "id": "metric.db.client.connections.pending_requests", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "db.client.connections.pool.name": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connections.pending_requests", + "stability": "development", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `db.client.connection.timeouts` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.timeouts`.", + "reason": "renamed", + "renamed_to": "db.client.connection.timeouts" + }, + "id": "metric.db.client.connections.timeouts", + "instrument": "counter", + "lineage": { + "attributes": { + "db.client.connections.pool.name": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connections.timeouts", + "stability": "development", + "type": "metric", + "unit": "{timeout}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `db.client.connection.create_time` instead. Note: the unit also changed from `ms` to `s`.", + "deprecated": { + "note": "Replaced by `db.client.connection.create_time` with unit `s`.", + "reason": "uncategorized" + }, + "id": "metric.db.client.connections.create_time", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.client.connections.pool.name": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connections.create_time", + "stability": "development", + "type": "metric", + "unit": "ms" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `db.client.connection.wait_time` instead. Note: the unit also changed from `ms` to `s`.", + "deprecated": { + "note": "Replaced by `db.client.connection.wait_time` with unit `s`.", + "reason": "uncategorized" + }, + "id": "metric.db.client.connections.wait_time", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.client.connections.pool.name": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connections.wait_time", + "stability": "development", + "type": "metric", + "unit": "ms" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `db.client.connection.use_time` instead. Note: the unit also changed from `ms` to `s`.", + "deprecated": { + "note": "Replaced by `db.client.connection.use_time` with unit `s`.", + "reason": "uncategorized" + }, + "id": "metric.db.client.connections.use_time", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.client.connections.pool.name": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.metrics.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.connections.use_time", + "stability": "development", + "type": "metric", + "unit": "ms" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Cosmos DB container name.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call. The operation name MAY be parsed from the query text, in which case it SHOULD be the single operation name found in the query.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Deprecated, use `azure.cosmosdb.response.sub_status_code` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.response.sub_status_code`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.response.sub_status_code" + }, + "examples": [ + 1000, + 1002 + ], + "name": "db.cosmosdb.sub_status_code", + "requirement_level": { + "conditionally_required": "when response was received and contained sub-code." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `cosmosdb.consistency.level` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.consistency.level`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.consistency.level" + }, + "examples": [ + "Eventual", + "ConsistentPrefix", + "BoundedStaleness", + "Strong", + "Session" + ], + "name": "db.cosmosdb.consistency_level", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": { + "members": [ + { + "id": "strong", + "stability": "development", + "value": "Strong" + }, + { + "id": "bounded_staleness", + "stability": "development", + "value": "BoundedStaleness" + }, + { + "id": "session", + "stability": "development", + "value": "Session" + }, + { + "id": "eventual", + "stability": "development", + "value": "Eventual" + }, + { + "id": "consistent_prefix", + "stability": "development", + "value": "ConsistentPrefix" + } + ] + } + }, + { + "brief": "Deprecated, use `azure.cosmosdb.operation.contacted_regions` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.operation.contacted_regions`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.operation.contacted_regions" + }, + "examples": [ + [ + "North Central US", + "Australia East", + "Australia Southeast" + ] + ], + "name": "db.cosmosdb.regions_contacted", + "requirement_level": { + "recommended": "If available" + }, + "stability": "development", + "type": "string[]" + } + ], + "brief": "Deprecated, use `azure.cosmosdb.client.operation.request_charge` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.client.operation.request_charge`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.client.operation.request_charge" + }, + "id": "metric.db.client.cosmosdb.operation.request_charge", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.cosmosdb.consistency_level": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.deprecated" + }, + "db.cosmosdb.regions_contacted": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.deprecated" + }, + "db.cosmosdb.sub_status_code": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db.deprecated" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.cosmosdb.operation.request_charge", + "stability": "development", + "type": "metric", + "unit": "{request_unit}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Deprecated, use `azure.cosmosdb.client.active_instance.count` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.client.active_instance.count`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.client.active_instance.count" + }, + "id": "metric.db.client.cosmosdb.active_instance.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.cosmosdb.active_instance.count", + "stability": "development", + "type": "metric", + "unit": "{instance}" + }, + { + "attributes": [ + { + "brief": "Represents the human-readable identifier of the node/instance to which a request was routed.\n", + "examples": [ + "instance-0000000001" + ], + "name": "elasticsearch.node.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This section defines attributes for Elasticsearch.\n", + "display_name": "Elasticsearch Attributes", + "id": "registry.elasticsearch", + "lineage": { + "provenance": { + "path": "/home/weaver/source/elasticsearch/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The lookup key of the feature flag.", + "examples": [ + "logo-color" + ], + "name": "feature_flag.key", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "Identifies the feature flag provider.", + "examples": [ + "Flag Manager" + ], + "name": "feature_flag.provider.name", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "A semantic identifier for an evaluated flag value.\n", + "examples": [ + "red", + "true", + "on" + ], + "name": "feature_flag.result.variant", + "note": "A semantic identifier, commonly referred to as a variant, provides a means\nfor referring to a value without including the value itself. This can\nprovide additional context for understanding the meaning behind a value.\nFor example, the variant `red` maybe be used for the value `#c05543`.", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "The unique identifier for the flag evaluation context. For example, the targeting key.\n", + "examples": [ + "5157782b-2203-4c80-a857-dbbd5e7761db" + ], + "name": "feature_flag.context.id", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "The version of the ruleset used during the evaluation. This may be any stable value which uniquely identifies the ruleset.\n", + "examples": [ + "1", + "01ABCDEF" + ], + "name": "feature_flag.version", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "The identifier of the [flag set](https://openfeature.dev/specification/glossary/#flag-set) to which the feature flag belongs.\n", + "examples": [ + "proj-1", + "ab98sgs", + "service1/dev" + ], + "name": "feature_flag.set.id", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "The reason code which shows how a feature flag value was determined.\n", + "examples": [ + "static", + "targeting_match", + "error", + "default" + ], + "name": "feature_flag.result.reason", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": { + "members": [ + { + "brief": "The resolved value is static (no dynamic evaluation).", + "id": "static", + "stability": "release_candidate", + "value": "static" + }, + { + "brief": "The resolved value fell back to a pre-configured value (no dynamic evaluation occurred or dynamic evaluation yielded no result).", + "id": "default", + "stability": "release_candidate", + "value": "default" + }, + { + "brief": "The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.", + "id": "targeting_match", + "stability": "release_candidate", + "value": "targeting_match" + }, + { + "brief": "The resolved value was the result of pseudorandom assignment.", + "id": "split", + "stability": "release_candidate", + "value": "split" + }, + { + "brief": "The resolved value was retrieved from cache.", + "id": "cached", + "stability": "release_candidate", + "value": "cached" + }, + { + "brief": "The resolved value was the result of the flag being disabled in the management system.", + "id": "disabled", + "stability": "release_candidate", + "value": "disabled" + }, + { + "brief": "The reason for the resolved value could not be determined.", + "id": "unknown", + "stability": "release_candidate", + "value": "unknown" + }, + { + "brief": "The resolved value is non-authoritative or possibly out of date", + "id": "stale", + "stability": "release_candidate", + "value": "stale" + }, + { + "brief": "The resolved value was the result of an error.", + "id": "error", + "stability": "release_candidate", + "value": "error" + } + ] + } + }, + { + "brief": "The evaluated value of the feature flag.", + "examples": [ + "#ff0000", + true, + 3 + ], + "name": "feature_flag.result.value", + "note": "With some feature flag providers, feature flag results can be quite large or contain private or sensitive details.\nBecause of this, `feature_flag.result.variant` is often the preferred attribute if it is available.\n\nIt may be desirable to redact or otherwise limit the size and scope of `feature_flag.result.value` if possible.\nBecause the evaluated flag value is unstructured and may be any type, it is left to the instrumentation author to determine how best to achieve this.\n", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "any" + } + ], + "brief": "This document defines attributes for Feature Flags.\n", + "display_name": "Feature Flag Attributes", + "id": "registry.feature_flag", + "lineage": { + "provenance": { + "path": "/home/weaver/source/feature-flags/registry.yaml", + "registry_id": "main" + } + }, + "stability": "release_candidate", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the component\n", + "name": "hw.type", + "note": "Describes the category of the hardware component for which `hw.state` is being reported. For example, `hw.type=temperature` along with `hw.state=degraded` would indicate that the temperature of the hardware component has been reported as `degraded`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Battery", + "id": "battery", + "stability": "development", + "value": "battery" + }, + { + "brief": "CPU", + "id": "cpu", + "stability": "development", + "value": "cpu" + }, + { + "brief": "Disk controller", + "id": "disk_controller", + "stability": "development", + "value": "disk_controller" + }, + { + "brief": "Enclosure", + "id": "enclosure", + "stability": "development", + "value": "enclosure" + }, + { + "brief": "Fan", + "id": "fan", + "stability": "development", + "value": "fan" + }, + { + "brief": "GPU", + "id": "gpu", + "stability": "development", + "value": "gpu" + }, + { + "brief": "Logical disk", + "id": "logical_disk", + "stability": "development", + "value": "logical_disk" + }, + { + "brief": "Memory", + "id": "memory", + "stability": "development", + "value": "memory" + }, + { + "brief": "Network", + "id": "network", + "stability": "development", + "value": "network" + }, + { + "brief": "Physical disk", + "id": "physical_disk", + "stability": "development", + "value": "physical_disk" + }, + { + "brief": "Power supply", + "id": "power_supply", + "stability": "development", + "value": "power_supply" + }, + { + "brief": "Tape drive", + "id": "tape_drive", + "stability": "development", + "value": "tape_drive" + }, + { + "brief": "Temperature", + "id": "temperature", + "stability": "development", + "value": "temperature" + }, + { + "brief": "Voltage", + "id": "voltage", + "stability": "development", + "value": "voltage" + } + ] + } + }, + { + "brief": "The current state of the component\n", + "name": "hw.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "Failed", + "id": "failed", + "stability": "development", + "value": "failed" + }, + { + "brief": "Needs Cleaning", + "id": "needs_cleaning", + "stability": "development", + "value": "needs_cleaning" + }, + { + "brief": "OK", + "id": "ok", + "stability": "development", + "value": "ok" + }, + { + "brief": "Predicted Failure", + "id": "predicted_failure", + "stability": "development", + "value": "predicted_failure" + } + ] + } + }, + { + "brief": "The current state of the battery\n", + "name": "hw.battery.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Charging", + "id": "charging", + "stability": "development", + "value": "charging" + }, + { + "brief": "Discharging", + "id": "discharging", + "stability": "development", + "value": "discharging" + } + ] + } + }, + { + "brief": "Type of limit for hardware components\n", + "name": "hw.limit_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Critical", + "id": "critical", + "stability": "development", + "value": "critical" + }, + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "High Critical", + "id": "high_critical", + "stability": "development", + "value": "high.critical" + }, + { + "brief": "High Degraded", + "id": "high_degraded", + "stability": "development", + "value": "high.degraded" + }, + { + "brief": "Low Critical", + "id": "low_critical", + "stability": "development", + "value": "low.critical" + }, + { + "brief": "Low Degraded", + "id": "low_degraded", + "stability": "development", + "value": "low.degraded" + }, + { + "brief": "Maximum", + "id": "max", + "stability": "development", + "value": "max" + }, + { + "brief": "Throttled", + "id": "throttled", + "stability": "development", + "value": "throttled" + }, + { + "brief": "Turbo", + "id": "turbo", + "stability": "development", + "value": "turbo" + } + ] + } + }, + { + "brief": "BIOS version of the hardware component\n", + "examples": [ + "1.2.3" + ], + "name": "hw.bios_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Driver version for the hardware component\n", + "examples": [ + "10.2.1-3" + ], + "name": "hw.driver_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Battery [chemistry](https://schemas.dmtf.org/wbem/cim-html/2.31.0/CIM_Battery.html), e.g. Lithium-Ion, Nickel-Cadmium, etc.\n", + "examples": [ + "Li-ion", + "NiMH" + ], + "name": "hw.battery.chemistry", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Design capacity in Watts-hours or Amper-hours\n", + "examples": [ + "9.3Ah", + "50Wh" + ], + "name": "hw.battery.capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the enclosure (useful for modular systems)\n", + "examples": [ + "Computer", + "Storage", + "Switch" + ], + "name": "hw.enclosure.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of task the GPU is performing\n", + "name": "hw.gpu.task", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Decoder", + "id": "decoder", + "stability": "development", + "value": "decoder" + }, + { + "brief": "Encoder", + "id": "encoder", + "stability": "development", + "value": "encoder" + }, + { + "brief": "General", + "id": "general", + "stability": "development", + "value": "general" + } + ] + } + }, + { + "brief": "RAID Level of the logical disk\n", + "examples": [ + "RAID0+1", + "RAID5", + "RAID10" + ], + "name": "hw.logical_disk.raid_level", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "State of the logical disk space usage\n", + "name": "hw.logical_disk.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Used", + "id": "used", + "stability": "development", + "value": "used" + }, + { + "brief": "Free", + "id": "free", + "stability": "development", + "value": "free" + } + ] + } + }, + { + "brief": "Type of the memory module\n", + "examples": [ + "DDR4", + "DDR5", + "LPDDR5" + ], + "name": "hw.memory.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Logical addresses of the adapter (e.g. IP address, or WWPN)\n", + "examples": [ + [ + "172.16.8.21", + "57.11.193.42" + ] + ], + "name": "hw.network.logical_addresses", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Physical address of the adapter (e.g. MAC address, or WWNN)\n", + "examples": [ + "00-90-F5-E9-7B-36" + ], + "name": "hw.network.physical_address", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the physical disk\n", + "examples": [ + "HDD", + "SSD", + "10K" + ], + "name": "hw.physical_disk.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "State of the physical disk endurance utilization\n", + "name": "hw.physical_disk.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Remaining", + "id": "remaining", + "stability": "development", + "value": "remaining" + } + ] + } + }, + { + "brief": "[S.M.A.R.T.](https://wikipedia.org/wiki/S.M.A.R.T.) (Self-Monitoring, Analysis, and Reporting Technology) attribute of the physical disk\n", + "examples": [ + "Spin Retry Count", + "Seek Error Rate", + "Raw Read Error Rate" + ], + "name": "hw.physical_disk.smart_attribute", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of tape drive operation\n", + "name": "hw.tape_drive.operation_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Mount", + "id": "mount", + "stability": "development", + "value": "mount" + }, + { + "brief": "Unmount", + "id": "unmount", + "stability": "development", + "value": "unmount" + }, + { + "brief": "Clean", + "id": "clean", + "stability": "development", + "value": "clean" + } + ] + } + } + ], + "brief": "Attributes for hardware.\n", + "display_name": "Hardware Attributes", + "id": "registry.hardware", + "lineage": { + "provenance": { + "path": "/home/weaver/source/hardware/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "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", + "stability": "development", + "type": "string" + }, + { + "brief": "The mobile carrier country code.", + "examples": "310", + "name": "network.carrier.mcc", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The mobile carrier network code.", + "examples": "001", + "name": "network.carrier.mnc", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the mobile carrier.", + "examples": "sprint", + "name": "network.carrier.name", + "requirement_level": "recommended", + "stability": "development", + "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", + "stability": "development", + "type": { + "members": [ + { + "brief": "GPRS", + "id": "gprs", + "stability": "development", + "value": "gprs" + }, + { + "brief": "EDGE", + "id": "edge", + "stability": "development", + "value": "edge" + }, + { + "brief": "UMTS", + "id": "umts", + "stability": "development", + "value": "umts" + }, + { + "brief": "CDMA", + "id": "cdma", + "stability": "development", + "value": "cdma" + }, + { + "brief": "EVDO Rel. 0", + "id": "evdo_0", + "stability": "development", + "value": "evdo_0" + }, + { + "brief": "EVDO Rev. A", + "id": "evdo_a", + "stability": "development", + "value": "evdo_a" + }, + { + "brief": "CDMA2000 1XRTT", + "id": "cdma2000_1xrtt", + "stability": "development", + "value": "cdma2000_1xrtt" + }, + { + "brief": "HSDPA", + "id": "hsdpa", + "stability": "development", + "value": "hsdpa" + }, + { + "brief": "HSUPA", + "id": "hsupa", + "stability": "development", + "value": "hsupa" + }, + { + "brief": "HSPA", + "id": "hspa", + "stability": "development", + "value": "hspa" + }, + { + "brief": "IDEN", + "id": "iden", + "stability": "development", + "value": "iden" + }, + { + "brief": "EVDO Rev. B", + "id": "evdo_b", + "stability": "development", + "value": "evdo_b" + }, + { + "brief": "LTE", + "id": "lte", + "stability": "development", + "value": "lte" + }, + { + "brief": "EHRPD", + "id": "ehrpd", + "stability": "development", + "value": "ehrpd" + }, + { + "brief": "HSPAP", + "id": "hspap", + "stability": "development", + "value": "hspap" + }, + { + "brief": "GSM", + "id": "gsm", + "stability": "development", + "value": "gsm" + }, + { + "brief": "TD-SCDMA", + "id": "td_scdma", + "stability": "development", + "value": "td_scdma" + }, + { + "brief": "IWLAN", + "id": "iwlan", + "stability": "development", + "value": "iwlan" + }, + { + "brief": "5G NR (New Radio)", + "id": "nr", + "stability": "development", + "value": "nr" + }, + { + "brief": "5G NRNSA (New Radio Non-Standalone)", + "id": "nrnsa", + "stability": "development", + "value": "nrnsa" + }, + { + "brief": "LTE CA", + "id": "lte_ca", + "stability": "development", + "value": "lte_ca" + } + ] + } + }, + { + "brief": "The internet connection type.", + "examples": "wifi", + "name": "network.connection.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "wifi", + "stability": "development", + "value": "wifi" + }, + { + "id": "wired", + "stability": "development", + "value": "wired" + }, + { + "id": "cell", + "stability": "development", + "value": "cell" + }, + { + "id": "unavailable", + "stability": "development", + "value": "unavailable" + }, + { + "id": "unknown", + "stability": "development", + "value": "unknown" + } + ] + } + }, + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Local port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.local.port", + "requirement_level": "recommended", + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The state of network connection", + "examples": [ + "close_wait" + ], + "name": "network.connection.state", + "note": "Connection states are defined as part of the [rfc9293](https://datatracker.ietf.org/doc/html/rfc9293#section-3.3.2)", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "closed", + "stability": "development", + "value": "closed" + }, + { + "id": "close_wait", + "stability": "development", + "value": "close_wait" + }, + { + "id": "closing", + "stability": "development", + "value": "closing" + }, + { + "id": "established", + "stability": "development", + "value": "established" + }, + { + "id": "fin_wait_1", + "stability": "development", + "value": "fin_wait_1" + }, + { + "id": "fin_wait_2", + "stability": "development", + "value": "fin_wait_2" + }, + { + "id": "last_ack", + "stability": "development", + "value": "last_ack" + }, + { + "id": "listen", + "stability": "development", + "value": "listen" + }, + { + "id": "syn_received", + "stability": "development", + "value": "syn_received" + }, + { + "id": "syn_sent", + "stability": "development", + "value": "syn_sent" + }, + { + "id": "time_wait", + "stability": "development", + "value": "time_wait" + } + ] + } + } + ], + "brief": "These attributes may be used for any network related operation.\n", + "display_name": "Network Attributes", + "id": "registry.network", + "lineage": { + "provenance": { + "path": "/home/weaver/source/network/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Indicates that there are functions related to this mapping.\n", + "name": "pprof.mapping.has_functions", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Indicates that there are filenames related to this mapping.\n", + "name": "pprof.mapping.has_filenames", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Indicates that there are line numbers related to this mapping.\n", + "name": "pprof.mapping.has_line_numbers", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Indicates that there are inline frames related to this mapping.\n", + "name": "pprof.mapping.has_inline_frames", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Provides an indication that multiple symbols map to this location\u0027s address, for example due to identical code folding by the linker. In that case the line information represents one of the multiple symbols. This field must be recomputed when the symbolization state of the profile changes.\n", + "name": "pprof.location.is_folded", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Free-form text associated with the profile. This field should not be used to store any machine-readable information, it is only for human-friendly content.\n", + "examples": [ + [ + "hello world", + "bazinga" + ] + ], + "name": "pprof.profile.comment", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "Attributes specific to pprof that help convert from pprof to Profiling signal.\n", + "display_name": "Pprof specific attributes for the Profiling signal", + "id": "registry.pprof", + "lineage": { + "provenance": { + "path": "/home/weaver/source/pprof/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Logical name of the service.\n", + "examples": [ + "shoppingcart" + ], + "name": "service.name", + "note": "MUST be the same for all instances of horizontally scaled services. If the value was not specified, SDKs MUST fallback to `unknown_service:` concatenated with [`process.executable.name`](process.md), e.g. `unknown_service:bash`. If `process.executable.name` is not available, the value MUST be set to `unknown_service`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The version string of the service API or implementation. The format is not defined by these conventions.\n", + "examples": [ + "2.0.0", + "a01dbef8a" + ], + "name": "service.version", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A namespace for `service.name`.\n", + "examples": [ + "Shop" + ], + "name": "service.namespace", + "note": "A string value having a meaning that helps to distinguish a group of services, for example the team name that owns a group of services. `service.name` is expected to be unique within the same namespace. If `service.namespace` is not specified in the Resource then `service.name` is expected to be unique for all services that have no explicit namespace defined (so the empty/unspecified namespace is simply one more valid namespace). Zero-length namespace string is assumed equal to unspecified namespace.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The string ID of the service instance.\n", + "examples": [ + "627cc493-f310-47de-96bd-71410b7dec09" + ], + "name": "service.instance.id", + "note": "MUST be unique for each instance of the same `service.namespace,service.name` pair (in other words\n`service.namespace,service.name,service.instance.id` triplet MUST be globally unique). The ID helps to\ndistinguish instances of the same service that exist at the same time (e.g. instances of a horizontally scaled\nservice).\n\nImplementations, such as SDKs, are recommended to generate a random Version 1 or Version 4 [RFC\n4122](https://www.ietf.org/rfc/rfc4122.txt) UUID, but are free to use an inherent unique ID as the source of\nthis value if stability is desirable. In that case, the ID SHOULD be used as source of a UUID Version 5 and\nSHOULD use the following UUID as the namespace: `4d63009a-8d0f-11ee-aad7-4c796ed8e320`.\n\nUUIDs are typically recommended, as only an opaque value for the purposes of identifying a service instance is\nneeded. Similar to what can be seen in the man page for the\n[`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/latest/machine-id.html) file, the underlying\ndata, such as pod name and namespace should be treated as confidential, being the user\u0027s choice to expose it\nor not via another resource attribute.\n\nFor applications running behind an application server (like unicorn), we do not recommend using one identifier\nfor all processes participating in the application. Instead, it\u0027s recommended each division (e.g. a worker\nthread in unicorn) to have its own instance.id.\n\nIt\u0027s not recommended for a Collector to set `service.instance.id` if it can\u0027t unambiguously determine the\nservice instance that is generating that telemetry. For instance, creating an UUID based on `pod.name` will\nlikely be wrong, as the Collector might not know from which container within that pod the telemetry originated.\nHowever, Collectors can set the `service.instance.id` if they can unambiguously determine the service instance\nfor that telemetry. This is typically the case for scraping receivers, as they know the target address and\nport.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A service instance.\n", + "display_name": "Service Attributes", + "id": "registry.service", + "lineage": { + "provenance": { + "path": "/home/weaver/source/service/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Uniquely identifies the framework API revision offered by a version (`os.version`) of the android operating system. More information can be found in the [Android API levels documentation](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels).\n", + "examples": [ + "33", + "32" + ], + "name": "android.os.api_level", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The Android platform on which the Android application is running.\n", + "id": "entity.android", + "lineage": { + "attributes": { + "android.os.api_level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.android" + } + }, + "provenance": { + "path": "/home/weaver/source/android/entities.yaml", + "registry_id": "main" + } + }, + "name": "android", + "stability": "development", + "type": "entity" + }, + { + "body": { + "fields": [ + { + "brief": "Name of the web vital.", + "examples": [ + "cls" + ], + "id": "name", + "members": [ + { + "brief": "Cumulative Layout Shift. See [cls](https://web.dev/articles/cls).", + "id": "cls", + "stability": "development", + "value": "cls" + }, + { + "brief": "Largest Contentful Paint. See [lcp](https://web.dev/articles/lcp).", + "id": "lcp", + "stability": "development", + "value": "lcp" + }, + { + "brief": "First Input Delay. See [fid](https://web.dev/articles/fid).", + "id": "fid", + "stability": "development", + "value": "fid" + }, + { + "brief": "Interation to Next Paint. See [inp](https://web.dev/articles/inp).", + "id": "inp", + "stability": "development", + "value": "inp" + } + ], + "requirement_level": "required", + "stability": "development", + "type": "enum" + }, + { + "brief": "Value of the web vital.", + "examples": [ + 1.0 + ], + "id": "value", + "requirement_level": "required", + "stability": "development", + "type": "double" + }, + { + "brief": "The delta between the current value and the last-reported value. See [delta](https://github.com/GoogleChrome/web-vitals?tab=readme-ov-file#report-only-the-delta-of-changes).", + "examples": [ + 0.2 + ], + "id": "delta", + "requirement_level": "required", + "stability": "development", + "type": "double" + }, + { + "brief": "A unique ID representing this particular metric instance.", + "examples": [ + "v3-1677874579383-6381583661209" + ], + "id": "id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "id": "browser.web_vital", + "requirement_level": "required", + "stability": "development", + "type": "map" + }, + "brief": "This event describes the website performance metrics introduced by Google, See [web vitals](https://web.dev/vitals).\n", + "id": "event.browser.web_vital", + "lineage": { + "provenance": { + "path": "/home/weaver/source/browser/events.yaml", + "registry_id": "main" + } + }, + "name": "browser.web_vital", + "stability": "development", + "type": "event" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of processors available to the process.", + "id": "metric.dotnet.process.cpu.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.process.cpu.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as accessing [`Environment.ProcessorCount`](https://learn.microsoft.com/dotnet/api/system.environment.processorcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The mode of the CPU", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + } + ], + "brief": "CPU time used by the process.", + "id": "metric.dotnet.process.cpu.time", + "instrument": "counter", + "lineage": { + "attributes": { + "cpu.mode": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.process.cpu.time", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as accessing the corresponding processor time properties on [`System.Diagnostics.Process`](https://learn.microsoft.com/dotnet/api/system.diagnostics.process).\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of bytes of physical memory mapped to the process context.", + "id": "metric.dotnet.process.memory.working_set", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.process.memory.working_set", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`Environment.WorkingSet`](https://learn.microsoft.com/dotnet/api/system.environment.workingset).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the garbage collector managed heap generation.", + "examples": [ + "gen0", + "gen1", + "gen2" + ], + "name": "dotnet.gc.heap.generation", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "gen0", + "stability": "stable", + "value": "gen0" + }, + { + "brief": "Generation 1", + "id": "gen1", + "stability": "stable", + "value": "gen1" + }, + { + "brief": "Generation 2", + "id": "gen2", + "stability": "stable", + "value": "gen2" + }, + { + "brief": "Large Object Heap", + "id": "loh", + "stability": "stable", + "value": "loh" + }, + { + "brief": "Pinned Object Heap", + "id": "poh", + "stability": "stable", + "value": "poh" + } + ] + } + } + ], + "brief": "The number of garbage collections that have occurred since the process has started.", + "id": "metric.dotnet.gc.collections", + "instrument": "counter", + "lineage": { + "attributes": { + "dotnet.gc.heap.generation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.dotnet" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.collections", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric uses the [`GC.CollectionCount(int generation)`](https://learn.microsoft.com/dotnet/api/system.gc.collectioncount) API to calculate exclusive collections per generation.\n", + "stability": "stable", + "type": "metric", + "unit": "{collection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The *approximate* number of bytes allocated on the managed GC heap since the process has started. The returned value does not include any native allocations.\n", + "id": "metric.dotnet.gc.heap.total_allocated", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.heap.total_allocated", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetTotalAllocatedBytes()`](https://learn.microsoft.com/dotnet/api/system.gc.gettotalallocatedbytes).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The amount of committed virtual memory in use by the .NET GC, as observed during the latest garbage collection.\n", + "id": "metric.dotnet.gc.last_collection.memory.committed_size", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.last_collection.memory.committed_size", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetGCMemoryInfo().TotalCommittedBytes`](https://learn.microsoft.com/dotnet/api/system.gcmemoryinfo.totalcommittedbytes). Committed virtual memory may be larger than the heap size because it includes both memory for storing existing objects (the heap size) and some extra memory that is ready to handle newly allocated objects in the future.\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the garbage collector managed heap generation.", + "examples": [ + "gen0", + "gen1", + "gen2" + ], + "name": "dotnet.gc.heap.generation", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "gen0", + "stability": "stable", + "value": "gen0" + }, + { + "brief": "Generation 1", + "id": "gen1", + "stability": "stable", + "value": "gen1" + }, + { + "brief": "Generation 2", + "id": "gen2", + "stability": "stable", + "value": "gen2" + }, + { + "brief": "Large Object Heap", + "id": "loh", + "stability": "stable", + "value": "loh" + }, + { + "brief": "Pinned Object Heap", + "id": "poh", + "stability": "stable", + "value": "poh" + } + ] + } + } + ], + "brief": "The managed GC heap size (including fragmentation), as observed during the latest garbage collection.\n", + "id": "metric.dotnet.gc.last_collection.heap.size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "dotnet.gc.heap.generation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.dotnet" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.last_collection.heap.size", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetGCMemoryInfo().GenerationInfo.SizeAfterBytes`](https://learn.microsoft.com/dotnet/api/system.gcgenerationinfo.sizeafterbytes).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the garbage collector managed heap generation.", + "examples": [ + "gen0", + "gen1", + "gen2" + ], + "name": "dotnet.gc.heap.generation", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "gen0", + "stability": "stable", + "value": "gen0" + }, + { + "brief": "Generation 1", + "id": "gen1", + "stability": "stable", + "value": "gen1" + }, + { + "brief": "Generation 2", + "id": "gen2", + "stability": "stable", + "value": "gen2" + }, + { + "brief": "Large Object Heap", + "id": "loh", + "stability": "stable", + "value": "loh" + }, + { + "brief": "Pinned Object Heap", + "id": "poh", + "stability": "stable", + "value": "poh" + } + ] + } + } + ], + "brief": "The heap fragmentation, as observed during the latest garbage collection.\n", + "id": "metric.dotnet.gc.last_collection.heap.fragmentation.size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "dotnet.gc.heap.generation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.dotnet" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.last_collection.heap.fragmentation.size", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetGCMemoryInfo().GenerationInfo.FragmentationAfterBytes`](https://learn.microsoft.com/dotnet/api/system.gcgenerationinfo.fragmentationafterbytes).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The total amount of time paused in GC since the process has started.", + "id": "metric.dotnet.gc.pause.time", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.pause.time", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetTotalPauseDuration()`](https://learn.microsoft.com/dotnet/api/system.gc.gettotalpauseduration).\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Count of bytes of intermediate language that have been compiled since the process has started.", + "id": "metric.dotnet.jit.compiled_il.size", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.jit.compiled_il.size", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`JitInfo.GetCompiledILBytes()`](https://learn.microsoft.com/dotnet/api/system.runtime.jitinfo.getcompiledilbytes).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of times the JIT compiler (re)compiled methods since the process has started.\n", + "id": "metric.dotnet.jit.compiled_methods", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.jit.compiled_methods", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`JitInfo.GetCompiledMethodCount()`](https://learn.microsoft.com/dotnet/api/system.runtime.jitinfo.getcompiledmethodcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{method}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The amount of time the JIT compiler has spent compiling methods since the process has started.\n", + "id": "metric.dotnet.jit.compilation.time", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.jit.compilation.time", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`JitInfo.GetCompilationTime()`](https://learn.microsoft.com/dotnet/api/system.runtime.jitinfo.getcompilationtime).\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of times there was contention when trying to acquire a monitor lock since the process has started.\n", + "id": "metric.dotnet.monitor.lock_contentions", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.monitor.lock_contentions", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`Monitor.LockContentionCount`](https://learn.microsoft.com/dotnet/api/system.threading.monitor.lockcontentioncount).\n", + "stability": "stable", + "type": "metric", + "unit": "{contention}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of thread pool threads that currently exist.", + "id": "metric.dotnet.thread_pool.thread.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.thread_pool.thread.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`ThreadPool.ThreadCount`](https://learn.microsoft.com/dotnet/api/system.threading.threadpool.threadcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{thread}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of work items that the thread pool has completed since the process has started.\n", + "id": "metric.dotnet.thread_pool.work_item.count", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.thread_pool.work_item.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`ThreadPool.CompletedWorkItemCount`](https://learn.microsoft.com/dotnet/api/system.threading.threadpool.completedworkitemcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{work_item}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of work items that are currently queued to be processed by the thread pool.\n", + "id": "metric.dotnet.thread_pool.queue.length", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.thread_pool.queue.length", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`ThreadPool.PendingWorkItemCount`](https://learn.microsoft.com/dotnet/api/system.threading.threadpool.pendingworkitemcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{work_item}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of timer instances that are currently active.", + "id": "metric.dotnet.timer.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.timer.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`Timer.ActiveCount`](https://learn.microsoft.com/dotnet/api/system.threading.timer.activecount).\n", + "stability": "stable", + "type": "metric", + "unit": "{timer}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of .NET assemblies that are currently loaded.", + "id": "metric.dotnet.assembly.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.assembly.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`AppDomain.CurrentDomain.GetAssemblies().Length`](https://learn.microsoft.com/dotnet/api/system.appdomain.getassemblies).\n", + "stability": "stable", + "type": "metric", + "unit": "{assembly}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "System.OperationCanceledException", + "Contoso.MyException" + ], + "name": "error.type", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The number of exceptions that have been thrown in managed code.", + "id": "metric.dotnet.exceptions", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.exceptions", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as counting calls to [`AppDomain.CurrentDomain.FirstChanceException`](https://learn.microsoft.com/dotnet/api/system.appdomain.firstchanceexception).\n", + "stability": "stable", + "type": "metric", + "unit": "{exception}" + }, + { + "attributes": [ + { + "brief": "Identifies the feature flag provider.", + "examples": [ + "Flag Manager" + ], + "name": "feature_flag.provider.name", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "The unique identifier for the flag evaluation context. For example, the targeting key.\n", + "examples": [ + "5157782b-2203-4c80-a857-dbbd5e7761db" + ], + "name": "feature_flag.context.id", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "The version of the ruleset used during the evaluation. This may be any stable value which uniquely identifies the ruleset.\n", + "examples": [ + "1", + "01ABCDEF" + ], + "name": "feature_flag.version", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "The identifier of the [flag set](https://openfeature.dev/specification/glossary/#flag-set) to which the feature flag belongs.\n", + "examples": [ + "proj-1", + "ab98sgs", + "service1/dev" + ], + "name": "feature_flag.set.id", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "The reason code which shows how a feature flag value was determined.\n", + "examples": [ + "static", + "targeting_match", + "error", + "default" + ], + "name": "feature_flag.result.reason", + "requirement_level": "recommended", + "stability": "release_candidate", + "type": { + "members": [ + { + "brief": "The resolved value is static (no dynamic evaluation).", + "id": "static", + "stability": "release_candidate", + "value": "static" + }, + { + "brief": "The resolved value fell back to a pre-configured value (no dynamic evaluation occurred or dynamic evaluation yielded no result).", + "id": "default", + "stability": "release_candidate", + "value": "default" + }, + { + "brief": "The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.", + "id": "targeting_match", + "stability": "release_candidate", + "value": "targeting_match" + }, + { + "brief": "The resolved value was the result of pseudorandom assignment.", + "id": "split", + "stability": "release_candidate", + "value": "split" + }, + { + "brief": "The resolved value was retrieved from cache.", + "id": "cached", + "stability": "release_candidate", + "value": "cached" + }, + { + "brief": "The resolved value was the result of the flag being disabled in the management system.", + "id": "disabled", + "stability": "release_candidate", + "value": "disabled" + }, + { + "brief": "The reason for the resolved value could not be determined.", + "id": "unknown", + "stability": "release_candidate", + "value": "unknown" + }, + { + "brief": "The resolved value is non-authoritative or possibly out of date", + "id": "stale", + "stability": "release_candidate", + "value": "stale" + }, + { + "brief": "The resolved value was the result of an error.", + "id": "error", + "stability": "release_candidate", + "value": "error" + } + ] + } + }, + { + "brief": "The lookup key of the feature flag.", + "examples": [ + "logo-color" + ], + "name": "feature_flag.key", + "requirement_level": "required", + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "A semantic identifier for an evaluated flag value.\n", + "examples": [ + "red", + "true", + "on" + ], + "name": "feature_flag.result.variant", + "note": "A semantic identifier, commonly referred to as a variant, provides a means\nfor referring to a value without including the value itself. This can\nprovide additional context for understanding the meaning behind a value.\nFor example, the variant `red` maybe be used for the value `#c05543`.", + "requirement_level": { + "conditionally_required": "If feature flag provider supplies a variant or equivalent concept." + }, + "stability": "release_candidate", + "type": "string" + }, + { + "brief": "The evaluated value of the feature flag.", + "examples": [ + "#ff0000", + true, + 3 + ], + "name": "feature_flag.result.value", + "note": "With some feature flag providers, feature flag results can be quite large or contain private or sensitive details.\nBecause of this, `feature_flag.result.variant` is often the preferred attribute if it is available.\n\nIt may be desirable to redact or otherwise limit the size and scope of `feature_flag.result.value` if possible.\nBecause the evaluated flag value is unstructured and may be any type, it is left to the instrumentation author to determine how best to achieve this.\n", + "requirement_level": { + "conditionally_required": "If and only if feature flag provider does not supply variant or equivalent concept. Otherwise, `feature_flag.result.value` should be treated as opt-in.\n" + }, + "stability": "release_candidate", + "type": "any" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "provider_not_ready", + "targeting_key_missing", + "provider_fatal", + "general" + ], + "name": "error.type", + "note": "If one of these values applies, then it MUST be used; otherwise, a custom value MAY be used.\n\n| Value | Description | Stability |\n|---|---|---|\n| `flag_not_found` | The flag could not be found. | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) |\n| `invalid_context` | The evaluation context does not meet provider requirements. | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) |\n| `parse_error` | An error was encountered parsing data, such as a flag configuration. | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) |\n| `provider_fatal` | The provider has entered an irrecoverable error state. | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) |\n| `provider_not_ready` | The value was resolved before the provider was initialized. | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) |\n| `targeting_key_missing` | The provider requires a targeting key and one was not provided in the evaluation context. | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) |\n| `type_mismatch` | The type of the flag value does not match the expected type. | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) |\n| `general` | The error was for a reason not enumerated above. | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) |\n", + "requirement_level": { + "conditionally_required": "If and only if an error occurred during flag evaluation." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A message providing more detail about an error in human-readable form.", + "examples": [ + "Unexpected input type: string", + "The user has exceeded their storage quota" + ], + "name": "error.message", + "note": "Should not simply duplicate the value of `error.type`, but should provide more context. For example, if `error.type` is `invalid_context` the `error.message` may enumerate which context keys are missing or invalid.\n", + "requirement_level": { + "recommended": "If and only if an error occurred during flag evaluation and `error.type` does not sufficiently describe the error." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Defines feature flag evaluation as an event.\n", + "id": "event.feature_flag.evaluation", + "lineage": { + "attributes": { + "error.message": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "feature_flag.context.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.feature_flag" + }, + "feature_flag.key": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.feature_flag" + }, + "feature_flag.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.feature_flag" + }, + "feature_flag.result.reason": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.feature_flag" + }, + "feature_flag.result.value": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.feature_flag" + }, + "feature_flag.result.variant": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.feature_flag" + }, + "feature_flag.set.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.feature_flag" + }, + "feature_flag.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.feature_flag" + } + }, + "provenance": { + "path": "/home/weaver/source/feature-flags/events.yaml", + "registry_id": "main" + } + }, + "name": "feature_flag.evaluation", + "note": "A `feature_flag.evaluation` event SHOULD be emitted whenever a feature flag value is evaluated, which may happen many times over the course of an application lifecycle. For example, a website A/B testing different animations may evaluate a flag each time a button is clicked. A `feature_flag.evaluation` event is emitted on each evaluation even if the result is the same.\n", + "stability": "release_candidate", + "type": "event" + }, + { + "attributes": [ + { + "brief": "The name of the operation being executed.", + "examples": "findBookById", + "name": "graphql.operation.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the operation being executed.", + "examples": [ + "query", + "mutation", + "subscription" + ], + "name": "graphql.operation.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "GraphQL query", + "id": "query", + "stability": "development", + "value": "query" + }, + { + "brief": "GraphQL mutation", + "id": "mutation", + "stability": "development", + "value": "mutation" + }, + { + "brief": "GraphQL subscription", + "id": "subscription", + "stability": "development", + "value": "subscription" + } + ] + } + }, + { + "brief": "The GraphQL document being executed.", + "examples": "query findBookById { bookById(id: ?) { name } }", + "name": "graphql.document", + "note": "The value may be sanitized to exclude sensitive information.", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents an incoming operation on a GraphQL server implementation.\n", + "id": "span.graphql.server", + "lineage": { + "attributes": { + "graphql.document": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.graphql" + }, + "graphql.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.graphql" + }, + "graphql.operation.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.graphql" + } + }, + "provenance": { + "path": "/home/weaver/source/graphql/spans.yml", + "registry_id": "main" + } + }, + "note": "**Span name** SHOULD be of the format `{graphql.operation.type}` provided\n`graphql.operation.type` is available. If `graphql.operation.type` is not available,\nthe span SHOULD be named `GraphQL Operation`.\n\n\u003e **Warning**\n\u003e The `graphql.operation.name` value is provided by the client and can have high\n\u003e cardinality. Using it in the GraphQL server span name (by default) is\n\u003e NOT RECOMMENDED.\n\u003e\n\u003e Instrumentation MAY provide a configuration option to enable a more descriptive\n\u003e span name following `{graphql.operation.type} {graphql.operation.name}` format\n\u003e when `graphql.operation.name` is available.\n", + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider. For non-containerized systems, this should be the `machine-id`. See the table below for the sources to use to determine the `machine-id` based on operating system.\n", + "examples": [ + "fdbf79e8af94cb7f9e8df36789187052" + ], + "name": "host.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Name of the host. On Unix systems, it may contain what the hostname command returns, or the fully qualified hostname, or another name specified by the user.\n", + "examples": [ + "opentelemetry-test" + ], + "name": "host.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of host. For Cloud, this must be the machine type.\n", + "examples": [ + "n1-standard-1" + ], + "name": "host.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The CPU architecture the host system is running on.\n", + "name": "host.arch", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "AMD64", + "id": "amd64", + "stability": "development", + "value": "amd64" + }, + { + "brief": "ARM32", + "id": "arm32", + "stability": "development", + "value": "arm32" + }, + { + "brief": "ARM64", + "id": "arm64", + "stability": "development", + "value": "arm64" + }, + { + "brief": "Itanium", + "id": "ia64", + "stability": "development", + "value": "ia64" + }, + { + "brief": "32-bit PowerPC", + "id": "ppc32", + "stability": "development", + "value": "ppc32" + }, + { + "brief": "64-bit PowerPC", + "id": "ppc64", + "stability": "development", + "value": "ppc64" + }, + { + "brief": "IBM z/Architecture", + "id": "s390x", + "stability": "development", + "value": "s390x" + }, + { + "brief": "32-bit x86", + "id": "x86", + "stability": "development", + "value": "x86" + } + ] + } + }, + { + "brief": "Name of the VM image or OS install the host was instantiated from.\n", + "examples": [ + "infra-ami-eks-worker-node-7d4ec78312", + "CentOS-8-x86_64-1905" + ], + "name": "host.image.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "VM image ID or host OS image ID. For Cloud, this value is from the provider.\n", + "examples": [ + "ami-07b06b442921831e5" + ], + "name": "host.image.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version string of the VM image or host OS as defined in [Version Attributes](/docs/resource/README.md#version-attributes).\n", + "examples": [ + "0.1" + ], + "name": "host.image.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Available IP addresses of the host, excluding loopback interfaces.\n", + "examples": [ + [ + "192.168.1.140", + "fe80::abc2:4a28:737a:609e" + ] + ], + "name": "host.ip", + "note": "IPv4 Addresses MUST be specified in dotted-quad notation. IPv6 addresses MUST be specified in the [RFC 5952](https://www.rfc-editor.org/rfc/rfc5952.html) format.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Available MAC addresses of the host, excluding loopback interfaces.\n", + "examples": [ + [ + "AC-DE-48-23-45-67", + "AC-DE-48-23-45-67-01-9F" + ] + ], + "name": "host.mac", + "note": "MAC Addresses MUST be represented in [IEEE RA hexadecimal form](https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf): as hyphen-separated octets in uppercase hexadecimal form from most to least significant.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Processor manufacturer identifier. A maximum 12-character string.\n", + "examples": [ + "GenuineIntel" + ], + "name": "host.cpu.vendor.id", + "note": "[CPUID](https://wiki.osdev.org/CPUID) command returns the vendor ID string in EBX, EDX and ECX registers. Writing these to memory in this order results in a 12-character string.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Family or generation of the CPU.\n", + "examples": [ + "6", + "PA-RISC 1.1e" + ], + "name": "host.cpu.family", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Model identifier. It provides more granular information about the CPU, distinguishing it from other CPUs within the same family.\n", + "examples": [ + "6", + "9000/778/B180L" + ], + "name": "host.cpu.model.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Model designation of the processor.\n", + "examples": [ + "11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz" + ], + "name": "host.cpu.model.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Stepping or core revisions.\n", + "examples": [ + "1", + "r1p1" + ], + "name": "host.cpu.stepping", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The amount of level 2 memory cache available to the processor (in Bytes).\n", + "examples": [ + 12288000 + ], + "name": "host.cpu.cache.l2.size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "A host is defined as a computing instance. For example, physical servers, virtual machines, switches or disk array.\n", + "display_name": "Host Attributes", + "id": "registry.host", + "lineage": { + "provenance": { + "path": "/home/weaver/source/host/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The UID of the cluster quota.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "openshift.clusterquota.uid", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the cluster quota.\n", + "examples": [ + "opentelemetry" + ], + "name": "openshift.clusterquota.name", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "development", + "type": "string" + } + ], + "brief": "An OpenShift [ClusterResourceQuota](https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/schedule_and_quota_apis/clusterresourcequota-quota-openshift-io-v1#clusterresourcequota-quota-openshift-io-v1) object.\n", + "id": "entity.openshift.clusterquota", + "lineage": { + "attributes": { + "openshift.clusterquota.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.openshift" + }, + "openshift.clusterquota.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.openshift" + } + }, + "provenance": { + "path": "/home/weaver/source/openshift/entities.yaml", + "registry_id": "main" + } + }, + "name": "openshift.clusterquota", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Logical name of the service.\n", + "examples": [ + "shoppingcart" + ], + "name": "service.name", + "note": "MUST be the same for all instances of horizontally scaled services. If the value was not specified, SDKs MUST fallback to `unknown_service:` concatenated with [`process.executable.name`](process.md), e.g. `unknown_service:bash`. If `process.executable.name` is not available, the value MUST be set to `unknown_service`.\n", + "requirement_level": "required", + "role": "identifying", + "stability": "stable", + "type": "string" + }, + { + "brief": "The version string of the service API or implementation. The format is not defined by these conventions.\n", + "examples": [ + "2.0.0", + "a01dbef8a" + ], + "name": "service.version", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "stable", + "type": "string" + }, + { + "brief": "A namespace for `service.name`.\n", + "examples": [ + "Shop" + ], + "name": "service.namespace", + "note": "A string value having a meaning that helps to distinguish a group of services, for example the team name that owns a group of services. `service.name` is expected to be unique within the same namespace. If `service.namespace` is not specified in the Resource then `service.name` is expected to be unique for all services that have no explicit namespace defined (so the empty/unspecified namespace is simply one more valid namespace). Zero-length namespace string is assumed equal to unspecified namespace.\n", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "string" + }, + { + "brief": "The string ID of the service instance.\n", + "examples": [ + "627cc493-f310-47de-96bd-71410b7dec09" + ], + "name": "service.instance.id", + "note": "MUST be unique for each instance of the same `service.namespace,service.name` pair (in other words\n`service.namespace,service.name,service.instance.id` triplet MUST be globally unique). The ID helps to\ndistinguish instances of the same service that exist at the same time (e.g. instances of a horizontally scaled\nservice).\n\nImplementations, such as SDKs, are recommended to generate a random Version 1 or Version 4 [RFC\n4122](https://www.ietf.org/rfc/rfc4122.txt) UUID, but are free to use an inherent unique ID as the source of\nthis value if stability is desirable. In that case, the ID SHOULD be used as source of a UUID Version 5 and\nSHOULD use the following UUID as the namespace: `4d63009a-8d0f-11ee-aad7-4c796ed8e320`.\n\nUUIDs are typically recommended, as only an opaque value for the purposes of identifying a service instance is\nneeded. Similar to what can be seen in the man page for the\n[`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/latest/machine-id.html) file, the underlying\ndata, such as pod name and namespace should be treated as confidential, being the user\u0027s choice to expose it\nor not via another resource attribute.\n\nFor applications running behind an application server (like unicorn), we do not recommend using one identifier\nfor all processes participating in the application. Instead, it\u0027s recommended each division (e.g. a worker\nthread in unicorn) to have its own instance.id.\n\nIt\u0027s not recommended for a Collector to set `service.instance.id` if it can\u0027t unambiguously determine the\nservice instance that is generating that telemetry. For instance, creating an UUID based on `pod.name` will\nlikely be wrong, as the Collector might not know from which container within that pod the telemetry originated.\nHowever, Collectors can set the `service.instance.id` if they can unambiguously determine the service instance\nfor that telemetry. This is typically the case for scraping receivers, as they know the target address and\nport.\n", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "string" + } + ], + "brief": "A service instance.\n", + "id": "entity.service", + "lineage": { + "attributes": { + "service.instance.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.service" + }, + "service.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.service" + }, + "service.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.service" + }, + "service.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.service" + } + }, + "provenance": { + "path": "/home/weaver/source/service/entities.yaml", + "registry_id": "main" + } + }, + "name": "service", + "stability": "stable", + "type": "entity" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The state of the change (pull request/merge request/changelist).\n", + "examples": [ + "open", + "closed", + "merged" + ], + "name": "vcs.change.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Open means the change is currently active and under review. It hasn\u0027t been merged into the target branch yet, and it\u0027s still possible to make changes or add comments.", + "id": "open", + "stability": "development", + "value": "open" + }, + { + "brief": "WIP (work-in-progress, draft) means the change is still in progress and not yet ready for a full review. It might still undergo significant changes.", + "id": "wip", + "stability": "development", + "value": "wip" + }, + { + "brief": "Closed means the merge request has been closed without merging. This can happen for various reasons, such as the changes being deemed unnecessary, the issue being resolved in another way, or the author deciding to withdraw the request.", + "id": "closed", + "stability": "development", + "value": "closed" + }, + { + "brief": "Merged indicates that the change has been successfully integrated into the target codebase.", + "id": "merged", + "stability": "development", + "value": "merged" + } + ] + } + }, + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + } + ], + "brief": "The number of changes (pull requests/merge requests/changelists) in a repository, categorized by their state (e.g. open or merged).", + "entity_associations": [ + "vcs.repo" + ], + "id": "metric.vcs.change.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "vcs.change.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.change.count", + "stability": "development", + "type": "metric", + "unit": "{change}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The state of the change (pull request/merge request/changelist).\n", + "examples": [ + "open", + "closed", + "merged" + ], + "name": "vcs.change.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Open means the change is currently active and under review. It hasn\u0027t been merged into the target branch yet, and it\u0027s still possible to make changes or add comments.", + "id": "open", + "stability": "development", + "value": "open" + }, + { + "brief": "WIP (work-in-progress, draft) means the change is still in progress and not yet ready for a full review. It might still undergo significant changes.", + "id": "wip", + "stability": "development", + "value": "wip" + }, + { + "brief": "Closed means the merge request has been closed without merging. This can happen for various reasons, such as the changes being deemed unnecessary, the issue being resolved in another way, or the author deciding to withdraw the request.", + "id": "closed", + "stability": "development", + "value": "closed" + }, + { + "brief": "Merged indicates that the change has been successfully integrated into the target codebase.", + "id": "merged", + "stability": "development", + "value": "merged" + } + ] + } + }, + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.head.name", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The time duration a change (pull request/merge request/changelist) has been in a given state.", + "entity_associations": [ + "vcs.repo" + ], + "id": "metric.vcs.change.duration", + "instrument": "gauge", + "lineage": { + "attributes": { + "vcs.change.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.change.duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.base.name", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.head.name", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The revision, literally [revised version](https://www.merriam-webster.com/dictionary/revision), The revision most often refers to a commit object in Git, or a revision number in SVN.\n", + "examples": [ + "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", + "main", + "123", + "HEAD" + ], + "name": "vcs.ref.head.revision", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.The revision can be a full [hash value (see\nglossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf),\nof the recorded change to a ref within a repository pointing to a\ncommit [commit](https://git-scm.com/docs/git-commit) object. It does\nnot necessarily have to be a hash; it can simply define a [revision\nnumber](https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html)\nwhich is an integer that is monotonically increasing. In cases where\nit is identical to the `ref.head.name`, it SHOULD still be included.\nIt is up to the implementer to decide which value to set as the\nrevision based on the VCS system and situational context.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The revision, literally [revised version](https://www.merriam-webster.com/dictionary/revision), The revision most often refers to a commit object in Git, or a revision number in SVN.\n", + "examples": [ + "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", + "main", + "123", + "HEAD" + ], + "name": "vcs.ref.base.revision", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits. The\nrevision can be a full [hash value (see\nglossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf),\nof the recorded change to a ref within a repository pointing to a\ncommit [commit](https://git-scm.com/docs/git-commit) object. It does\nnot necessarily have to be a hash; it can simply define a [revision\nnumber](https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html)\nwhich is an integer that is monotonically increasing. In cases where\nit is identical to the `ref.base.name`, it SHOULD still be included.\nIt is up to the implementer to decide which value to set as the\nrevision based on the VCS system and situational context.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "The amount of time since its creation it took a change (pull request/merge request/changelist) to get the first approval.", + "entity_associations": [ + "vcs.repo", + "vcs.ref" + ], + "id": "metric.vcs.change.time_to_approval", + "instrument": "gauge", + "lineage": { + "attributes": { + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.base.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.base.revision": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.revision": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.change.time_to_approval", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.base.name", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.head.name", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The revision, literally [revised version](https://www.merriam-webster.com/dictionary/revision), The revision most often refers to a commit object in Git, or a revision number in SVN.\n", + "examples": [ + "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", + "main", + "123", + "HEAD" + ], + "name": "vcs.ref.head.revision", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.The revision can be a full [hash value (see\nglossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf),\nof the recorded change to a ref within a repository pointing to a\ncommit [commit](https://git-scm.com/docs/git-commit) object. It does\nnot necessarily have to be a hash; it can simply define a [revision\nnumber](https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html)\nwhich is an integer that is monotonically increasing. In cases where\nit is identical to the `ref.head.name`, it SHOULD still be included.\nIt is up to the implementer to decide which value to set as the\nrevision based on the VCS system and situational context.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The revision, literally [revised version](https://www.merriam-webster.com/dictionary/revision), The revision most often refers to a commit object in Git, or a revision number in SVN.\n", + "examples": [ + "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", + "main", + "123", + "HEAD" + ], + "name": "vcs.ref.base.revision", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits. The\nrevision can be a full [hash value (see\nglossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf),\nof the recorded change to a ref within a repository pointing to a\ncommit [commit](https://git-scm.com/docs/git-commit) object. It does\nnot necessarily have to be a hash; it can simply define a [revision\nnumber](https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html)\nwhich is an integer that is monotonically increasing. In cases where\nit is identical to the `ref.base.name`, it SHOULD still be included.\nIt is up to the implementer to decide which value to set as the\nrevision based on the VCS system and situational context.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "The amount of time since its creation it took a change (pull request/merge request/changelist) to get merged into the target(base) ref.", + "entity_associations": [ + "vcs.repo", + "vcs.ref" + ], + "id": "metric.vcs.change.time_to_merge", + "instrument": "gauge", + "lineage": { + "attributes": { + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.base.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.base.revision": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.revision": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.change.time_to_merge", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + } + ], + "brief": "The number of repositories in an organization.", + "id": "metric.vcs.repository.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.repository.count", + "stability": "development", + "type": "metric", + "unit": "{repository}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.type", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + } + ], + "brief": "The number of refs of type branch or tag in a repository.", + "entity_associations": [ + "vcs.repo" + ], + "id": "metric.vcs.ref.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.ref.count", + "stability": "development", + "type": "metric", + "unit": "{ref}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.head.name", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The ID of the change (pull request/merge request/changelist) if applicable. This is usually a unique (within repository) identifier generated by the VCS system.\n", + "examples": [ + "123" + ], + "name": "vcs.change.id", + "requirement_level": { + "conditionally_required": "if a change is associate with the ref." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.head.type", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.base.name", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.base.type", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + }, + { + "brief": "The type of line change being measured on a branch or change.\n", + "examples": [ + "added", + "removed" + ], + "name": "vcs.line_change.type", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "How many lines were added.", + "id": "added", + "stability": "development", + "value": "added" + }, + { + "brief": "How many lines were removed.", + "id": "removed", + "stability": "development", + "value": "removed" + } + ] + } + } + ], + "brief": "The number of lines added/removed in a ref (branch) relative to the ref from the `vcs.ref.base.name` attribute.", + "entity_associations": [ + "vcs.repo" + ], + "id": "metric.vcs.ref.lines_delta", + "instrument": "gauge", + "lineage": { + "attributes": { + "vcs.change.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.line_change.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.base.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.base.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.ref.lines_delta", + "note": "This metric should be reported for each `vcs.line_change.type` value. For example if a ref added 3 lines and removed 2 lines,\ninstrumentation SHOULD report two measurements: 3 and 2 (both positive numbers).\nIf number of lines added/removed should be calculated from the start of time, then `vcs.ref.base.name` SHOULD be set to an empty string.\n", + "stability": "development", + "type": "metric", + "unit": "{line}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.head.name", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The ID of the change (pull request/merge request/changelist) if applicable. This is usually a unique (within repository) identifier generated by the VCS system.\n", + "examples": [ + "123" + ], + "name": "vcs.change.id", + "requirement_level": { + "conditionally_required": "if a change is associate with the ref." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.head.type", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.base.name", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.base.type", + "note": "`base` refers to the starting point of a change. For example, `main`\nwould be the base reference of type branch if you\u0027ve created a new\nreference of type branch from it and created new commits.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + }, + { + "brief": "The type of revision comparison.\n", + "examples": [ + "ahead", + "behind" + ], + "name": "vcs.revision_delta.direction", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "How many revisions the change is behind the target ref.", + "id": "behind", + "stability": "development", + "value": "behind" + }, + { + "brief": "How many revisions the change is ahead of the target ref.", + "id": "ahead", + "stability": "development", + "value": "ahead" + } + ] + } + } + ], + "brief": "The number of revisions (commits) a ref (branch) is ahead/behind the branch from the `vcs.ref.base.name` attribute.", + "entity_associations": [ + "vcs.repo" + ], + "id": "metric.vcs.ref.revisions_delta", + "instrument": "gauge", + "lineage": { + "attributes": { + "vcs.change.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.base.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.base.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.revision_delta.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.ref.revisions_delta", + "note": "This metric should be reported for each `vcs.revision_delta.direction` value. For example if branch `a` is 3 commits behind and 2 commits ahead of `trunk`,\ninstrumentation SHOULD report two measurements: 3 and 2 (both positive numbers) and `vcs.ref.base.name` is set to `trunk`.\n", + "stability": "development", + "type": "metric", + "unit": "{revision}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + }, + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.head.name", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.head.type", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + } + ], + "brief": "Time a ref (branch) created from the default branch (trunk) has existed. The `ref.type` attribute will always be `branch`.", + "entity_associations": [ + "vcs.repo" + ], + "id": "metric.vcs.ref.time", + "instrument": "gauge", + "lineage": { + "attributes": { + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.ref.time", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The group owner within the version control system.\n", + "examples": [ + "my-org", + "myteam", + "business-unit" + ], + "name": "vcs.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the version control system provider.\n", + "examples": [ + "github", + "gitlab", + "gitea", + "bitbucket" + ], + "name": "vcs.provider.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "[GitHub](https://github.com)", + "id": "github", + "stability": "development", + "value": "github" + }, + { + "brief": "[GitLab](https://gitlab.com)", + "id": "gitlab", + "stability": "development", + "value": "gitlab" + }, + { + "brief": "Deprecated, use `gitea` instead.", + "deprecated": { + "note": "Replaced by `gitea`.", + "reason": "renamed", + "renamed_to": "gitea" + }, + "id": "gittea", + "stability": "development", + "value": "gittea" + }, + { + "brief": "[Gitea](https://gitea.io)", + "id": "gitea", + "stability": "development", + "value": "gitea" + }, + { + "brief": "[Bitbucket](https://bitbucket.org)", + "id": "bitbucket", + "stability": "development", + "value": "bitbucket" + } + ] + } + } + ], + "brief": "The number of unique contributors to a repository.", + "entity_associations": [ + "vcs.repo" + ], + "id": "metric.vcs.contributor.count", + "instrument": "gauge", + "lineage": { + "attributes": { + "vcs.owner.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.provider.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "vcs.contributor.count", + "stability": "development", + "type": "metric", + "unit": "{contributor}" + }, + { + "attributes": [ + { + "brief": "The name(s) of the AWS log group(s) an application is writing to.\n", + "examples": [ + [ + "/aws/lambda/my-function", + "opentelemetry-service" + ] + ], + "name": "aws.log.group.names", + "note": "Multiple log groups must be supported for cases like multi-container applications, where a single application has sidecar containers, and each write to their own log group.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The Amazon Resource Name(s) (ARN) of the AWS log group(s).\n", + "examples": [ + [ + "arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*" + ] + ], + "name": "aws.log.group.arns", + "note": "See the [log group ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The name(s) of the AWS log stream(s) an application is writing to.\n", + "examples": [ + [ + "logs/main/10838bed-421f-43ef-870a-f43feacbbb5b" + ] + ], + "name": "aws.log.stream.names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The ARN(s) of the AWS log stream(s).\n", + "examples": [ + [ + "arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b" + ] + ], + "name": "aws.log.stream.arns", + "note": "See the [log stream ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). One log group can contain several log streams, so these ARNs necessarily identify both a log group and a log stream.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "Entities specific to Amazon Web Services.\n", + "id": "entity.aws.log", + "lineage": { + "attributes": { + "aws.log.group.arns": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.log" + }, + "aws.log.group.names": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.log" + }, + "aws.log.stream.arns": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.log" + }, + "aws.log.stream.names": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.log" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/logs-entities.yaml", + "registry_id": "main" + } + }, + "name": "aws.log", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A database operation parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.operation.parameter", + "note": "For example, a client-side maximum number of rows to read from the database\nMAY be recorded as the `db.operation.parameter.max_rows` attribute.\n\n`db.query.text` parameters SHOULD be captured using `db.query.parameter.\u003ckey\u003e`\ninstead of `db.operation.parameter.\u003ckey\u003e`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The database management system (DBMS) product as identified by the client instrumentation.", + "name": "db.system.name", + "note": "The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Some other SQL database. Fallback only.", + "id": "other_sql", + "stability": "development", + "value": "other_sql" + }, + { + "brief": "[Adabas (Adaptable Database System)](https://documentation.softwareag.com/?pf=adabas)", + "id": "softwareag.adabas", + "stability": "development", + "value": "softwareag.adabas" + }, + { + "brief": "[Actian Ingres](https://www.actian.com/databases/ingres/)", + "id": "actian.ingres", + "stability": "development", + "value": "actian.ingres" + }, + { + "brief": "[Amazon DynamoDB](https://aws.amazon.com/pm/dynamodb/)", + "id": "aws.dynamodb", + "stability": "development", + "value": "aws.dynamodb" + }, + { + "brief": "[Amazon Redshift](https://aws.amazon.com/redshift/)", + "id": "aws.redshift", + "stability": "development", + "value": "aws.redshift" + }, + { + "brief": "[Azure Cosmos DB](https://learn.microsoft.com/azure/cosmos-db)", + "id": "azure.cosmosdb", + "stability": "development", + "value": "azure.cosmosdb" + }, + { + "brief": "[InterSystems Caché](https://www.intersystems.com/products/cache/)", + "id": "intersystems.cache", + "stability": "development", + "value": "intersystems.cache" + }, + { + "brief": "[Apache Cassandra](https://cassandra.apache.org/)", + "id": "cassandra", + "stability": "development", + "value": "cassandra" + }, + { + "brief": "[ClickHouse](https://clickhouse.com/)", + "id": "clickhouse", + "stability": "development", + "value": "clickhouse" + }, + { + "brief": "[CockroachDB](https://www.cockroachlabs.com/)", + "id": "cockroachdb", + "stability": "development", + "value": "cockroachdb" + }, + { + "brief": "[Couchbase](https://www.couchbase.com/)", + "id": "couchbase", + "stability": "development", + "value": "couchbase" + }, + { + "brief": "[Apache CouchDB](https://couchdb.apache.org/)", + "id": "couchdb", + "stability": "development", + "value": "couchdb" + }, + { + "brief": "[Apache Derby](https://db.apache.org/derby/)", + "id": "derby", + "stability": "development", + "value": "derby" + }, + { + "brief": "[Elasticsearch](https://www.elastic.co/elasticsearch)", + "id": "elasticsearch", + "stability": "development", + "value": "elasticsearch" + }, + { + "brief": "[Firebird](https://www.firebirdsql.org/)", + "id": "firebirdsql", + "stability": "development", + "value": "firebirdsql" + }, + { + "brief": "[Google Cloud Spanner](https://cloud.google.com/spanner)", + "id": "gcp.spanner", + "stability": "development", + "value": "gcp.spanner" + }, + { + "brief": "[Apache Geode](https://geode.apache.org/)", + "id": "geode", + "stability": "development", + "value": "geode" + }, + { + "brief": "[H2 Database](https://h2database.com/)", + "id": "h2database", + "stability": "development", + "value": "h2database" + }, + { + "brief": "[Apache HBase](https://hbase.apache.org/)", + "id": "hbase", + "stability": "development", + "value": "hbase" + }, + { + "brief": "[Apache Hive](https://hive.apache.org/)", + "id": "hive", + "stability": "development", + "value": "hive" + }, + { + "brief": "[HyperSQL Database](https://hsqldb.org/)", + "id": "hsqldb", + "stability": "development", + "value": "hsqldb" + }, + { + "brief": "[IBM Db2](https://www.ibm.com/db2)", + "id": "ibm.db2", + "stability": "development", + "value": "ibm.db2" + }, + { + "brief": "[IBM Informix](https://www.ibm.com/products/informix)", + "id": "ibm.informix", + "stability": "development", + "value": "ibm.informix" + }, + { + "brief": "[IBM Netezza](https://www.ibm.com/products/netezza)", + "id": "ibm.netezza", + "stability": "development", + "value": "ibm.netezza" + }, + { + "brief": "[InfluxDB](https://www.influxdata.com/)", + "id": "influxdb", + "stability": "development", + "value": "influxdb" + }, + { + "brief": "[Instant](https://www.instantdb.com/)", + "id": "instantdb", + "stability": "development", + "value": "instantdb" + }, + { + "brief": "[MariaDB](https://mariadb.org/)", + "id": "mariadb", + "stability": "stable", + "value": "mariadb" + }, + { + "brief": "[Memcached](https://memcached.org/)", + "id": "memcached", + "stability": "development", + "value": "memcached" + }, + { + "brief": "[MongoDB](https://www.mongodb.com/)", + "id": "mongodb", + "stability": "development", + "value": "mongodb" + }, + { + "brief": "[Microsoft SQL Server](https://www.microsoft.com/sql-server)", + "id": "microsoft.sql_server", + "stability": "stable", + "value": "microsoft.sql_server" + }, + { + "brief": "[MySQL](https://www.mysql.com/)", + "id": "mysql", + "stability": "stable", + "value": "mysql" + }, + { + "brief": "[Neo4j](https://neo4j.com/)", + "id": "neo4j", + "stability": "development", + "value": "neo4j" + }, + { + "brief": "[OpenSearch](https://opensearch.org/)", + "id": "opensearch", + "stability": "development", + "value": "opensearch" + }, + { + "brief": "[Oracle Database](https://www.oracle.com/database/)", + "id": "oracle.db", + "stability": "development", + "value": "oracle.db" + }, + { + "brief": "[PostgreSQL](https://www.postgresql.org/)", + "id": "postgresql", + "stability": "stable", + "value": "postgresql" + }, + { + "brief": "[Redis](https://redis.io/)", + "id": "redis", + "stability": "development", + "value": "redis" + }, + { + "brief": "[SAP HANA](https://www.sap.com/products/technology-platform/hana/what-is-sap-hana.html)", + "id": "sap.hana", + "stability": "development", + "value": "sap.hana" + }, + { + "brief": "[SAP MaxDB](https://maxdb.sap.com/)", + "id": "sap.maxdb", + "stability": "development", + "value": "sap.maxdb" + }, + { + "brief": "[SQLite](https://www.sqlite.org/)", + "id": "sqlite", + "stability": "development", + "value": "sqlite" + }, + { + "brief": "[Teradata](https://www.teradata.com/)", + "id": "teradata", + "stability": "development", + "value": "teradata" + }, + { + "brief": "[Trino](https://trino.io/)", + "id": "trino", + "stability": "development", + "value": "trino" + } + ] + } + }, + { + "brief": "The state of a connection in the pool", + "examples": [ + "idle" + ], + "name": "db.client.connection.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "id": "used", + "stability": "development", + "value": "used" + } + ] + } + }, + { + "brief": "The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn\u0027t provide a name, instrumentation SHOULD use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns SHOULD document it.\n", + "examples": [ + "myDataSource" + ], + "name": "db.client.connection.pool.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This group defines the attributes used to describe telemetry in the context of databases.\n", + "display_name": "General Database Attributes", + "id": "registry.db", + "lineage": { + "provenance": { + "path": "/home/weaver/source/database/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A message providing more detail about an error in human-readable form.", + "examples": [ + "Unexpected input type: string", + "The user has exceeded their storage quota" + ], + "name": "error.message", + "note": "`error.message` should provide additional context and detail about an error.\nIt is NOT RECOMMENDED to duplicate the value of `error.type` in `error.message`.\nIt is also NOT RECOMMENDED to duplicate the value of `exception.message` in `error.message`.\n\n`error.message` is NOT RECOMMENDED for metrics or spans due to its unbounded cardinality and overlap with span status.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines the shared attributes used to report an error.\n", + "display_name": "Error Attributes", + "id": "registry.error", + "lineage": { + "provenance": { + "path": "/home/weaver/source/error/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Identifies the Google Cloud service for which the official client library is intended.", + "examples": [ + "appengine", + "run", + "firestore", + "alloydb", + "spanner" + ], + "name": "gcp.client.service", + "note": "Intended to be a stable identifier for Google Cloud client libraries that is uniform across implementation languages. The value should be derived from the canonical service domain for the service; for example, \u0027foo.googleapis.com\u0027 should result in a value of \u0027foo\u0027.\n", + "requirement_level": { + "conditionally_required": "Required if and only if the instrumentation library is an official, Google-provided GCP and/or Firebase client library." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Conventions for official Google Cloud client libraries.", + "id": "gcp.client.attributes", + "lineage": { + "attributes": { + "gcp.client.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.client" + } + }, + "provenance": { + "path": "/home/weaver/source/gcp/common.yml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for fan metrics\n", + "id": "metric_attributes.hw.fan", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/fan-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Fan speed in revolutions per minute.", + "id": "metric.hw.fan.speed", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/fan-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.fan.speed", + "stability": "development", + "type": "metric", + "unit": "rpm" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of limit for hardware components\n", + "examples": [ + "low.critical", + "low.degraded", + "max" + ], + "name": "hw.limit_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Critical", + "id": "critical", + "stability": "development", + "value": "critical" + }, + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "High Critical", + "id": "high_critical", + "stability": "development", + "value": "high.critical" + }, + { + "brief": "High Degraded", + "id": "high_degraded", + "stability": "development", + "value": "high.degraded" + }, + { + "brief": "Low Critical", + "id": "low_critical", + "stability": "development", + "value": "low.critical" + }, + { + "brief": "Low Degraded", + "id": "low_degraded", + "stability": "development", + "value": "low.degraded" + }, + { + "brief": "Maximum", + "id": "max", + "stability": "development", + "value": "max" + }, + { + "brief": "Throttled", + "id": "throttled", + "stability": "development", + "value": "throttled" + }, + { + "brief": "Turbo", + "id": "turbo", + "stability": "development", + "value": "turbo" + } + ] + } + } + ], + "brief": "Speed limit in rpm.", + "id": "metric.hw.fan.speed.limit", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.limit_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/fan-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.fan.speed.limit", + "stability": "development", + "type": "metric", + "unit": "rpm" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Fan speed expressed as a fraction of its maximum speed.", + "id": "metric.hw.fan.speed_ratio", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/fan-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.fan.speed_ratio", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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 initial memory requested.", + "id": "metric.jvm.memory.init", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics-experimental.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.memory.init", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Recent CPU utilization for the whole system as reported by the JVM.", + "id": "metric.jvm.system.cpu.utilization", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics-experimental.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.system.cpu.utilization", + "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#getCpuLoad()).\n", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Average CPU load of the whole system for the last minute as reported by the JVM.", + "id": "metric.jvm.system.cpu.load_1m", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics-experimental.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.system.cpu.load_1m", + "note": "The value range is [0,n], where n is the number of CPU cores - or a negative number if the value is not available. 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/java.management/java/lang/management/OperatingSystemMXBean.html#getSystemLoadAverage()).\n", + "stability": "development", + "type": "metric", + "unit": "{run_queue_item}" + }, + { + "attributes": [ + { + "brief": "Name of the buffer pool.", + "examples": [ + "mapped", + "direct" + ], + "name": "jvm.buffer.pool.name", + "note": "Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes JVM buffer metric attributes.", + "id": "attributes.jvm.buffer", + "lineage": { + "attributes": { + "jvm.buffer.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics-experimental.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the buffer pool.", + "examples": [ + "mapped", + "direct" + ], + "name": "jvm.buffer.pool.name", + "note": "Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Measure of memory used by buffers.", + "id": "metric.jvm.buffer.memory.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.buffer.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics-experimental.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.buffer.memory.used", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the buffer pool.", + "examples": [ + "mapped", + "direct" + ], + "name": "jvm.buffer.pool.name", + "note": "Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Measure of total memory capacity of buffers.", + "id": "metric.jvm.buffer.memory.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.buffer.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics-experimental.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.buffer.memory.limit", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the buffer pool.", + "examples": [ + "mapped", + "direct" + ], + "name": "jvm.buffer.pool.name", + "note": "Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Number of buffers in the pool.", + "id": "metric.jvm.buffer.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.buffer.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics-experimental.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.buffer.count", + "stability": "development", + "type": "metric", + "unit": "{buffer}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of open file descriptors as reported by the JVM.", + "id": "metric.jvm.file_descriptor.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics-experimental.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.file_descriptor.count", + "stability": "development", + "type": "metric", + "unit": "{file_descriptor}" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Local port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.local.port", + "requirement_level": "recommended", + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + } + ], + "brief": "These attributes may be used for any network related operation.\n", + "id": "network-core", + "lineage": { + "attributes": { + "network.local.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.local.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/network/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "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", + "stability": "development", + "type": "string" + }, + { + "brief": "The mobile carrier country code.", + "examples": "310", + "name": "network.carrier.mcc", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The mobile carrier network code.", + "examples": "001", + "name": "network.carrier.mnc", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the mobile carrier.", + "examples": "sprint", + "name": "network.carrier.name", + "requirement_level": "recommended", + "stability": "development", + "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", + "stability": "development", + "type": { + "members": [ + { + "brief": "GPRS", + "id": "gprs", + "stability": "development", + "value": "gprs" + }, + { + "brief": "EDGE", + "id": "edge", + "stability": "development", + "value": "edge" + }, + { + "brief": "UMTS", + "id": "umts", + "stability": "development", + "value": "umts" + }, + { + "brief": "CDMA", + "id": "cdma", + "stability": "development", + "value": "cdma" + }, + { + "brief": "EVDO Rel. 0", + "id": "evdo_0", + "stability": "development", + "value": "evdo_0" + }, + { + "brief": "EVDO Rev. A", + "id": "evdo_a", + "stability": "development", + "value": "evdo_a" + }, + { + "brief": "CDMA2000 1XRTT", + "id": "cdma2000_1xrtt", + "stability": "development", + "value": "cdma2000_1xrtt" + }, + { + "brief": "HSDPA", + "id": "hsdpa", + "stability": "development", + "value": "hsdpa" + }, + { + "brief": "HSUPA", + "id": "hsupa", + "stability": "development", + "value": "hsupa" + }, + { + "brief": "HSPA", + "id": "hspa", + "stability": "development", + "value": "hspa" + }, + { + "brief": "IDEN", + "id": "iden", + "stability": "development", + "value": "iden" + }, + { + "brief": "EVDO Rev. B", + "id": "evdo_b", + "stability": "development", + "value": "evdo_b" + }, + { + "brief": "LTE", + "id": "lte", + "stability": "development", + "value": "lte" + }, + { + "brief": "EHRPD", + "id": "ehrpd", + "stability": "development", + "value": "ehrpd" + }, + { + "brief": "HSPAP", + "id": "hspap", + "stability": "development", + "value": "hspap" + }, + { + "brief": "GSM", + "id": "gsm", + "stability": "development", + "value": "gsm" + }, + { + "brief": "TD-SCDMA", + "id": "td_scdma", + "stability": "development", + "value": "td_scdma" + }, + { + "brief": "IWLAN", + "id": "iwlan", + "stability": "development", + "value": "iwlan" + }, + { + "brief": "5G NR (New Radio)", + "id": "nr", + "stability": "development", + "value": "nr" + }, + { + "brief": "5G NRNSA (New Radio Non-Standalone)", + "id": "nrnsa", + "stability": "development", + "value": "nrnsa" + }, + { + "brief": "LTE CA", + "id": "lte_ca", + "stability": "development", + "value": "lte_ca" + } + ] + } + }, + { + "brief": "The internet connection type.", + "examples": "wifi", + "name": "network.connection.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "wifi", + "stability": "development", + "value": "wifi" + }, + { + "id": "wired", + "stability": "development", + "value": "wired" + }, + { + "id": "cell", + "stability": "development", + "value": "cell" + }, + { + "id": "unavailable", + "stability": "development", + "value": "unavailable" + }, + { + "id": "unknown", + "stability": "development", + "value": "unknown" + } + ] + } + } + ], + "brief": "These attributes may be used for any network related operation.\n", + "id": "network-connection-and-carrier", + "lineage": { + "attributes": { + "network.carrier.icc": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.carrier.mcc": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.carrier.mnc": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.carrier.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.connection.subtype": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.connection.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/network/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The result value of the sampler for this span", + "name": "otel.span.sampling_result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The span is not sampled and not recording", + "id": "drop", + "stability": "development", + "value": "DROP" + }, + { + "brief": "The span is not sampled, but recording", + "id": "record_only", + "stability": "development", + "value": "RECORD_ONLY" + }, + { + "brief": "The span is sampled and recording", + "id": "record_and_sample", + "stability": "development", + "value": "RECORD_AND_SAMPLE" + } + ] + } + } + ], + "brief": "The number of created spans with `recording=true` for which the end operation has not been called yet.", + "id": "metric.otel.sdk.span.live", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "otel.span.sampling_result": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.span.live", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The result value of the sampler for this span", + "name": "otel.span.sampling_result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The span is not sampled and not recording", + "id": "drop", + "stability": "development", + "value": "DROP" + }, + { + "brief": "The span is not sampled, but recording", + "id": "record_only", + "stability": "development", + "value": "RECORD_ONLY" + }, + { + "brief": "The span is sampled and recording", + "id": "record_and_sample", + "stability": "development", + "value": "RECORD_AND_SAMPLE" + } + ] + } + }, + { + "brief": "Determines whether the span has a parent span, and if so, [whether it is a remote parent](https://opentelemetry.io/docs/specs/otel/trace/api/#isremote)", + "name": "otel.span.parent.origin", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The span does not have a parent, it is a root span", + "id": "none", + "stability": "development", + "value": "none" + }, + { + "brief": "The span has a parent and the parent\u0027s span context [isRemote()](https://opentelemetry.io/docs/specs/otel/trace/api/#isremote) is false", + "id": "local", + "stability": "development", + "value": "local" + }, + { + "brief": "The span has a parent and the parent\u0027s span context [isRemote()](https://opentelemetry.io/docs/specs/otel/trace/api/#isremote) is true", + "id": "remote", + "stability": "development", + "value": "remote" + } + ] + } + } + ], + "brief": "The number of created spans.", + "id": "metric.otel.sdk.span.started", + "instrument": "counter", + "lineage": { + "attributes": { + "otel.span.parent.origin": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel" + }, + "otel.span.sampling_result": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.span.started", + "note": "Implementations MUST record this metric for all spans, even for non-recording ones.\n", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of spans in the queue of a given instance of an SDK span processor.", + "id": "metric.otel.sdk.processor.span.queue.size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.processor.span.queue.size", + "note": "Only applies to span processors which use a queue, e.g. the SDK Batching Span Processor.\n", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The maximum number of spans the queue of a given instance of an SDK span processor can hold.", + "id": "metric.otel.sdk.processor.span.queue.capacity", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.processor.span.queue.capacity", + "note": "Only applies to span processors which use a queue, e.g. the SDK Batching Span Processor.\n", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A low-cardinality description of the failure reason. SDK Batching Span Processors MUST use `queue_full` for spans dropped due to a full queue.\n", + "examples": [ + "queue_full" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of spans for which the processing has finished, either successful or failed.", + "id": "metric.otel.sdk.processor.span.processed", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.error" + }, + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.processor.span.processed", + "note": "For successful processing, `error.type` MUST NOT be set. For failed processing, `error.type` MUST contain the failure cause.\nFor the SDK Simple and Batching Span Processor a span is considered to be processed already when it has been submitted to the exporter, not when the corresponding export call has finished.\n", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "The number of spans which were passed to the exporter, but that have not been exported yet (neither successful, nor failed).", + "id": "metric.otel.sdk.exporter.span.inflight", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.exporter.span.inflight", + "note": "For successful exports, `error.type` MUST NOT be set. For failed exports, `error.type` MUST contain the failure cause.\n", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "rejected", + "timeout", + "500", + "java.net.UnknownHostException" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "The number of spans for which the export has finished, either successful or failed.", + "id": "metric.otel.sdk.exporter.span.exported", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.error" + }, + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.exporter.span.exported", + "note": "For successful exports, `error.type` MUST NOT be set. For failed exports, `error.type` MUST contain the failure cause.\nFor exporters with partial success semantics (e.g. OTLP with `rejected_spans`), rejected spans MUST count as failed and only non-rejected spans count as success.\nIf no rejection reason is available, `rejected` SHOULD be used as value for `error.type`.\n", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of logs submitted to enabled SDK Loggers.", + "id": "metric.otel.sdk.log.created", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.log.created", + "stability": "development", + "type": "metric", + "unit": "{log_record}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of log records in the queue of a given instance of an SDK log processor.", + "id": "metric.otel.sdk.processor.log.queue.size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.processor.log.queue.size", + "note": "Only applies to log record processors which use a queue, e.g. the SDK Batching Log Record Processor.\n", + "stability": "development", + "type": "metric", + "unit": "{log_record}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The maximum number of log records the queue of a given instance of an SDK Log Record processor can hold.", + "id": "metric.otel.sdk.processor.log.queue.capacity", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.processor.log.queue.capacity", + "note": "Only applies to Log Record processors which use a queue, e.g. the SDK Batching Log Record Processor.\n", + "stability": "development", + "type": "metric", + "unit": "{log_record}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A low-cardinality description of the failure reason. SDK Batching Log Record Processors MUST use `queue_full` for log records dropped due to a full queue.\n", + "examples": [ + "queue_full" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of log records for which the processing has finished, either successful or failed.", + "id": "metric.otel.sdk.processor.log.processed", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.error" + }, + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.processor.log.processed", + "note": "For successful processing, `error.type` MUST NOT be set. For failed processing, `error.type` MUST contain the failure cause.\nFor the SDK Simple and Batching Log Record Processor a log record is considered to be processed already when it has been submitted to the exporter,\nnot when the corresponding export call has finished.\n", + "stability": "development", + "type": "metric", + "unit": "{log_record}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "The number of log records which were passed to the exporter, but that have not been exported yet (neither successful, nor failed).", + "id": "metric.otel.sdk.exporter.log.inflight", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.exporter.log.inflight", + "note": "For successful exports, `error.type` MUST NOT be set. For failed exports, `error.type` MUST contain the failure cause.\n", + "stability": "development", + "type": "metric", + "unit": "{log_record}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "rejected", + "timeout", + "500", + "java.net.UnknownHostException" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "The number of log records for which the export has finished, either successful or failed.", + "id": "metric.otel.sdk.exporter.log.exported", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.error" + }, + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.exporter.log.exported", + "note": "For successful exports, `error.type` MUST NOT be set. For failed exports, `error.type` MUST contain the failure cause.\nFor exporters with partial success semantics (e.g. OTLP with `rejected_log_records`), rejected log records MUST count as failed and only non-rejected log records count as success.\nIf no rejection reason is available, `rejected` SHOULD be used as value for `error.type`.\n", + "stability": "development", + "type": "metric", + "unit": "{log_record}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "The number of metric data points which were passed to the exporter, but that have not been exported yet (neither successful, nor failed).", + "id": "metric.otel.sdk.exporter.metric_data_point.inflight", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.exporter.metric_data_point.inflight", + "note": "For successful exports, `error.type` MUST NOT be set. For failed exports, `error.type` MUST contain the failure cause.\n", + "stability": "development", + "type": "metric", + "unit": "{data_point}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "rejected", + "timeout", + "500", + "java.net.UnknownHostException" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "The number of metric data points for which the export has finished, either successful or failed.", + "id": "metric.otel.sdk.exporter.metric_data_point.exported", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.error" + }, + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.exporter.metric_data_point.exported", + "note": "For successful exports, `error.type` MUST NOT be set. For failed exports, `error.type` MUST contain the failure cause.\nFor exporters with partial success semantics (e.g. OTLP with `rejected_data_points`), rejected data points MUST count as failed and only non-rejected data points count as success.\nIf no rejection reason is available, `rejected` SHOULD be used as value for `error.type`.\n", + "stability": "development", + "type": "metric", + "unit": "{data_point}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The duration of the collect operation of the metric reader.", + "id": "metric.otel.sdk.metric_reader.collection.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.error" + }, + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.metric_reader.collection.duration", + "note": "For successful collections, `error.type` MUST NOT be set. For failed collections, `error.type` SHOULD contain the failure cause.\nIt can happen that metrics collection is successful for some MetricProducers, while others fail. In that case `error.type` SHOULD be set to any of the failure causes.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "rejected", + "timeout", + "500", + "java.net.UnknownHostException" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If operation has ended with an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "otlp_grpc_span_exporter", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "The HTTP status code of the last HTTP request performed in scope of this export call.", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The gRPC status code of the last gRPC requests performed in scope of this export call.", + "name": "rpc.grpc.status_code", + "requirement_level": { + "recommended": "when applicable" + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "OK", + "id": "ok", + "stability": "development", + "value": 0 + }, + { + "brief": "CANCELLED", + "id": "cancelled", + "stability": "development", + "value": 1 + }, + { + "brief": "UNKNOWN", + "id": "unknown", + "stability": "development", + "value": 2 + }, + { + "brief": "INVALID_ARGUMENT", + "id": "invalid_argument", + "stability": "development", + "value": 3 + }, + { + "brief": "DEADLINE_EXCEEDED", + "id": "deadline_exceeded", + "stability": "development", + "value": 4 + }, + { + "brief": "NOT_FOUND", + "id": "not_found", + "stability": "development", + "value": 5 + }, + { + "brief": "ALREADY_EXISTS", + "id": "already_exists", + "stability": "development", + "value": 6 + }, + { + "brief": "PERMISSION_DENIED", + "id": "permission_denied", + "stability": "development", + "value": 7 + }, + { + "brief": "RESOURCE_EXHAUSTED", + "id": "resource_exhausted", + "stability": "development", + "value": 8 + }, + { + "brief": "FAILED_PRECONDITION", + "id": "failed_precondition", + "stability": "development", + "value": 9 + }, + { + "brief": "ABORTED", + "id": "aborted", + "stability": "development", + "value": 10 + }, + { + "brief": "OUT_OF_RANGE", + "id": "out_of_range", + "stability": "development", + "value": 11 + }, + { + "brief": "UNIMPLEMENTED", + "id": "unimplemented", + "stability": "development", + "value": 12 + }, + { + "brief": "INTERNAL", + "id": "internal", + "stability": "development", + "value": 13 + }, + { + "brief": "UNAVAILABLE", + "id": "unavailable", + "stability": "development", + "value": 14 + }, + { + "brief": "DATA_LOSS", + "id": "data_loss", + "stability": "development", + "value": 15 + }, + { + "brief": "UNAUTHENTICATED", + "id": "unauthenticated", + "stability": "development", + "value": 16 + } + ] + } + } + ], + "brief": "The duration of exporting a batch of telemetry records.", + "id": "metric.otel.sdk.exporter.operation.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.response.status_code": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.http" + }, + "otel.component.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.otel.component" + }, + "otel.component.type": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.otel.component" + }, + "rpc.grpc.status_code": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.exporter.operation.duration", + "note": "This metric defines successful operations using the full success definitions for [http](https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success-1)\nand [grpc](https://github.com/open-telemetry/opentelemetry-proto/blob/v1.5.0/docs/specification.md#full-success). Anything else is defined as an unsuccessful operation. For successful\noperations, `error.type` MUST NOT be set. For unsuccessful export operations, `error.type` MUST contain a relevant failure cause.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "attributes": [ + { + "brief": "A categorization value keyword used by the entity using the rule for detection of this event\n", + "examples": [ + "Attempted Information Leak" + ], + "name": "security_rule.category", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The description of the rule generating the event.\n", + "examples": [ + "Block requests to public DNS over HTTPS / TLS protocols" + ], + "name": "security_rule.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Name of the license under which the rule used to generate this event is made available.\n", + "examples": [ + "Apache 2.0" + ], + "name": "security_rule.license", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the rule or signature generating the event.\n", + "examples": [ + "BLOCK_DNS_over_TLS" + ], + "name": "security_rule.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Reference URL to additional information about the rule used to generate this event.\n", + "examples": [ + "https://en.wikipedia.org/wiki/DNS_over_TLS" + ], + "name": "security_rule.reference", + "note": "The URL can point to the vendor’s documentation about the rule. If that’s not available, it can also be a link to a more general page describing this type of alert.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Name of the ruleset, policy, group, or parent category in which the rule used to generate this event is a member.\n", + "examples": [ + "Standard_Protocol_Filters" + ], + "name": "security_rule.ruleset.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A rule ID that is unique within the scope of a set or group of agents, observers, or other entities using the rule for detection of this event.\n", + "examples": [ + "550e8400-e29b-41d4-a716-446655440000", + "1100110011" + ], + "name": "security_rule.uuid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version / revision of the rule being used for analysis.\n", + "examples": [ + "1.0.0" + ], + "name": "security_rule.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes security rule attributes. Rule fields are used to capture the specifics of any observer or agent rules that generate alerts or other notable events.\n", + "display_name": "Security Rule", + "id": "registry.security_rule", + "lineage": { + "provenance": { + "path": "/home/weaver/source/security-rule/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the telemetry SDK as defined above.\n", + "examples": [ + "opentelemetry" + ], + "name": "telemetry.sdk.name", + "note": "The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute to `opentelemetry`.\nIf another SDK, like a fork or a vendor-provided implementation, is used, this SDK MUST set the\n`telemetry.sdk.name` attribute to the fully-qualified class or module name of this SDK\u0027s main entry point\nor another suitable identifier depending on the language.\nThe identifier `opentelemetry` is reserved and MUST NOT be used in this case.\nAll custom identifiers SHOULD be stable across different versions of an implementation.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The language of the telemetry SDK.\n", + "name": "telemetry.sdk.language", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "id": "cpp", + "stability": "stable", + "value": "cpp" + }, + { + "id": "dotnet", + "stability": "stable", + "value": "dotnet" + }, + { + "id": "erlang", + "stability": "stable", + "value": "erlang" + }, + { + "id": "go", + "stability": "stable", + "value": "go" + }, + { + "id": "java", + "stability": "stable", + "value": "java" + }, + { + "id": "nodejs", + "stability": "stable", + "value": "nodejs" + }, + { + "id": "php", + "stability": "stable", + "value": "php" + }, + { + "id": "python", + "stability": "stable", + "value": "python" + }, + { + "id": "ruby", + "stability": "stable", + "value": "ruby" + }, + { + "id": "rust", + "stability": "stable", + "value": "rust" + }, + { + "id": "swift", + "stability": "stable", + "value": "swift" + }, + { + "id": "webjs", + "stability": "stable", + "value": "webjs" + } + ] + } + }, + { + "brief": "The version string of the telemetry SDK.\n", + "examples": [ + "1.2.3" + ], + "name": "telemetry.sdk.version", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the auto instrumentation agent or distribution, if used.\n", + "examples": [ + "parts-unlimited-java" + ], + "name": "telemetry.distro.name", + "note": "Official auto instrumentation agents and distributions SHOULD set the `telemetry.distro.name` attribute to\na string starting with `opentelemetry-`, e.g. `opentelemetry-java-instrumentation`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version string of the auto instrumentation agent or distribution, if used.\n", + "examples": [ + "1.2.3" + ], + "name": "telemetry.distro.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for telemetry SDK.\n", + "display_name": "Telemetry Attributes", + "id": "registry.telemetry", + "lineage": { + "provenance": { + "path": "/home/weaver/source/telemetry/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The [canonical URL](https://support.google.com/webmasters/answer/10347851) of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.\n", + "examples": [ + "https://github.com/opentelemetry/open-telemetry-collector-contrib", + "https://gitlab.com/my-org/my-project/my-projects-project/repo" + ], + "name": "vcs.repository.url.full", + "note": "In Git Version Control Systems, the canonical URL SHOULD NOT include\nthe `.git` extension.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.\n", + "examples": [ + "semantic-conventions", + "my-cool-repo" + ], + "name": "vcs.repository.name", + "note": "Due to it only being the name, it can clash with forks of the same\nrepository if collecting telemetry across multiple orgs or groups in\nthe same backends.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A repository in the Version Control System.\n", + "id": "entity.vcs.repo", + "lineage": { + "attributes": { + "vcs.repository.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.repository.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/entities.yaml", + "registry_id": "main" + } + }, + "name": "vcs.repo", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the [reference](https://git-scm.com/docs/gitglossary#def_ref) such as **branch** or **tag** in the repository.\n", + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.ref.head.name", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The revision, literally [revised version](https://www.merriam-webster.com/dictionary/revision), The revision most often refers to a commit object in Git, or a revision number in SVN.\n", + "examples": [ + "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", + "main", + "123", + "HEAD" + ], + "name": "vcs.ref.head.revision", + "note": "`head` refers to where you are right now; the current reference at a\ngiven time.The revision can be a full [hash value (see\nglossary)](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf),\nof the recorded change to a ref within a repository pointing to a\ncommit [commit](https://git-scm.com/docs/git-commit) object. It does\nnot necessarily have to be a hash; it can simply define a [revision\nnumber](https://svnbook.red-bean.com/en/1.7/svn.tour.revs.specifiers.html)\nwhich is an integer that is monotonically increasing. In cases where\nit is identical to the `ref.head.name`, it SHOULD still be included.\nIt is up to the implementer to decide which value to set as the\nrevision based on the VCS system and situational context.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the [reference](https://git-scm.com/docs/gitglossary#def_ref) in the repository.\n", + "examples": [ + "branch", + "tag" + ], + "name": "vcs.ref.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + } + ], + "brief": "A reference to a specific version in the Version Control System.\n", + "id": "entity.vcs.ref", + "lineage": { + "attributes": { + "vcs.ref.head.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.head.revision": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.vcs.repository" + }, + "vcs.ref.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.vcs.repository" + } + }, + "provenance": { + "path": "/home/weaver/source/vcs/entities.yaml", + "registry_id": "main" + } + }, + "name": "vcs.ref", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The System Management Facility (SMF) Identifier uniquely identified a z/OS system within a SYSPLEX or mainframe environment and is used for system and performance analysis.", + "examples": [ + "SYS1" + ], + "name": "zos.smf.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the SYSPLEX to which the z/OS system belongs too.", + "examples": [ + "SYSPLEX1" + ], + "name": "zos.sysplex.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes of a z/OS resource.\n", + "display_name": "z/OS attributes", + "id": "registry.zos", + "lineage": { + "provenance": { + "path": "/home/weaver/source/zos/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This span describes an AWS SDK client call.\n", + "id": "span.aws.client", + "lineage": { + "attributes": { + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "**Span name** MUST be of the format `Service.Operation` as per the\nAWS HTTP API, e.g., `DynamoDB.GetItem`, `S3.ListBuckets`. This is\nequivalent to concatenating `rpc.service` and `rpc.method` with `.` and\nconsistent with the naming guidelines for RPC client spans.\n\nAWS SDK span attributes are based on the request or response parameters\nin AWS SDK API calls. The conventions have been collected over time based\non feedback from AWS users of tracing and will continue to increase as new\ninteresting conventions are found.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The keys in the `RequestItems` object field.", + "examples": [ + [ + "Users", + "Cats" + ] + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents a `DynamoDB.BatchGetItem` call.\n", + "id": "span.dynamodb.batchgetitem.client", + "lineage": { + "attributes": { + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The keys in the `RequestItems` object field.", + "examples": [ + [ + "Users", + "Cats" + ] + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of the `ItemCollectionMetrics` response field.", + "examples": [ + "{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\": blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": { \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ], \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } }, \"SizeEstimateRangeGB\": [ number ] } ] }" + ], + "name": "aws.dynamodb.item_collection_metrics", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents a `DynamoDB.BatchWriteItem` call.\n", + "id": "span.dynamodb.batchwriteitem.client", + "lineage": { + "attributes": { + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.item_collection_metrics": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of the `ItemCollectionMetrics` response field.", + "examples": [ + "{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\": blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": { \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ], \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } }, \"SizeEstimateRangeGB\": [ number ] } ] }" + ], + "name": "aws.dynamodb.item_collection_metrics", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.", + "examples": [ + 1.0, + 2.0 + ], + "name": "aws.dynamodb.provisioned_read_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.", + "examples": [ + 1.0, + 2.0 + ], + "name": "aws.dynamodb.provisioned_write_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field", + "examples": [ + [ + "{ \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }" + ] + ], + "name": "aws.dynamodb.global_secondary_indexes", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field.", + "examples": [ + [ + "{ \"IndexArn\": \"string\", \"IndexName\": \"string\", \"IndexSizeBytes\": number, \"ItemCount\": number, \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" } }" + ] + ], + "name": "aws.dynamodb.local_secondary_indexes", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A single-element array with the value of the TableName request parameter.", + "examples": [ + "Users" + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This span represents a `DynamoDB.CreateTable` call.\n", + "id": "span.dynamodb.createtable.client", + "lineage": { + "attributes": { + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.global_secondary_indexes": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.item_collection_metrics": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.local_secondary_indexes": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.provisioned_read_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.provisioned_write_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of the `ItemCollectionMetrics` response field.", + "examples": [ + "{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\": blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": { \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ], \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } }, \"SizeEstimateRangeGB\": [ number ] } ] }" + ], + "name": "aws.dynamodb.item_collection_metrics", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A single-element array with the value of the TableName request parameter.", + "examples": [ + "Users" + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This span represents a `DynamoDB.DeleteItem` call.\n", + "id": "span.dynamodb.deleteitem.client", + "lineage": { + "attributes": { + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.item_collection_metrics": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A single-element array with the value of the TableName request parameter.", + "examples": [ + "Users" + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This span represents a `DynamoDB.DeleteTable` call.\n", + "id": "span.dynamodb.deletetable.client", + "lineage": { + "attributes": { + "aws.dynamodb.table_names": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A single-element array with the value of the TableName request parameter.", + "examples": [ + "Users" + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This span represents a `DynamoDB.DescribeTable` call.\n", + "id": "span.dynamodb.describetable.client", + "lineage": { + "attributes": { + "aws.dynamodb.table_names": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value of the `ConsistentRead` request parameter.", + "name": "aws.dynamodb.consistent_read", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The value of the `ProjectionExpression` request parameter.", + "examples": [ + "Title", + "Title, Price, Color", + "Title, Description, RelatedItems, ProductReviews" + ], + "name": "aws.dynamodb.projection", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A single-element array with the value of the TableName request parameter.", + "examples": [ + "Users" + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This span represents a `DynamoDB.GetItem` call.\n", + "id": "span.dynamodb.getitem.client", + "lineage": { + "attributes": { + "aws.dynamodb.consistent_read": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.projection": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `Limit` request parameter.", + "examples": [ + 10 + ], + "name": "aws.dynamodb.limit", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `ExclusiveStartTableName` request parameter.", + "examples": [ + "Users", + "CatsTable" + ], + "name": "aws.dynamodb.exclusive_start_table", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The number of items in the `TableNames` response parameter.", + "examples": [ + 20 + ], + "name": "aws.dynamodb.table_count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents a `DynamoDB.ListTables` call.\n", + "id": "span.dynamodb.listtables.client", + "lineage": { + "attributes": { + "aws.dynamodb.exclusive_start_table": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.limit": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The keys in the `RequestItems` object field.", + "examples": [ + [ + "Users", + "Cats" + ] + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of the `ItemCollectionMetrics` response field.", + "examples": [ + "{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\": blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": { \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ], \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } }, \"SizeEstimateRangeGB\": [ number ] } ] }" + ], + "name": "aws.dynamodb.item_collection_metrics", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents a `DynamoDB.PutItem` call.\n", + "id": "span.dynamodb.putitem.client", + "lineage": { + "attributes": { + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.item_collection_metrics": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value of the `ConsistentRead` request parameter.", + "name": "aws.dynamodb.consistent_read", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The value of the `ProjectionExpression` request parameter.", + "examples": [ + "Title", + "Title, Price, Color", + "Title, Description, RelatedItems, ProductReviews" + ], + "name": "aws.dynamodb.projection", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `Limit` request parameter.", + "examples": [ + 10 + ], + "name": "aws.dynamodb.limit", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `AttributesToGet` request parameter.", + "examples": [ + [ + "lives", + "id" + ] + ], + "name": "aws.dynamodb.attributes_to_get", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value of the `IndexName` request parameter.", + "examples": [ + "name_to_group" + ], + "name": "aws.dynamodb.index_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `Select` request parameter.", + "examples": [ + "ALL_ATTRIBUTES", + "COUNT" + ], + "name": "aws.dynamodb.select", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `ScanIndexForward` request parameter.", + "name": "aws.dynamodb.scan_forward", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A single-element array with the value of the TableName request parameter.", + "examples": [ + "Users" + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This span represents a `DynamoDB.Query` call.\n", + "id": "span.dynamodb.query.client", + "lineage": { + "attributes": { + "aws.dynamodb.attributes_to_get": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.consistent_read": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.index_name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.limit": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.projection": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.scan_forward": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.select": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value of the `ConsistentRead` request parameter.", + "name": "aws.dynamodb.consistent_read", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The value of the `ProjectionExpression` request parameter.", + "examples": [ + "Title", + "Title, Price, Color", + "Title, Description, RelatedItems, ProductReviews" + ], + "name": "aws.dynamodb.projection", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `Limit` request parameter.", + "examples": [ + 10 + ], + "name": "aws.dynamodb.limit", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `AttributesToGet` request parameter.", + "examples": [ + [ + "lives", + "id" + ] + ], + "name": "aws.dynamodb.attributes_to_get", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value of the `IndexName` request parameter.", + "examples": [ + "name_to_group" + ], + "name": "aws.dynamodb.index_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `Select` request parameter.", + "examples": [ + "ALL_ATTRIBUTES", + "COUNT" + ], + "name": "aws.dynamodb.select", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `Segment` request parameter.", + "examples": [ + 10 + ], + "name": "aws.dynamodb.segment", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `TotalSegments` request parameter.", + "examples": [ + 100 + ], + "name": "aws.dynamodb.total_segments", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `Count` response parameter.", + "examples": [ + 10 + ], + "name": "aws.dynamodb.count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `ScannedCount` response parameter.", + "examples": [ + 50 + ], + "name": "aws.dynamodb.scanned_count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A single-element array with the value of the TableName request parameter.", + "examples": [ + "Users" + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This span represents a `DynamoDB.Scan` call.\n", + "id": "span.dynamodb.scan.client", + "lineage": { + "attributes": { + "aws.dynamodb.attributes_to_get": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.consistent_read": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.index_name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.limit": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.projection": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.scanned_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.segment": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.select": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.total_segments": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of the `ItemCollectionMetrics` response field.", + "examples": [ + "{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\": blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": { \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ], \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } }, \"SizeEstimateRangeGB\": [ number ] } ] }" + ], + "name": "aws.dynamodb.item_collection_metrics", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A single-element array with the value of the TableName request parameter.", + "examples": [ + "Users" + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This span represents a `DynamoDB.UpdateItem` call.\n", + "id": "span.dynamodb.updateitem.client", + "lineage": { + "attributes": { + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.item_collection_metrics": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.", + "examples": [ + 1.0, + 2.0 + ], + "name": "aws.dynamodb.provisioned_read_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.", + "examples": [ + 1.0, + 2.0 + ], + "name": "aws.dynamodb.provisioned_write_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The JSON-serialized value of each item in the `AttributeDefinitions` request field.", + "examples": [ + [ + "{ \"AttributeName\": \"string\", \"AttributeType\": \"string\" }" + ] + ], + "name": "aws.dynamodb.attribute_definitions", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of each item in the `GlobalSecondaryIndexUpdates` request field.", + "examples": [ + [ + "{ \"Create\": { \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }" + ] + ], + "name": "aws.dynamodb.global_secondary_index_updates", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A single-element array with the value of the TableName request parameter.", + "examples": [ + "Users" + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This span represents a `DynamoDB.UpdateTable` call.\n", + "id": "span.dynamodb.updatetable.client", + "lineage": { + "attributes": { + "aws.dynamodb.attribute_definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.consumed_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.global_secondary_index_updates": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.provisioned_read_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.provisioned_write_capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.dynamodb.table_names": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.aws.dynamodb" + }, + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"aws.dynamodb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The S3 bucket name the request refers to. Corresponds to the `--bucket` parameter of the [S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) operations.", + "examples": [ + "some-bucket-name" + ], + "name": "aws.s3.bucket", + "note": "The `bucket` attribute is applicable to all S3 operations that reference a bucket, i.e. that require the bucket name as a mandatory parameter.\nThis applies to almost all S3 operations except `list-buckets`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The S3 object key the request refers to. Corresponds to the `--key` parameter of the [S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) operations.", + "examples": [ + "someFile.yml" + ], + "name": "aws.s3.key", + "note": "The `key` attribute is applicable to all object-related S3 operations, i.e. that require the object key as a mandatory parameter.\nThis applies in particular to the following operations:\n\n- [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)\n- [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html)\n- [get-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html)\n- [head-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html)\n- [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html)\n- [restore-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html)\n- [select-object-content](https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html)\n- [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)\n- [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)\n- [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html)\n- [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)\n- [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n- [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The source object (in the form `bucket`/`key`) for the copy operation.", + "examples": [ + "someFile.yml" + ], + "name": "aws.s3.copy_source", + "note": "The `copy_source` attribute applies to S3 copy operations and corresponds to the `--copy-source` parameter\nof the [copy-object operation within the S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html).\nThis applies in particular to the following operations:\n\n- [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)\n- [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Upload ID that identifies the multipart upload.", + "examples": [ + "dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ" + ], + "name": "aws.s3.upload_id", + "note": "The `upload_id` attribute applies to S3 multipart-upload operations and corresponds to the `--upload-id` parameter\nof the [S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) multipart operations.\nThis applies in particular to the following operations:\n\n- [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)\n- [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)\n- [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)\n- [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n- [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The delete request container that specifies the objects to be deleted.", + "examples": [ + "Objects=[{Key=string,VersionId=string},{Key=string,VersionId=string}],Quiet=boolean" + ], + "name": "aws.s3.delete", + "note": "The `delete` attribute is only applicable to the [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) operation.\nThe `delete` attribute corresponds to the `--delete` parameter of the\n[delete-objects operation within the S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The part number of the part being uploaded in a multipart-upload operation. This is a positive integer between 1 and 10,000.", + "examples": [ + 3456 + ], + "name": "aws.s3.part_number", + "note": "The `part_number` attribute is only applicable to the [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\nand [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) operations.\nThe `part_number` attribute corresponds to the `--part-number` parameter of the\n[upload-part operation within the S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value `aws-api`.", + "examples": [ + "aws-api" + ], + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "The name of the service to which a request is made, as returned by the AWS SDK.", + "examples": [ + "DynamoDB", + "S3" + ], + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation corresponding to the request, as returned by the AWS SDK", + "examples": [ + "GetItem", + "PutItem" + ], + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS Region where the requested service is being accessed.\n", + "examples": [ + "us-east-1", + "us-west-2" + ], + "name": "cloud.region", + "note": "Specifies the AWS Region that the SDK client targets for a given AWS service call. The attribute\u0027s value should adhere to the AWS Region codes outlined in the [AWS documentation](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html#available-regions).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Semantic Conventions for AWS S3 client spans extend the general [AWS SDK Semantic Conventions](/docs/cloud-providers/aws-sdk.md)\n", + "id": "span.aws.s3.client", + "lineage": { + "attributes": { + "aws.extended_request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.s3.bucket": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.s3" + }, + "aws.s3.copy_source": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.s3" + }, + "aws.s3.delete": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.s3" + }, + "aws.s3.key": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.s3" + }, + "aws.s3.part_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.s3" + }, + "aws.s3.upload_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.s3" + }, + "cloud.region": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.cloud" + }, + "rpc.method": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/sdk-spans.yaml", + "registry_id": "main" + } + }, + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Container name used by container runtime.\n", + "examples": [ + "opentelemetry-autoconf" + ], + "name": "container.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Container ID. Usually a UUID, as for example used to [identify Docker containers](https://docs.docker.com/engine/containers/run/#container-identification). The UUID might be abbreviated.\n", + "examples": [ + "a3bf90e006b2" + ], + "name": "container.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The container runtime managing this container.\n", + "examples": [ + "docker", + "containerd", + "rkt" + ], + "name": "container.runtime.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version of the runtime of this process, as returned by the runtime without modification.\n", + "examples": "1.0.0", + "name": "container.runtime.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A description about the runtime which could include, for example details about the CRI/API version being used or other customisations.\n", + "examples": [ + "docker://19.3.1 - CRI: 1.22.0" + ], + "name": "container.runtime.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Name of the image the container was built on.\n", + "examples": [ + "gcr.io/opentelemetry/operator" + ], + "name": "container.image.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Container image tags. An example can be found in [Docker Image Inspect](https://docs.docker.com/reference/api/engine/version/v1.43/#tag/Image/operation/ImageInspect). Should be only the `\u003ctag\u003e` section of the full name for example from `registry.example.com/my-org/my-image:\u003ctag\u003e`.\n", + "examples": [ + [ + "v1.27.1", + "3.5.7-0" + ] + ], + "name": "container.image.tags", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Runtime specific image identifier. Usually a hash algorithm followed by a UUID.\n", + "examples": [ + "sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f" + ], + "name": "container.image.id", + "note": "Docker defines a sha256 of the image id; `container.image.id` corresponds to the `Image` field from the Docker container inspect [API](https://docs.docker.com/reference/api/engine/version/v1.43/#tag/Container/operation/ContainerInspect) endpoint.\nK8s defines a link to the container registry repository with digest `\"imageID\": \"registry.azurecr.io /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625\"`.\nThe ID is assigned by the container runtime and can vary in different environments. Consider using `oci.manifest.digest` if it is important to identify the same image in different environments/runtimes.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Repo digests of the container image as provided by the container runtime.\n", + "examples": [ + [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + ], + "name": "container.image.repo_digests", + "note": "[Docker](https://docs.docker.com/reference/api/engine/version/v1.43/#tag/Image/operation/ImageInspect) and [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238) report those under the `RepoDigests` field.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The command used to run the container (i.e. the command name).\n", + "examples": [ + "otelcontribcol" + ], + "name": "container.command", + "note": "If using embedded credentials or sensitive data, it is recommended to remove them to prevent potential leakage.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full command run by the container as a single string representing the full command.\n", + "examples": [ + "otelcontribcol --config config.yaml" + ], + "name": "container.command_line", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "All the command arguments (including the command/executable itself) run by the container.\n", + "examples": [ + [ + "otelcontribcol", + "--config", + "config.yaml" + ] + ], + "name": "container.command_args", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Container labels, `\u003ckey\u003e` being the label name, the value being the label value.\n", + "examples": [ + "nginx" + ], + "name": "container.label", + "note": "For example, a docker container label `app` with value `nginx` SHOULD be recorded as the `container.label.app` attribute with value `\"nginx\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The name of the CSI ([Container Storage Interface](https://github.com/container-storage-interface/spec)) plugin used by the volume.\n", + "examples": [ + "pd.csi.storage.gke.io" + ], + "name": "container.csi.plugin.name", + "note": "This can sometimes be referred to as a \"driver\" in CSI implementations. This should represent the `name` field of the GetPluginInfo RPC.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The unique volume ID returned by the CSI ([Container Storage Interface](https://github.com/container-storage-interface/spec)) plugin.\n", + "examples": [ + "projects/my-gcp-project/zones/my-gcp-zone/disks/my-gcp-disk" + ], + "name": "container.csi.volume.id", + "note": "This can sometimes be referred to as a \"volume handle\" in CSI implementations. This should represent the `Volume.volume_id` field in CSI spec.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A container instance.\n", + "display_name": "Container Attributes", + "id": "registry.container", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "This attribute represents the state of the application.\n", + "name": "ios.app.state", + "note": "The iOS lifecycle states are defined in the [UIApplicationDelegate documentation](https://developer.apple.com/documentation/uikit/uiapplicationdelegate), and from which the `OS terminology` column values are derived.\n", + "requirement_level": { + "conditionally_required": "if and only if `os.name` is `ios`" + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "The app has become `active`. Associated with UIKit notification `applicationDidBecomeActive`.\n", + "id": "active", + "stability": "development", + "value": "active" + }, + { + "brief": "The app is now `inactive`. Associated with UIKit notification `applicationWillResignActive`.\n", + "id": "inactive", + "stability": "development", + "value": "inactive" + }, + { + "brief": "The app is now in the background. This value is associated with UIKit notification `applicationDidEnterBackground`.\n", + "id": "background", + "stability": "development", + "value": "background" + }, + { + "brief": "The app is now in the foreground. This value is associated with UIKit notification `applicationWillEnterForeground`.\n", + "id": "foreground", + "stability": "development", + "value": "foreground" + }, + { + "brief": "The app is about to terminate. Associated with UIKit notification `applicationWillTerminate`.\n", + "id": "terminate", + "stability": "development", + "value": "terminate" + } + ] + } + }, + { + "brief": "This attribute represents the state of the application.\n", + "examples": [ + "created" + ], + "name": "android.app.state", + "note": "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.\n", + "requirement_level": { + "conditionally_required": "if and only if `os.name` is `android`" + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has been called in the app for the first time.\n", + "id": "created", + "stability": "development", + "value": "created" + }, + { + "brief": "Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been called when the app was in the foreground state.\n", + "id": "background", + "stability": "development", + "value": "background" + }, + { + "brief": "Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has been called when the app was in either the created or background states.\n", + "id": "foreground", + "stability": "development", + "value": "foreground" + } + ] + } + } + ], + "brief": "This event represents an occurrence of a lifecycle transition on Android or iOS platform.\n", + "id": "event.device.app.lifecycle", + "lineage": { + "attributes": { + "android.app.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.android" + }, + "ios.app.state": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.ios" + } + }, + "provenance": { + "path": "/home/weaver/source/device/events.yaml", + "registry_id": "main" + } + }, + "name": "device.app.lifecycle", + "note": "The event body fields MUST be used to describe the state of the application at the time of the event.\nThis event is meant to be used in conjunction with `os.name` [resource semantic convention](/docs/resource/os.md) to identify the mobile operating system (e.g. Android, iOS).\nThe `android.app.state` and `ios.app.state` fields are mutually exclusive and MUST NOT be used together, each field MUST be used with its corresponding `os.name` value.\n", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "Identifies the Google Cloud service for which the official client library is intended.", + "examples": [ + "appengine", + "run", + "firestore", + "alloydb", + "spanner" + ], + "name": "gcp.client.service", + "note": "Intended to be a stable identifier for Google Cloud client libraries that is uniform across implementation languages. The value should be derived from the canonical service domain for the service; for example, \u0027foo.googleapis.com\u0027 should result in a value of \u0027foo\u0027.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes for Google Cloud client libraries.\n", + "display_name": "GCP Client Attributes", + "id": "registry.gcp.client", + "lineage": { + "provenance": { + "path": "/home/weaver/source/gcp/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the Cloud Run [execution](https://cloud.google.com/run/docs/managing/job-executions) being run for the Job, as set by the [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) environment variable.\n", + "examples": [ + "job-name-xxxx", + "sample-job-mdw84" + ], + "name": "gcp.cloud_run.job.execution", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The index for a task within an execution as provided by the [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) environment variable.\n", + "examples": [ + 0, + 1 + ], + "name": "gcp.cloud_run.job.task_index", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "This document defines attributes for Google Cloud Run.\n", + "display_name": "GCP - Google Cloud Run Attributes", + "id": "registry.gcp.cloud_run", + "lineage": { + "provenance": { + "path": "/home/weaver/source/gcp/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The container within GCP where the AppHub application is defined.\n", + "examples": [ + "projects/my-container-project" + ], + "name": "gcp.apphub.application.container", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The GCP zone or region where the application is defined.\n", + "examples": [ + "us-central1" + ], + "name": "gcp.apphub.application.location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the application as configured in AppHub.\n", + "examples": [ + "my-application" + ], + "name": "gcp.apphub.application.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the service as configured in AppHub.\n", + "examples": [ + "my-service" + ], + "name": "gcp.apphub.service.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Environment of a service is the stage of a software lifecycle.\n", + "name": "gcp.apphub.service.environment_type", + "note": "[See AppHub environment type](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type_1)\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Production environment.", + "id": "production", + "stability": "development", + "value": "PRODUCTION" + }, + { + "brief": "Staging environment.", + "id": "staging", + "stability": "development", + "value": "STAGING" + }, + { + "brief": "Test environment.", + "id": "test", + "stability": "development", + "value": "TEST" + }, + { + "brief": "Development environment.", + "id": "development", + "stability": "development", + "value": "DEVELOPMENT" + } + ] + } + }, + { + "brief": "Criticality of a service indicates its importance to the business.\n", + "name": "gcp.apphub.service.criticality_type", + "note": "[See AppHub type enum](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type)\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Mission critical service.", + "id": "mission_critical", + "stability": "development", + "value": "MISSION_CRITICAL" + }, + { + "brief": "High impact.", + "id": "high", + "stability": "development", + "value": "HIGH" + }, + { + "brief": "Medium impact.", + "id": "medium", + "stability": "development", + "value": "MEDIUM" + }, + { + "brief": "Low impact.", + "id": "low", + "stability": "development", + "value": "LOW" + } + ] + } + }, + { + "brief": "The name of the workload as configured in AppHub.\n", + "examples": [ + "my-workload" + ], + "name": "gcp.apphub.workload.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Environment of a workload is the stage of a software lifecycle.\n", + "name": "gcp.apphub.workload.environment_type", + "note": "[See AppHub environment type](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type_1)\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Production environment.", + "id": "production", + "stability": "development", + "value": "PRODUCTION" + }, + { + "brief": "Staging environment.", + "id": "staging", + "stability": "development", + "value": "STAGING" + }, + { + "brief": "Test environment.", + "id": "test", + "stability": "development", + "value": "TEST" + }, + { + "brief": "Development environment.", + "id": "development", + "stability": "development", + "value": "DEVELOPMENT" + } + ] + } + }, + { + "brief": "Criticality of a workload indicates its importance to the business.\n", + "name": "gcp.apphub.workload.criticality_type", + "note": "[See AppHub type enum](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type)\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Mission critical service.", + "id": "mission_critical", + "stability": "development", + "value": "MISSION_CRITICAL" + }, + { + "brief": "High impact.", + "id": "high", + "stability": "development", + "value": "HIGH" + }, + { + "brief": "Medium impact.", + "id": "medium", + "stability": "development", + "value": "MEDIUM" + }, + { + "brief": "Low impact.", + "id": "low", + "stability": "development", + "value": "LOW" + } + ] + } + } + ], + "brief": "This document defines attributes AppHub will apply to resources in GCP. See [AppHub overview](https://cloud.google.com/app-hub/docs/overview).\n", + "display_name": "GCP - AppHub Attributes", + "id": "registry.gcp.apphub", + "lineage": { + "provenance": { + "path": "/home/weaver/source/gcp/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The container within GCP where the AppHub destination application is defined.\n", + "examples": [ + "projects/my-container-project" + ], + "name": "gcp.apphub_destination.application.container", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The GCP zone or region where the destination application is defined.\n", + "examples": [ + "us-central1" + ], + "name": "gcp.apphub_destination.application.location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the destination application as configured in AppHub.\n", + "examples": [ + "my-application" + ], + "name": "gcp.apphub_destination.application.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the destination service as configured in AppHub.\n", + "examples": [ + "my-service" + ], + "name": "gcp.apphub_destination.service.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Software lifecycle stage of a destination service as defined [AppHub environment type](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type_1)\n", + "name": "gcp.apphub_destination.service.environment_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Production environment.", + "id": "production", + "stability": "development", + "value": "PRODUCTION" + }, + { + "brief": "Staging environment.", + "id": "staging", + "stability": "development", + "value": "STAGING" + }, + { + "brief": "Test environment.", + "id": "test", + "stability": "development", + "value": "TEST" + }, + { + "brief": "Development environment.", + "id": "development", + "stability": "development", + "value": "DEVELOPMENT" + } + ] + } + }, + { + "brief": "Criticality of a destination workload indicates its importance to the business as specified in [AppHub type enum](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type)\n", + "name": "gcp.apphub_destination.service.criticality_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Mission critical service.", + "id": "mission_critical", + "stability": "development", + "value": "MISSION_CRITICAL" + }, + { + "brief": "High impact.", + "id": "high", + "stability": "development", + "value": "HIGH" + }, + { + "brief": "Medium impact.", + "id": "medium", + "stability": "development", + "value": "MEDIUM" + }, + { + "brief": "Low impact.", + "id": "low", + "stability": "development", + "value": "LOW" + } + ] + } + }, + { + "brief": "The name of the destination workload as configured in AppHub.\n", + "examples": [ + "my-workload" + ], + "name": "gcp.apphub_destination.workload.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Environment of a destination workload is the stage of a software lifecycle as provided in the [AppHub environment type](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type_1)\n", + "name": "gcp.apphub_destination.workload.environment_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Production environment.", + "id": "production", + "stability": "development", + "value": "PRODUCTION" + }, + { + "brief": "Staging environment.", + "id": "staging", + "stability": "development", + "value": "STAGING" + }, + { + "brief": "Test environment.", + "id": "test", + "stability": "development", + "value": "TEST" + }, + { + "brief": "Development environment.", + "id": "development", + "stability": "development", + "value": "DEVELOPMENT" + } + ] + } + }, + { + "brief": "Criticality of a destination workload indicates its importance to the business as specified in [AppHub type enum](https://cloud.google.com/app-hub/docs/reference/rest/v1/Attributes#type)\n", + "name": "gcp.apphub_destination.workload.criticality_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Mission critical service.", + "id": "mission_critical", + "stability": "development", + "value": "MISSION_CRITICAL" + }, + { + "brief": "High impact.", + "id": "high", + "stability": "development", + "value": "HIGH" + }, + { + "brief": "Medium impact.", + "id": "medium", + "stability": "development", + "value": "MEDIUM" + }, + { + "brief": "Low impact.", + "id": "low", + "stability": "development", + "value": "LOW" + } + ] + } + } + ], + "brief": "This document defines attributes AppHub will apply to destination resources in GCP. See [AppHub overview](https://cloud.google.com/app-hub/docs/overview).\n", + "display_name": "GCP - AppHub Destination Attributes", + "id": "registry.gcp.apphub_destination", + "lineage": { + "provenance": { + "path": "/home/weaver/source/gcp/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The instance name of a GCE instance. This is the value provided by `host.name`, the visible name of the instance in the Cloud Console UI, and the prefix for the default hostname of the instance as defined by the [default internal DNS name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names).\n", + "examples": [ + "instance-1", + "my-vm-name" + ], + "name": "gcp.gce.instance.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The hostname of a GCE instance. This is the full value of the default or [custom hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm).\n", + "examples": [ + "my-host1234.example.com", + "sample-vm.us-west1-b.c.my-project.internal" + ], + "name": "gcp.gce.instance.hostname", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for Google Compute Engine (GCE).\n", + "display_name": "GCP - Google Compute Engine (GCE) Attributes", + "id": "registry.gcp.gce", + "lineage": { + "provenance": { + "path": "/home/weaver/source/gcp/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Ambient (external) temperature of the physical host.", + "id": "metric.hw.host.ambient_temperature", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/host-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.host.ambient_temperature", + "stability": "development", + "type": "metric", + "unit": "Cel" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Total energy consumed by the entire physical host, in joules.", + "id": "metric.hw.host.energy", + "instrument": "counter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/host-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.host.energy", + "note": "The overall energy usage of a host MUST be reported using the specific `hw.host.energy` and `hw.host.power` metrics **only**, instead of the generic `hw.energy` and `hw.power` described in the previous section, to prevent summing up overlapping values.\n", + "stability": "development", + "type": "metric", + "unit": "J" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "By how many degrees Celsius the temperature of the physical host can be increased, before reaching a warning threshold on one of the internal sensors.\n", + "id": "metric.hw.host.heating_margin", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/host-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.host.heating_margin", + "stability": "development", + "type": "metric", + "unit": "Cel" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Instantaneous power consumed by the entire physical host in Watts (`hw.host.energy` is preferred).\n", + "id": "metric.hw.host.power", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/host-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.host.power", + "note": "The overall energy usage of a host MUST be reported using the specific `hw.host.energy` and `hw.host.power` metrics **only**, instead of the generic `hw.energy` and `hw.power` described in the previous section, to prevent summing up overlapping values.\n", + "stability": "development", + "type": "metric", + "unit": "W" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the buffer pool.", + "examples": [ + "mapped", + "direct" + ], + "name": "jvm.buffer.pool.name", + "note": "Pool names are generally obtained via [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Deprecated, use `jvm.buffer.memory.used` instead.", + "deprecated": { + "note": "Replaced by `jvm.buffer.memory.used`.", + "reason": "renamed", + "renamed_to": "jvm.buffer.memory.used" + }, + "id": "metric.jvm.buffer.memory.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.buffer.pool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.buffer.memory.usage", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "attributes": [ + { + "brief": "The number of messages sent, received, or processed in the scope of the batching operation.", + "examples": [ + 0, + 1, + 2 + ], + "name": "messaging.batch.message_count", + "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", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "A unique identifier for the client that consumes or produces a message.\n", + "examples": [ + "client-5", + "myhost@8742@s8083jm" + ], + "name": "messaging.client.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the consumer group with which a consumer is associated.\n", + "examples": [ + "my-group", + "indexer" + ], + "name": "messaging.consumer.group.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.consumer.group.name` is applicable and what it means in the context of that system.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the destination subscription from which a message is consumed.", + "examples": [ + "subscription-a" + ], + "name": "messaging.destination.subscription.name", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `messaging.destination.subscription.name` is applicable and what it means in the context of that system.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Low cardinality representation of the messaging destination name", + "examples": [ + "/customers/{customerId}" + ], + "name": "messaging.destination.template", + "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", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A boolean that is true if the message destination is anonymous (could be unnamed or have auto-generated name).", + "name": "messaging.destination.anonymous", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "A boolean that is true if the message destination is temporary and might not exist anymore after messages are processed.", + "name": "messaging.destination.temporary", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\".\n", + "examples": "MyConversationId", + "name": "messaging.message.conversation_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The size of the message body and metadata in bytes.\n", + "examples": 2738, + "name": "messaging.message.envelope.size", + "note": "This can refer to both the compressed or uncompressed size. If both sizes are known, the uncompressed\nsize should be used.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "A value used by the messaging system as an identifier for the message, represented as a string.", + "examples": "452a7c7c7c7048c2f887f61572b18fc2", + "name": "messaging.message.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The size of the message body in bytes.\n", + "examples": 1439, + "name": "messaging.message.body.size", + "note": "This can refer to both the compressed or uncompressed body size. If both sizes are known, the uncompressed\nbody size should be used.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "A string identifying the type of the messaging operation.\n", + "name": "messaging.operation.type", + "note": "If a custom value is used, it MUST be of low cardinality.", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "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 sending scenarios.\n", + "id": "create", + "stability": "development", + "value": "create" + }, + { + "brief": "One or more messages are provided for sending to an intermediary. If a single message is sent, the context of the \"Send\" span can be used as the creation context and no \"Create\" span needs to be created.\n", + "id": "send", + "stability": "development", + "value": "send" + }, + { + "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", + "id": "receive", + "stability": "development", + "value": "receive" + }, + { + "brief": "One or more messages are processed by a consumer.\n", + "id": "process", + "stability": "development", + "value": "process" + }, + { + "brief": "One or more messages are settled.\n", + "id": "settle", + "stability": "development", + "value": "settle" + }, + { + "brief": "Deprecated. Use `process` instead.", + "deprecated": { + "note": "Replaced by `process`.", + "reason": "renamed", + "renamed_to": "process" + }, + "id": "deliver", + "stability": "development", + "value": "deliver" + }, + { + "brief": "Deprecated. Use `send` instead.", + "deprecated": { + "note": "Replaced by `send`.", + "reason": "renamed", + "renamed_to": "send" + }, + "id": "publish", + "stability": "development", + "value": "publish" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The messaging system as identified by the client instrumentation.", + "name": "messaging.system", + "note": "The actual messaging system may differ from the one known by the client. For example, when using Kafka client libraries to communicate with Azure Event Hubs, the `messaging.system` is set to `kafka` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Apache ActiveMQ", + "id": "activemq", + "stability": "development", + "value": "activemq" + }, + { + "brief": "Amazon Simple Notification Service (SNS)", + "id": "aws.sns", + "stability": "development", + "value": "aws.sns" + }, + { + "brief": "Amazon Simple Queue Service (SQS)", + "id": "aws_sqs", + "stability": "development", + "value": "aws_sqs" + }, + { + "brief": "Azure Event Grid", + "id": "eventgrid", + "stability": "development", + "value": "eventgrid" + }, + { + "brief": "Azure Event Hubs", + "id": "eventhubs", + "stability": "development", + "value": "eventhubs" + }, + { + "brief": "Azure Service Bus", + "id": "servicebus", + "stability": "development", + "value": "servicebus" + }, + { + "brief": "Google Cloud Pub/Sub", + "id": "gcp_pubsub", + "stability": "development", + "value": "gcp_pubsub" + }, + { + "brief": "Java Message Service", + "id": "jms", + "stability": "development", + "value": "jms" + }, + { + "brief": "Apache Kafka", + "id": "kafka", + "stability": "development", + "value": "kafka" + }, + { + "brief": "RabbitMQ", + "id": "rabbitmq", + "stability": "development", + "value": "rabbitmq" + }, + { + "brief": "Apache RocketMQ", + "id": "rocketmq", + "stability": "development", + "value": "rocketmq" + }, + { + "brief": "Apache Pulsar", + "id": "pulsar", + "stability": "development", + "value": "pulsar" + } + ] + } + } + ], + "brief": "Attributes describing telemetry around messaging systems and messaging activities.", + "display_name": "General Messaging Attributes", + "id": "registry.messaging", + "lineage": { + "provenance": { + "path": "/home/weaver/source/messaging/registry.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Message keys in Kafka are used for grouping alike messages to ensure they\u0027re processed on the same partition. They differ from `messaging.message.id` in that they\u0027re not unique. If the key is `null`, the attribute MUST NOT be set.\n", + "examples": "myKey", + "name": "messaging.kafka.message.key", + "note": "If the key type is not string, it\u0027s string representation has to be supplied for the attribute. If the key has no unambiguous, canonical string form, don\u0027t include its value.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The offset of a record in the corresponding Kafka partition.\n", + "examples": 42, + "name": "messaging.kafka.offset", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "A boolean that is true if the message is a tombstone.", + "name": "messaging.kafka.message.tombstone", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + } + ], + "brief": "This group describes attributes specific to Apache Kafka.\n", + "display_name": "Kafka Attributes", + "id": "registry.messaging.kafka", + "lineage": { + "provenance": { + "path": "/home/weaver/source/messaging/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "RabbitMQ message routing key.\n", + "examples": "myKey", + "name": "messaging.rabbitmq.destination.routing_key", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RabbitMQ message delivery tag\n", + "examples": 123, + "name": "messaging.rabbitmq.message.delivery_tag", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "This group describes attributes specific to RabbitMQ.\n", + "display_name": "RabbitMQ Attributes", + "id": "registry.messaging.rabbitmq", + "lineage": { + "provenance": { + "path": "/home/weaver/source/messaging/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Model of message consumption. This only applies to consumer spans.\n", + "name": "messaging.rocketmq.consumption_model", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Clustering consumption model", + "id": "clustering", + "stability": "development", + "value": "clustering" + }, + { + "brief": "Broadcasting consumption model", + "id": "broadcasting", + "stability": "development", + "value": "broadcasting" + } + ] + } + }, + { + "brief": "The delay time level for delay message, which determines the message delay time.\n", + "examples": 3, + "name": "messaging.rocketmq.message.delay_time_level", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The timestamp in milliseconds that the delay message is expected to be delivered to consumer.\n", + "examples": 1665987217045, + "name": "messaging.rocketmq.message.delivery_timestamp", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "It is essential for FIFO message. Messages that belong to the same message group are always processed one by one within the same consumer group.\n", + "examples": "myMessageGroup", + "name": "messaging.rocketmq.message.group", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Key(s) of message, another way to mark message besides message id.\n", + "examples": [ + [ + "keyA", + "keyB" + ] + ], + "name": "messaging.rocketmq.message.keys", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The secondary classifier of message besides topic.\n", + "examples": "tagA", + "name": "messaging.rocketmq.message.tag", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of message.\n", + "name": "messaging.rocketmq.message.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Normal message", + "id": "normal", + "stability": "development", + "value": "normal" + }, + { + "brief": "FIFO message", + "id": "fifo", + "stability": "development", + "value": "fifo" + }, + { + "brief": "Delay message", + "id": "delay", + "stability": "development", + "value": "delay" + }, + { + "brief": "Transaction message", + "id": "transaction", + "stability": "development", + "value": "transaction" + } + ] + } + }, + { + "brief": "Namespace of RocketMQ resources, resources in different namespaces are individual.\n", + "examples": "myNamespace", + "name": "messaging.rocketmq.namespace", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This group describes attributes specific to RocketMQ.\n", + "display_name": "RocketMQ Attributes", + "id": "registry.messaging.rocketmq", + "lineage": { + "provenance": { + "path": "/home/weaver/source/messaging/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The ordering key for a given message. If the attribute is not present, the message does not have an ordering key.\n", + "examples": "ordering_key", + "name": "messaging.gcp_pubsub.message.ordering_key", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ack id for a given message.\n", + "examples": "ack_id", + "name": "messaging.gcp_pubsub.message.ack_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ack deadline in seconds set for the modify ack deadline request.\n", + "examples": 10, + "name": "messaging.gcp_pubsub.message.ack_deadline", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The delivery attempt for a given message.\n", + "examples": 2, + "name": "messaging.gcp_pubsub.message.delivery_attempt", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "This group describes attributes specific to GCP Pub/Sub.\n", + "display_name": "GCP Pub/Sub Attributes", + "id": "registry.messaging.gcp_pubsub", + "lineage": { + "provenance": { + "path": "/home/weaver/source/messaging/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Number of deliveries that have been attempted for this message.\n", + "examples": 2, + "name": "messaging.servicebus.message.delivery_count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The UTC epoch seconds at which the message has been accepted and stored in the entity.\n", + "examples": 1701393730, + "name": "messaging.servicebus.message.enqueued_time", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Describes the [settlement type](https://learn.microsoft.com/azure/service-bus-messaging/message-transfers-locks-settlement#peeklock).\n", + "name": "messaging.servicebus.disposition_status", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Message is completed", + "id": "complete", + "stability": "development", + "value": "complete" + }, + { + "brief": "Message is abandoned", + "id": "abandon", + "stability": "development", + "value": "abandon" + }, + { + "brief": "Message is sent to dead letter queue", + "id": "dead_letter", + "stability": "development", + "value": "dead_letter" + }, + { + "brief": "Message is deferred", + "id": "defer", + "stability": "development", + "value": "defer" + } + ] + } + } + ], + "brief": "This group describes attributes specific to Azure Service Bus.\n", + "display_name": "Azure Service Bus Attributes", + "id": "registry.messaging.servicebus", + "lineage": { + "provenance": { + "path": "/home/weaver/source/messaging/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The UTC epoch seconds at which the message has been accepted and stored in the entity.\n", + "examples": 1701393730, + "name": "messaging.eventhubs.message.enqueued_time", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "This group describes attributes specific to Azure Event Hubs.\n", + "display_name": "Azure Event Hubs Attributes", + "id": "registry.messaging.eventhubs", + "lineage": { + "provenance": { + "path": "/home/weaver/source/messaging/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Indicates that there are functions related to this mapping.\n", + "name": "pprof.mapping.has_functions", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Indicates that there are filenames related to this mapping.\n", + "name": "pprof.mapping.has_filenames", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Indicates that there are line numbers related to this mapping.\n", + "name": "pprof.mapping.has_line_numbers", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Indicates that there are inline frames related to this mapping.\n", + "name": "pprof.mapping.has_inline_frames", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Provides an indication that multiple symbols map to this location\u0027s address, for example due to identical code folding by the linker. In that case the line information represents one of the multiple symbols. This field must be recomputed when the symbolization state of the profile changes.\n", + "name": "pprof.location.is_folded", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Free-form text associated with the profile. This field should not be used to store any machine-readable information, it is only for human-friendly content.\n", + "examples": [ + [ + "hello world", + "bazinga" + ] + ], + "name": "pprof.profile.comment", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "Attributes specific to pprof that help convert from pprof to Profiling signal.\n", + "id": "pprof", + "lineage": { + "attributes": { + "pprof.location.is_folded": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.pprof" + }, + "pprof.mapping.has_filenames": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.pprof" + }, + "pprof.mapping.has_functions": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.pprof" + }, + "pprof.mapping.has_inline_frames": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.pprof" + }, + "pprof.mapping.has_line_numbers": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.pprof" + }, + "pprof.profile.comment": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.pprof" + } + }, + "provenance": { + "path": "/home/weaver/source/pprof/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Process identifier (PID).\n", + "examples": [ + 1234 + ], + "name": "process.pid", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "int" + }, + { + "brief": "Parent Process identifier (PPID).\n", + "examples": [ + 111 + ], + "name": "process.parent_pid", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the process executable. On Linux based systems, this SHOULD be set to the base name of the target of `/proc/[pid]/exe`. On Windows, this SHOULD be set to the base name of `GetProcessImageFileNameW`.\n", + "examples": [ + "otelcol" + ], + "name": "process.executable.name", + "requirement_level": { + "conditionally_required": "See [Selecting process attributes](/docs/resource/process.md#selecting-process-attributes) for details." + }, + "role": "descriptive", + "stability": "development", + "type": "string" + }, + { + "brief": "The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`.\n", + "examples": [ + "/usr/bin/cmd/otelcol" + ], + "name": "process.executable.path", + "requirement_level": { + "conditionally_required": "See [Selecting process attributes](/docs/resource/process.md#selecting-process-attributes) for details." + }, + "role": "descriptive", + "stability": "development", + "type": "string" + }, + { + "brief": "The command used to launch the process (i.e. the command name). On Linux based systems, can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to the first parameter extracted from `GetCommandLineW`.\n", + "examples": [ + "cmd/otelcol" + ], + "name": "process.command", + "requirement_level": { + "conditionally_required": "See [Selecting process attributes](/docs/resource/process.md#selecting-process-attributes) for details." + }, + "role": "descriptive", + "stability": "development", + "type": "string" + }, + { + "brief": "The full command used to launch the process as a single string representing the full command. On Windows, can be set to the result of `GetCommandLineW`. Do not set this if you have to assemble it just for monitoring; use `process.command_args` instead. SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data.\n", + "examples": [ + "C:\\cmd\\otecol --config=\"my directory\\config.yaml\"" + ], + "name": "process.command_line", + "requirement_level": { + "conditionally_required": "See [Selecting process attributes](/docs/resource/process.md#selecting-process-attributes) for details." + }, + "role": "descriptive", + "stability": "development", + "type": "string" + }, + { + "brief": "All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`. SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data.\n", + "examples": [ + [ + "cmd/otecol", + "--config=config.yaml" + ] + ], + "name": "process.command_args", + "requirement_level": { + "conditionally_required": "See [Selecting process attributes](/docs/resource/process.md#selecting-process-attributes) for details." + }, + "role": "descriptive", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Length of the process.command_args array\n", + "examples": [ + 4 + ], + "name": "process.args_count", + "note": "This field can be useful for querying or performing bucket analysis on how many arguments were provided to start a process. More arguments may be an indication of suspicious activity.\n", + "requirement_level": { + "conditionally_required": "See [Selecting process attributes](/docs/resource/process.md#selecting-process-attributes) for details." + }, + "role": "descriptive", + "stability": "development", + "type": "int" + }, + { + "brief": "The date and time the process was created, in ISO 8601 format.\n", + "examples": [ + "2023-11-21T09:25:34.853Z" + ], + "name": "process.creation.time", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "string" + }, + { + "brief": "Whether the process is connected to an interactive shell.\n", + "name": "process.interactive", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Process title (proctitle)\n", + "examples": [ + "cat /etc/hostname", + "xfce4-session", + "bash" + ], + "name": "process.title", + "note": "In many Unix-like systems, process title (proctitle), is the string that represents the name or command line of a running process, displayed by system monitoring tools like ps, top, and htop.\n", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "development", + "type": "string" + }, + { + "brief": "The working directory of the process.\n", + "examples": [ + "/root" + ], + "name": "process.working_directory", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "development", + "type": "string" + }, + { + "brief": "The username of the user that owns the process.\n", + "examples": [ + "root" + ], + "name": "process.owner", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "development", + "type": "string" + }, + { + "brief": "The control group associated with the process.", + "examples": [ + "1:name=systemd:/user.slice/user-1000.slice/session-3.scope", + "0::/user.slice/user-1000.slice/user@1000.service/tmux-spawn-0267755b-4639-4a27-90ed-f19f88e53748.scope" + ], + "name": "process.linux.cgroup", + "note": "Control groups (cgroups) are a kernel feature used to organize and manage process resources. This attribute provides the path(s) to the cgroup(s) associated with the process, which should match the contents of the [/proc/\\[PID\\]/cgroup](https://man7.org/linux/man-pages/man7/cgroups.7.html) file.\n", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "development", + "type": "string" + } + ], + "brief": "An operating system process.\n", + "id": "entity.process", + "lineage": { + "attributes": { + "process.args_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.process" + }, + "process.command": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.process" + }, + "process.command_args": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.process" + }, + "process.command_line": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.process" + }, + "process.creation.time": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + }, + "process.executable.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.process" + }, + "process.executable.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.process" + }, + "process.interactive": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + }, + "process.linux.cgroup": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process.linux" + }, + "process.owner": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + }, + "process.parent_pid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + }, + "process.pid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + }, + "process.title": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + }, + "process.working_directory": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + } + }, + "provenance": { + "path": "/home/weaver/source/process/entities.yaml", + "registry_id": "main" + } + }, + "name": "process", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the runtime of this process.\n", + "examples": [ + "OpenJDK Runtime Environment" + ], + "name": "process.runtime.name", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "string" + }, + { + "brief": "The version of the runtime of this process, as returned by the runtime without modification.\n", + "examples": "14.0.2", + "name": "process.runtime.version", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "string" + }, + { + "brief": "An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment.\n", + "examples": "Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0", + "name": "process.runtime.description", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "development", + "type": "string" + } + ], + "brief": "The single (language) runtime instance which is monitored.\n", + "id": "entity.process.runtime", + "lineage": { + "attributes": { + "process.runtime.description": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + }, + "process.runtime.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + }, + "process.runtime.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.process" + } + }, + "provenance": { + "path": "/home/weaver/source/process/entities.yaml", + "registry_id": "main" + } + }, + "name": "process.runtime", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "A unique id to identify a session.", + "examples": "00112233-4455-6677-8899-aabbccddeeff", + "name": "session.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The previous `session.id` for this user, when known.", + "examples": "00112233-4455-6677-8899-aabbccddeeff", + "name": "session.previous_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Session is defined as the period of time encompassing all activities performed by the application and the actions executed by the end user.\nConsequently, a Session is represented as a collection of Logs, Events, and Spans emitted by the Client Application throughout the Session\u0027s duration. Each Session is assigned a unique identifier, which is included as an attribute in the Logs, Events, and Spans generated during the Session\u0027s lifecycle.\nWhen a session reaches end of life, typically due to user inactivity or session timeout, a new session identifier will be assigned. The previous session identifier may be provided by the instrumentation so that telemetry backends can link the two sessions.\n", + "display_name": "Session Attributes", + "id": "registry.session", + "lineage": { + "provenance": { + "path": "/home/weaver/source/session/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component\n", + "examples": [ + "SemConv" + ], + "name": "url.fragment", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\n", + "examples": [ + "/search" + ], + "name": "url.path", + "note": "Sensitive content provided in `url.path` SHOULD be scrubbed when instrumentations can identify it.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "https", + "ftp", + "telnet" + ], + "name": "url.scheme", + "requirement_level": "recommended", + "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\nis not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`.\nIn such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed).\n\nSensitive content provided in `url.full` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the\nvalue `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`https://www.example.com/path?color=blue\u0026sig=REDACTED`.\n", + "requirement_level": "recommended", + "stability": "stable", + "tag": "sensitive-information", + "type": "string" + }, + { + "brief": "The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\n", + "examples": [ + "q=OpenTelemetry" + ], + "name": "url.query", + "note": "Sensitive content provided in `url.query` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the value `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`q=OpenTelemetry\u0026sig=REDACTED`.\n", + "requirement_level": "recommended", + "stability": "stable", + "tag": "sensitive-information", + "type": "string" + } + ], + "brief": "Attributes describing URL.", + "id": "url", + "lineage": { + "attributes": { + "url.fragment": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.url" + }, + "url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "tag" + ], + "source_group": "registry.url" + }, + "url.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.url" + }, + "url.query": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "tag" + ], + "source_group": "registry.url" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/url/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `azure.service.request.id` instead.", + "deprecated": { + "note": "Replaced by `azure.service.request.id`.", + "reason": "renamed", + "renamed_to": "azure.service.request.id" + }, + "examples": [ + "00000000-0000-0000-0000-000000000000" + ], + "name": "az.service_request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [Fully Qualified Azure Resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) the log is emitted for.", + "examples": [ + "arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function", + "//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID", + "/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e" + ], + "name": "cloud.resource_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "body": { + "id": "az.resource.log", + "requirement_level": "recommended", + "stability": "development", + "type": "undefined" + }, + "brief": "Deprecated. Use `azure.resource.log` instead.\n", + "deprecated": { + "note": "Replaced by `azure.resource.log`.", + "reason": "renamed", + "renamed_to": "azure.resource.log" + }, + "id": "event.az.resource.log", + "lineage": { + "attributes": { + "az.service_request_id": { + "inherited_fields": [ + "brief", + "deprecated", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.azure.deprecated" + }, + "cloud.resource_id": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note" + ], + "source_group": "registry.cloud" + } + }, + "provenance": { + "path": "/home/weaver/source/azure/deprecated/events-deprecated.yaml", + "registry_id": "main" + } + }, + "name": "az.resource.log", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "Name of the cloud provider.\n", + "name": "cloud.provider", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Alibaba Cloud", + "id": "alibaba_cloud", + "stability": "development", + "value": "alibaba_cloud" + }, + { + "brief": "Amazon Web Services", + "id": "aws", + "stability": "development", + "value": "aws" + }, + { + "brief": "Microsoft Azure", + "id": "azure", + "stability": "development", + "value": "azure" + }, + { + "brief": "Google Cloud Platform", + "id": "gcp", + "stability": "development", + "value": "gcp" + }, + { + "brief": "Heroku Platform as a Service", + "id": "heroku", + "stability": "development", + "value": "heroku" + }, + { + "brief": "IBM Cloud", + "id": "ibm_cloud", + "stability": "development", + "value": "ibm_cloud" + }, + { + "brief": "Oracle Cloud Infrastructure (OCI)", + "id": "oracle_cloud", + "stability": "development", + "value": "oracle_cloud" + }, + { + "brief": "Tencent Cloud", + "id": "tencent_cloud", + "stability": "development", + "value": "tencent_cloud" + } + ] + } + }, + { + "brief": "The cloud account ID the resource is assigned to.\n", + "examples": [ + "111111111111", + "opentelemetry" + ], + "name": "cloud.account.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The geographical region within a cloud provider. When associated with a resource, this attribute specifies the region where the resource operates. When calling services or APIs deployed on a cloud, this attribute identifies the region where the called destination is deployed.\n", + "examples": [ + "us-central1", + "us-east-1" + ], + "name": "cloud.region", + "note": "Refer to your provider\u0027s docs to see the available regions, for example [Alibaba Cloud regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), [Azure regions](https://azure.microsoft.com/global-infrastructure/geographies/), [Google Cloud regions](https://cloud.google.com/about/locations), or [Tencent Cloud regions](https://www.tencentcloud.com/document/product/213/6091).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Cloud provider-specific native identifier of the monitored cloud resource (e.g. an [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) on AWS, a [fully qualified resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) on Azure, a [full resource name](https://google.aip.dev/122#full-resource-names) on GCP)\n", + "examples": [ + "arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function", + "//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID", + "/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e" + ], + "name": "cloud.resource_id", + "note": "On some cloud providers, it may not be possible to determine the full ID at startup,\nso it may be necessary to set `cloud.resource_id` as a span attribute instead.\n\nThe exact value to use for `cloud.resource_id` depends on the cloud provider.\nThe following well-known definitions MUST be used if you set this attribute and they apply:\n\n- **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).\n Take care not to use the \"invoked ARN\" directly but replace any\n [alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)\n with the resolved function version, as the same runtime instance may be invocable with\n multiple different aliases.\n- **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names)\n- **Azure:** The [Fully Qualified Resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) of the invoked function,\n *not* the function app, having the form\n `/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e`.\n This means that a span attribute MUST be used, as an Azure function app can host multiple functions that would usually share\n a TracerProvider.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Cloud regions often have multiple, isolated locations known as zones to increase availability. Availability zone represents the zone where the resource is running.\n", + "examples": [ + "us-east-1c" + ], + "name": "cloud.availability_zone", + "note": "Availability zones are called \"zones\" on Alibaba Cloud and Google Cloud.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The cloud platform in use.\n", + "name": "cloud.platform", + "note": "The prefix of the service SHOULD match the one specified in `cloud.provider`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Alibaba Cloud Elastic Compute Service", + "id": "alibaba_cloud_ecs", + "stability": "development", + "value": "alibaba_cloud_ecs" + }, + { + "brief": "Alibaba Cloud Function Compute", + "id": "alibaba_cloud_fc", + "stability": "development", + "value": "alibaba_cloud_fc" + }, + { + "brief": "Red Hat OpenShift on Alibaba Cloud", + "id": "alibaba_cloud_openshift", + "stability": "development", + "value": "alibaba_cloud_openshift" + }, + { + "brief": "AWS Elastic Compute Cloud", + "id": "aws_ec2", + "stability": "development", + "value": "aws_ec2" + }, + { + "brief": "AWS Elastic Container Service", + "id": "aws_ecs", + "stability": "development", + "value": "aws_ecs" + }, + { + "brief": "AWS Elastic Kubernetes Service", + "id": "aws_eks", + "stability": "development", + "value": "aws_eks" + }, + { + "brief": "AWS Lambda", + "id": "aws_lambda", + "stability": "development", + "value": "aws_lambda" + }, + { + "brief": "AWS Elastic Beanstalk", + "id": "aws_elastic_beanstalk", + "stability": "development", + "value": "aws_elastic_beanstalk" + }, + { + "brief": "AWS App Runner", + "id": "aws_app_runner", + "stability": "development", + "value": "aws_app_runner" + }, + { + "brief": "Red Hat OpenShift on AWS (ROSA)", + "id": "aws_openshift", + "stability": "development", + "value": "aws_openshift" + }, + { + "brief": "Azure Virtual Machines", + "id": "azure.vm", + "stability": "development", + "value": "azure.vm" + }, + { + "brief": "Azure Container Apps", + "id": "azure.container_apps", + "stability": "development", + "value": "azure.container_apps" + }, + { + "brief": "Azure Container Instances", + "id": "azure.container_instances", + "stability": "development", + "value": "azure.container_instances" + }, + { + "brief": "Azure Kubernetes Service", + "id": "azure.aks", + "stability": "development", + "value": "azure.aks" + }, + { + "brief": "Azure Functions", + "id": "azure.functions", + "stability": "development", + "value": "azure.functions" + }, + { + "brief": "Azure App Service", + "id": "azure.app_service", + "stability": "development", + "value": "azure.app_service" + }, + { + "brief": "Azure Red Hat OpenShift", + "id": "azure.openshift", + "stability": "development", + "value": "azure.openshift" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Virtual Machines", + "deprecated": { + "note": "Replaced by `azure.vm`.", + "reason": "renamed", + "renamed_to": "azure.vm" + }, + "id": "azure_vm", + "stability": "development", + "value": "azure_vm" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Container Apps", + "deprecated": { + "note": "Replaced by `azure.container_apps`.", + "reason": "renamed", + "renamed_to": "azure.container_apps" + }, + "id": "azure_container_apps", + "stability": "development", + "value": "azure_container_apps" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Container Instances", + "deprecated": { + "note": "Replaced by `azure.container_instances`.", + "reason": "renamed", + "renamed_to": "azure.container_instances" + }, + "id": "azure_container_instances", + "stability": "development", + "value": "azure_container_instances" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Kubernetes Service", + "deprecated": { + "note": "Replaced by `azure.aks`.", + "reason": "renamed", + "renamed_to": "azure.aks" + }, + "id": "azure_aks", + "stability": "development", + "value": "azure_aks" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Functions", + "deprecated": { + "note": "Replaced by `azure.functions`.", + "reason": "renamed", + "renamed_to": "azure.functions" + }, + "id": "azure_functions", + "stability": "development", + "value": "azure_functions" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure App Service", + "deprecated": { + "note": "Replaced by `azure.app_service`.", + "reason": "renamed", + "renamed_to": "azure.app_service" + }, + "id": "azure_app_service", + "stability": "development", + "value": "azure_app_service" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Red Hat OpenShift", + "deprecated": { + "note": "Replaced by `azure.openshift`.", + "reason": "renamed", + "renamed_to": "azure.openshift" + }, + "id": "azure_openshift", + "stability": "development", + "value": "azure_openshift" + }, + { + "brief": "Google Vertex AI Agent Engine", + "id": "gcp.agent_engine", + "stability": "development", + "value": "gcp.agent_engine" + }, + { + "brief": "Google Bare Metal Solution (BMS)", + "id": "gcp_bare_metal_solution", + "stability": "development", + "value": "gcp_bare_metal_solution" + }, + { + "brief": "Google Cloud Compute Engine (GCE)", + "id": "gcp_compute_engine", + "stability": "development", + "value": "gcp_compute_engine" + }, + { + "brief": "Google Cloud Run", + "id": "gcp_cloud_run", + "stability": "development", + "value": "gcp_cloud_run" + }, + { + "brief": "Google Cloud Kubernetes Engine (GKE)", + "id": "gcp_kubernetes_engine", + "stability": "development", + "value": "gcp_kubernetes_engine" + }, + { + "brief": "Google Cloud Functions (GCF)", + "id": "gcp_cloud_functions", + "stability": "development", + "value": "gcp_cloud_functions" + }, + { + "brief": "Google Cloud App Engine (GAE)", + "id": "gcp_app_engine", + "stability": "development", + "value": "gcp_app_engine" + }, + { + "brief": "Red Hat OpenShift on Google Cloud", + "id": "gcp_openshift", + "stability": "development", + "value": "gcp_openshift" + }, + { + "brief": "Red Hat OpenShift on IBM Cloud", + "id": "ibm_cloud_openshift", + "stability": "development", + "value": "ibm_cloud_openshift" + }, + { + "brief": "Compute on Oracle Cloud Infrastructure (OCI)", + "id": "oracle_cloud_compute", + "stability": "development", + "value": "oracle_cloud_compute" + }, + { + "brief": "Kubernetes Engine (OKE) on Oracle Cloud Infrastructure (OCI)", + "id": "oracle_cloud_oke", + "stability": "development", + "value": "oracle_cloud_oke" + }, + { + "brief": "Tencent Cloud Cloud Virtual Machine (CVM)", + "id": "tencent_cloud_cvm", + "stability": "development", + "value": "tencent_cloud_cvm" + }, + { + "brief": "Tencent Cloud Elastic Kubernetes Service (EKS)", + "id": "tencent_cloud_eks", + "stability": "development", + "value": "tencent_cloud_eks" + }, + { + "brief": "Tencent Cloud Serverless Cloud Function (SCF)", + "id": "tencent_cloud_scf", + "stability": "development", + "value": "tencent_cloud_scf" + } + ] + } + } + ], + "brief": "A cloud environment (e.g. GCP, Azure, AWS).\n", + "display_name": "Cloud Attributes", + "id": "registry.cloud", + "lineage": { + "provenance": { + "path": "/home/weaver/source/cloud/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "A guid or another name describing the event source.\n", + "examples": [ + "cf/gorouter" + ], + "name": "cloudfoundry.system.id", + "note": "CloudFoundry defines the `source_id` in the [Loggregator v2 envelope](https://github.com/cloudfoundry/loggregator-api#v2-envelope).\nIt is used for logs and metrics emitted by CloudFoundry. It is\nsupposed to contain the component name, e.g. \"gorouter\", for\nCloudFoundry components.\n\nWhen system components are instrumented, values from the\n[Bosh spec](https://bosh.io/docs/jobs/#properties-spec)\nshould be used. The `system.id` should be set to\n`spec.deployment/spec.name`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A guid describing the concrete instance of the event source.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.system.instance.id", + "note": "CloudFoundry defines the `instance_id` in the [Loggregator v2 envelope](https://github.com/cloudfoundry/loggregator-api#v2-envelope).\nIt is used for logs and metrics emitted by CloudFoundry. It is\nsupposed to contain the vm id for CloudFoundry components.\n\nWhen system components are instrumented, values from the\n[Bosh spec](https://bosh.io/docs/jobs/#properties-spec)\nshould be used. The `system.instance.id` should be set to `spec.id`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the application.\n", + "examples": [ + "my-app-name" + ], + "name": "cloudfoundry.app.name", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.application_name`. This is the same value\nas reported by `cf apps`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The guid of the application.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.app.id", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.application_id`. This is the same value as\nreported by `cf app \u003capp-name\u003e --guid`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The index of the application instance. 0 when just one instance is active.\n", + "examples": [ + "0", + "1" + ], + "name": "cloudfoundry.app.instance.id", + "note": "CloudFoundry defines the `instance_id` in the [Loggregator v2 envelope](https://github.com/cloudfoundry/loggregator-api#v2-envelope).\nIt is used for logs and metrics emitted by CloudFoundry. It is\nsupposed to contain the application instance index for applications\ndeployed on the runtime.\n\nApplication instrumentation should use the value from environment\nvariable `CF_INSTANCE_INDEX`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the CloudFoundry space the application is running in.\n", + "examples": [ + "my-space-name" + ], + "name": "cloudfoundry.space.name", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.space_name`. This is the same value as\nreported by `cf spaces`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The guid of the CloudFoundry space the application is running in.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.space.id", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.space_id`. This is the same value as\nreported by `cf space \u003cspace-name\u003e --guid`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the CloudFoundry organization the app is running in.\n", + "examples": [ + "my-org-name" + ], + "name": "cloudfoundry.org.name", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.org_name`. This is the same value as\nreported by `cf orgs`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The guid of the CloudFoundry org the application is running in.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.org.id", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.org_id`. This is the same value as\nreported by `cf org \u003corg-name\u003e --guid`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The UID identifying the process.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.process.id", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.process_id`. It is supposed to be equal to\n`VCAP_APPLICATION.app_id` for applications deployed to the runtime.\nFor system components, this could be the actual PID.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of process.\n", + "examples": [ + "web" + ], + "name": "cloudfoundry.process.type", + "note": "CloudFoundry applications can consist of multiple jobs. Usually the\nmain process will be of type `web`. There can be additional background\ntasks or side-cars with different process types.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "CloudFoundry resource attributes.\n", + "display_name": "CloudFoundry Attributes", + "id": "registry.cloudfoundry", + "lineage": { + "provenance": { + "path": "/home/weaver/source/cloudfoundry/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the garbage collector managed heap generation.", + "examples": [ + "gen0", + "gen1", + "gen2" + ], + "name": "dotnet.gc.heap.generation", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "gen0", + "stability": "stable", + "value": "gen0" + }, + { + "brief": "Generation 1", + "id": "gen1", + "stability": "stable", + "value": "gen1" + }, + { + "brief": "Generation 2", + "id": "gen2", + "stability": "stable", + "value": "gen2" + }, + { + "brief": "Large Object Heap", + "id": "loh", + "stability": "stable", + "value": "loh" + }, + { + "brief": "Pinned Object Heap", + "id": "poh", + "stability": "stable", + "value": "poh" + } + ] + } + } + ], + "brief": "This document defines .NET related attributes.\n", + "display_name": ".NET Attributes", + "id": "registry.dotnet", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "This group describes GenAI metrics attributes", + "id": "metric_attributes.gen_ai", + "lineage": { + "attributes": { + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI service,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "This group describes GenAI server metrics attributes", + "id": "metric_attributes.gen_ai.server", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The service tier used for the response.", + "examples": [ + "scale", + "default" + ], + "name": "openai.response.service_tier", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A fingerprint to track any eventual change in the Generative AI environment.", + "examples": [ + "fp_44709d6fcb" + ], + "name": "openai.response.system_fingerprint", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This group describes GenAI server metrics attributes", + "id": "metric_attributes.openai", + "lineage": { + "attributes": { + "openai.response.service_tier": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.openai" + }, + "openai.response.system_fingerprint": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.openai" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + }, + { + "brief": "The type of token being counted.", + "examples": [ + "input", + "output" + ], + "name": "gen_ai.token.type", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Input tokens (prompt, input, etc.)", + "id": "input", + "stability": "development", + "value": "input" + }, + { + "brief": "Output tokens (completion, response, etc.)", + "deprecated": { + "note": "Replaced by `output`.", + "reason": "renamed", + "renamed_to": "output" + }, + "id": "completion", + "stability": "development", + "value": "output" + }, + { + "brief": "Output tokens (completion, response, etc.)", + "id": "output", + "stability": "development", + "value": "output" + } + ] + } + } + ], + "brief": "Number of input and output tokens used.", + "id": "metric.gen_ai.client.token.usage", + "instrument": "histogram", + "lineage": { + "attributes": { + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.token.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "gen_ai.client.token.usage", + "stability": "development", + "type": "metric", + "unit": "{token}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "GenAI operation duration.", + "id": "metric.gen_ai.client.operation.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "gen_ai.client.operation.duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI service,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "Generative AI server request duration such as time-to-last byte or last output token.", + "id": "metric.gen_ai.server.request.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "gen_ai.server.request.duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "Time per output token generated after the first token for successful responses.", + "id": "metric.gen_ai.server.time_per_output_token", + "instrument": "histogram", + "lineage": { + "attributes": { + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "gen_ai.server.time_per_output_token", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "Time to generate first token for successful responses.", + "id": "metric.gen_ai.server.time_to_first_token", + "instrument": "histogram", + "lineage": { + "attributes": { + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "gen_ai.server.time_to_first_token", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for power supply metrics\n", + "id": "metric_attributes.hw.power_supply", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/power-supply-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of limit for hardware components\n", + "examples": [ + "max", + "critical", + "throttled" + ], + "name": "hw.limit_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Critical", + "id": "critical", + "stability": "development", + "value": "critical" + }, + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "High Critical", + "id": "high_critical", + "stability": "development", + "value": "high.critical" + }, + { + "brief": "High Degraded", + "id": "high_degraded", + "stability": "development", + "value": "high.degraded" + }, + { + "brief": "Low Critical", + "id": "low_critical", + "stability": "development", + "value": "low.critical" + }, + { + "brief": "Low Degraded", + "id": "low_degraded", + "stability": "development", + "value": "low.degraded" + }, + { + "brief": "Maximum", + "id": "max", + "stability": "development", + "value": "max" + }, + { + "brief": "Throttled", + "id": "throttled", + "stability": "development", + "value": "throttled" + }, + { + "brief": "Turbo", + "id": "turbo", + "stability": "development", + "value": "turbo" + } + ] + } + } + ], + "brief": "Maximum power output of the power supply.", + "id": "metric.hw.power_supply.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.limit_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/power-supply-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.power_supply.limit", + "stability": "development", + "type": "metric", + "unit": "W" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Utilization of the power supply as a fraction of its maximum output.", + "id": "metric.hw.power_supply.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/power-supply-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.power_supply.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Current power output of the power supply.", + "id": "metric.hw.power_supply.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/power-supply-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.power_supply.usage", + "stability": "development", + "type": "metric", + "unit": "W" + }, + { + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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": "Describes JVM memory metric attributes.", + "id": "attributes.jvm.memory", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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.", + "id": "metric.jvm.memory.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.memory.used", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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.", + "id": "metric.jvm.memory.committed", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.memory.committed", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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.", + "id": "metric.jvm.memory.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.memory.limit", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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.", + "id": "metric.jvm.memory.used_after_last_gc", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.memory.used_after_last_gc", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "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": "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 cause.", + "examples": [ + "System.gc()", + "Allocation Failure" + ], + "name": "jvm.gc.cause", + "note": "Garbage collector cause is generally obtained via [GarbageCollectionNotificationInfo#getGcCause()](https://docs.oracle.com/en/java/javase/11/docs/api/jdk.management/com/sun/management/GarbageCollectionNotificationInfo.html#getGcCause()).\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "Duration of JVM garbage collection actions.", + "id": "metric.jvm.gc.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "jvm.gc.action": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.gc.cause": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.gc.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.gc.duration", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "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": { + "members": [ + { + "brief": "A thread that has not yet started is in this state.", + "id": "new", + "stability": "stable", + "value": "new" + }, + { + "brief": "A thread executing in the Java virtual machine is in this state.", + "id": "runnable", + "stability": "stable", + "value": "runnable" + }, + { + "brief": "A thread that is blocked waiting for a monitor lock is in this state.", + "id": "blocked", + "stability": "stable", + "value": "blocked" + }, + { + "brief": "A thread that is waiting indefinitely for another thread to perform a particular action is in this state.", + "id": "waiting", + "stability": "stable", + "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.", + "id": "timed_waiting", + "stability": "stable", + "value": "timed_waiting" + }, + { + "brief": "A thread that has exited is in this state.", + "id": "terminated", + "stability": "stable", + "value": "terminated" + } + ] + } + } + ], + "brief": "Number of executing platform threads.", + "id": "metric.jvm.thread.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.thread.daemon": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.thread.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.thread.count", + "stability": "stable", + "type": "metric", + "unit": "{thread}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of classes loaded since JVM start.", + "id": "metric.jvm.class.loaded", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.class.loaded", + "stability": "stable", + "type": "metric", + "unit": "{class}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of classes unloaded since JVM start.", + "id": "metric.jvm.class.unloaded", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.class.unloaded", + "stability": "stable", + "type": "metric", + "unit": "{class}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of classes currently loaded.", + "id": "metric.jvm.class.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.class.count", + "stability": "stable", + "type": "metric", + "unit": "{class}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of processors available to the Java virtual machine.", + "id": "metric.jvm.cpu.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.cpu.count", + "stability": "stable", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "CPU time used by the process as reported by the JVM.", + "id": "metric.jvm.cpu.time", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.cpu.time", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Recent CPU utilization for the process as reported by the JVM.", + "id": "metric.jvm.cpu.recent_utilization", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.cpu.recent_utilization", + "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", + "stability": "stable", + "type": "metric", + "unit": "1" + }, + { + "attributes": [ + { + "brief": "Deprecated. Use the `otel.scope.name` attribute", + "deprecated": { + "note": "Replaced by `otel.scope.name`.", + "reason": "renamed", + "renamed_to": "otel.scope.name" + }, + "examples": [ + "io.opentelemetry.contrib.mongodb" + ], + "name": "otel.library.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated. Use the `otel.scope.version` attribute.", + "deprecated": { + "note": "Replaced by `otel.scope.version`.", + "reason": "renamed", + "renamed_to": "otel.scope.version" + }, + "examples": [ + "1.0.0" + ], + "name": "otel.library.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated otel.library attributes.", + "display_name": "Deprecated OTel Library Attributes", + "id": "registry.otel.library.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The [error codes](https://connectrpc.com//docs/protocol/#error-codes) of the Connect request. Error codes are always string values.", + "name": "rpc.connect_rpc.error_code", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "cancelled", + "stability": "development", + "value": "cancelled" + }, + { + "id": "unknown", + "stability": "development", + "value": "unknown" + }, + { + "id": "invalid_argument", + "stability": "development", + "value": "invalid_argument" + }, + { + "id": "deadline_exceeded", + "stability": "development", + "value": "deadline_exceeded" + }, + { + "id": "not_found", + "stability": "development", + "value": "not_found" + }, + { + "id": "already_exists", + "stability": "development", + "value": "already_exists" + }, + { + "id": "permission_denied", + "stability": "development", + "value": "permission_denied" + }, + { + "id": "resource_exhausted", + "stability": "development", + "value": "resource_exhausted" + }, + { + "id": "failed_precondition", + "stability": "development", + "value": "failed_precondition" + }, + { + "id": "aborted", + "stability": "development", + "value": "aborted" + }, + { + "id": "out_of_range", + "stability": "development", + "value": "out_of_range" + }, + { + "id": "unimplemented", + "stability": "development", + "value": "unimplemented" + }, + { + "id": "internal", + "stability": "development", + "value": "internal" + }, + { + "id": "unavailable", + "stability": "development", + "value": "unavailable" + }, + { + "id": "data_loss", + "stability": "development", + "value": "data_loss" + }, + { + "id": "unauthenticated", + "stability": "development", + "value": "unauthenticated" + } + ] + } + }, + { + "brief": "Connect request metadata, `\u003ckey\u003e` being the normalized Connect Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "1.2.3.4", + "1.2.3.5" + ] + ], + "name": "rpc.connect_rpc.request.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all request metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `[\"1.2.3.4\", \"1.2.3.5\"]` SHOULD be recorded as\nthe `rpc.connect_rpc.request.metadata.my-custom-key` attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]`\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "Connect response metadata, `\u003ckey\u003e` being the normalized Connect Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "attribute_value" + ] + ], + "name": "rpc.connect_rpc.response.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all response metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `\"attribute_value\"` SHOULD be recorded as\nthe `rpc.connect_rpc.response.metadata.my-custom-key` attribute with value `[\"attribute_value\"]`\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.", + "name": "rpc.grpc.status_code", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "OK", + "id": "ok", + "stability": "development", + "value": 0 + }, + { + "brief": "CANCELLED", + "id": "cancelled", + "stability": "development", + "value": 1 + }, + { + "brief": "UNKNOWN", + "id": "unknown", + "stability": "development", + "value": 2 + }, + { + "brief": "INVALID_ARGUMENT", + "id": "invalid_argument", + "stability": "development", + "value": 3 + }, + { + "brief": "DEADLINE_EXCEEDED", + "id": "deadline_exceeded", + "stability": "development", + "value": 4 + }, + { + "brief": "NOT_FOUND", + "id": "not_found", + "stability": "development", + "value": 5 + }, + { + "brief": "ALREADY_EXISTS", + "id": "already_exists", + "stability": "development", + "value": 6 + }, + { + "brief": "PERMISSION_DENIED", + "id": "permission_denied", + "stability": "development", + "value": 7 + }, + { + "brief": "RESOURCE_EXHAUSTED", + "id": "resource_exhausted", + "stability": "development", + "value": 8 + }, + { + "brief": "FAILED_PRECONDITION", + "id": "failed_precondition", + "stability": "development", + "value": 9 + }, + { + "brief": "ABORTED", + "id": "aborted", + "stability": "development", + "value": 10 + }, + { + "brief": "OUT_OF_RANGE", + "id": "out_of_range", + "stability": "development", + "value": 11 + }, + { + "brief": "UNIMPLEMENTED", + "id": "unimplemented", + "stability": "development", + "value": 12 + }, + { + "brief": "INTERNAL", + "id": "internal", + "stability": "development", + "value": 13 + }, + { + "brief": "UNAVAILABLE", + "id": "unavailable", + "stability": "development", + "value": 14 + }, + { + "brief": "DATA_LOSS", + "id": "data_loss", + "stability": "development", + "value": 15 + }, + { + "brief": "UNAUTHENTICATED", + "id": "unauthenticated", + "stability": "development", + "value": 16 + } + ] + } + }, + { + "brief": "gRPC request metadata, `\u003ckey\u003e` being the normalized gRPC Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "1.2.3.4", + "1.2.3.5" + ] + ], + "name": "rpc.grpc.request.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all request metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `[\"1.2.3.4\", \"1.2.3.5\"]` SHOULD be recorded as\n`rpc.grpc.request.metadata.my-custom-key` attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]`\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "gRPC response metadata, `\u003ckey\u003e` being the normalized gRPC Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "attribute_value" + ] + ], + "name": "rpc.grpc.response.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all response metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `[\"attribute_value\"]` SHOULD be recorded as\nthe `rpc.grpc.response.metadata.my-custom-key` attribute with value `[\"attribute_value\"]`\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "`error.code` property of response if it is an error response.", + "examples": [ + -32700, + 100 + ], + "name": "rpc.jsonrpc.error_code", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "`error.message` property of response if it is an error response.", + "examples": [ + "Parse error", + "User already exists" + ], + "name": "rpc.jsonrpc.error_message", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "`id` property of request or response. Since protocol allows id to be int, string, `null` or missing (for notifications), value is expected to be cast to string for simplicity. Use empty string in case of `null` value. Omit entirely if this is a notification.\n", + "examples": [ + "10", + "request-7", + "" + ], + "name": "rpc.jsonrpc.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Protocol version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 doesn\u0027t specify this, the value can be omitted.", + "examples": [ + "2.0", + "1.0" + ], + "name": "rpc.jsonrpc.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "Whether this is a received or sent message.", + "name": "rpc.message.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "sent", + "stability": "development", + "value": "SENT" + }, + { + "id": "received", + "stability": "development", + "value": "RECEIVED" + } + ] + } + }, + { + "brief": "MUST be calculated as two different counters starting from `1` one for sent messages and one for received message.", + "name": "rpc.message.id", + "note": "This way we guarantee that the values will be consistent between different implementations.", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Compressed size of the message in bytes.", + "name": "rpc.message.compressed_size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Uncompressed size of the message in bytes.", + "name": "rpc.message.uncompressed_size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "This document defines attributes for remote procedure calls.", + "display_name": "Remote Procedure Call (RPC) Attributes", + "id": "registry.rpc", + "lineage": { + "provenance": { + "path": "/home/weaver/source/rpc/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the space type of heap memory.", + "name": "v8js.heap.space.name", + "note": "Value can be retrieved from value `space_name` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "New memory space.", + "id": "new_space", + "stability": "development", + "value": "new_space" + }, + { + "brief": "Old memory space.", + "id": "old_space", + "stability": "development", + "value": "old_space" + }, + { + "brief": "Code memory space.", + "id": "code_space", + "stability": "development", + "value": "code_space" + }, + { + "brief": "Map memory space.", + "id": "map_space", + "stability": "development", + "value": "map_space" + }, + { + "brief": "Large object memory space.", + "id": "large_object_space", + "stability": "development", + "value": "large_object_space" + } + ] + } + } + ], + "brief": "Deprecated, use `v8js.memory.heap.space.available_size` instead.", + "deprecated": { + "note": "Replaced by `v8js.memory.heap.space.available_size`.", + "reason": "renamed", + "renamed_to": "v8js.memory.heap.space.available_size" + }, + "id": "metric.v8js.heap.space.available_size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "v8js.heap.space.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.v8js" + } + }, + "provenance": { + "path": "/home/weaver/source/v8js/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "v8js.heap.space.available_size", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the space type of heap memory.", + "name": "v8js.heap.space.name", + "note": "Value can be retrieved from value `space_name` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "New memory space.", + "id": "new_space", + "stability": "development", + "value": "new_space" + }, + { + "brief": "Old memory space.", + "id": "old_space", + "stability": "development", + "value": "old_space" + }, + { + "brief": "Code memory space.", + "id": "code_space", + "stability": "development", + "value": "code_space" + }, + { + "brief": "Map memory space.", + "id": "map_space", + "stability": "development", + "value": "map_space" + }, + { + "brief": "Large object memory space.", + "id": "large_object_space", + "stability": "development", + "value": "large_object_space" + } + ] + } + } + ], + "brief": "Deprecated, use `v8js.memory.heap.space.physical_size` instead.", + "deprecated": { + "note": "Replaced by `v8js.memory.heap.space.physical_size`.", + "reason": "renamed", + "renamed_to": "v8js.memory.heap.space.physical_size" + }, + "id": "metric.v8js.heap.space.physical_size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "v8js.heap.space.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.v8js" + } + }, + "provenance": { + "path": "/home/weaver/source/v8js/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "v8js.heap.space.physical_size", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "attributes": [ + { + "brief": "A unique identifier representing the installation of an application on a specific device\n", + "examples": [ + "2ab2916d-a51f-4ac8-80ee-45ac31a28092" + ], + "name": "app.installation.id", + "note": "Its value SHOULD persist across launches of the same application installation, including through application upgrades.\nIt SHOULD change if the application is uninstalled or if all applications of the vendor are uninstalled.\nAdditionally, users might be able to reset this value (e.g. by clearing application data).\nIf an app is installed multiple times on the same device (e.g. in different accounts on Android), each `app.installation.id` SHOULD have a different value.\nIf multiple OpenTelemetry SDKs are used within the same application, they SHOULD use the same value for `app.installation.id`.\nHardware IDs (e.g. serial number, IMEI, MAC address) MUST NOT be used as the `app.installation.id`.\n\nFor iOS, this value SHOULD be equal to the [vendor identifier](https://developer.apple.com/documentation/uikit/uidevice/identifierforvendor).\n\nFor Android, examples of `app.installation.id` implementations include:\n\n- [Firebase Installation ID](https://firebase.google.com/docs/projects/manage-installations).\n- A globally unique UUID which is persisted across sessions in your application.\n- [App set ID](https://developer.android.com/identity/app-set-id).\n- [`Settings.getString(Settings.Secure.ANDROID_ID)`](https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID).\n\nMore information about Android identifier best practices can be found in the [Android user data IDs guide](https://developer.android.com/training/articles/user-data-ids).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A number of frame renders that experienced jank.", + "examples": [ + 9, + 42 + ], + "name": "app.jank.frame_count", + "note": "Depending on platform limitations, the value provided MAY be approximation.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The minimum rendering threshold for this jank, in seconds.", + "examples": [ + 0.016, + 0.7, + 1.024 + ], + "name": "app.jank.threshold", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The time period, in seconds, for which this jank is being reported.", + "examples": [ + 1.0, + 5.0, + 10.24 + ], + "name": "app.jank.period", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The x (horizontal) coordinate of a screen coordinate, in screen pixels.", + "examples": [ + 0, + 131 + ], + "name": "app.screen.coordinate.x", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The y (vertical) component of a screen coordinate, in screen pixels.\n", + "examples": [ + 12, + 99 + ], + "name": "app.screen.coordinate.y", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "An identifier that uniquely differentiates this screen from other screens in the same application.\n", + "examples": [ + "f9bc787d-ff05-48ad-90e1-fca1d46130b3", + "com.example.app.MainActivity", + "com.example.shop.ProductDetailFragment", + "MyApp.ProfileView", + "MyApp.ProfileViewController" + ], + "name": "app.screen.id", + "note": "A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of an application screen.", + "examples": [ + "MainActivity", + "ProductDetailFragment", + "ProfileView", + "ProfileViewController" + ], + "name": "app.screen.name", + "note": "A screen represents only the part of the device display drawn by the app. It typically contains multiple widgets or UI components and is larger in scope than individual widgets. Multiple screens can coexist on the same display simultaneously (e.g., split view on tablets).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier that uniquely differentiates this widget from other widgets in the same application.\n", + "examples": [ + "f9bc787d-ff05-48ad-90e1-fca1d46130b3", + "submit_order_1829" + ], + "name": "app.widget.id", + "note": "A widget is an application component, typically an on-screen visual GUI element.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of an application widget.", + "examples": [ + "submit", + "attack", + "Clear Cart" + ], + "name": "app.widget.name", + "note": "A widget is an application component, typically an on-screen visual GUI element.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier for a particular build or compilation of the application.", + "examples": [ + "6cff0a7e-cefc-4668-96f5-1273d8b334d0", + "9f2b833506aa6973a92fde9733e6271f", + "my-app-1.0.0-code-123" + ], + "name": "app.build_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes attributes related to client-side applications (e.g. web apps or mobile apps).\n", + "display_name": "Application Attributes", + "id": "registry.app", + "lineage": { + "provenance": { + "path": "/home/weaver/source/app/registry.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The human readable name of the pipeline within a CI/CD system.\n", + "examples": [ + "Build and Test", + "Lint", + "Deploy Go Project", + "deploy_to_environment" + ], + "name": "cicd.pipeline.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A pipeline is a series of automated steps that helps software teams deliver code.\n", + "id": "entity.cicd.pipeline", + "lineage": { + "attributes": { + "cicd.pipeline.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cicd.pipeline" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/entities.yaml", + "registry_id": "main" + } + }, + "name": "cicd.pipeline", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The unique identifier of a pipeline run within a CI/CD system.\n", + "examples": [ + "120912" + ], + "name": "cicd.pipeline.run.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [URL](https://wikipedia.org/wiki/URL) of the pipeline run, providing the complete address in order to locate and identify the pipeline run.\n", + "examples": [ + "https://github.com/open-telemetry/semantic-conventions/actions/runs/9753949763?pr=1075" + ], + "name": "cicd.pipeline.run.url.full", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "A pipeline run is a singular execution of a given pipeline\u0027s tasks.\n", + "id": "entity.cicd.pipeline.run", + "lineage": { + "attributes": { + "cicd.pipeline.run.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.pipeline.run.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cicd.pipeline" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/entities.yaml", + "registry_id": "main" + } + }, + "name": "cicd.pipeline.run", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of a worker within a CICD system.", + "examples": [ + "agent-abc", + "controller", + "Ubuntu LTS" + ], + "name": "cicd.worker.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier of a worker within a CICD system.", + "examples": [ + "abc123", + "10.0.1.2", + "controller" + ], + "name": "cicd.worker.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The [URL](https://wikipedia.org/wiki/URL) of the worker, providing the complete address in order to locate and identify the worker.", + "examples": [ + "https://cicd.example.org/worker/abc123" + ], + "name": "cicd.worker.url.full", + "requirement_level": { + "recommended": "If available" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "A CICD worker is a component of the CICD system that performs work (eg. running pipeline tasks or performing sync).\nA single pipeline run may be distributed across multiple workers. Any OpenTelemetry signal associated with a worker should be associated to the worker that performed the corresponding work.\nFor example, when a pipeline run involves several workers, its task run spans may reference the different `cicd.worker` resources corresponding to the workers that executed each task run. The pipeline run\u0027s parent span may instead reference the CICD controller as the `cicd.worker` resource.\n", + "id": "entity.cicd.worker", + "lineage": { + "attributes": { + "cicd.worker.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.worker.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.worker.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/entities.yaml", + "registry_id": "main" + } + }, + "name": "cicd.worker", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Cloud provider-specific native identifier of the monitored cloud resource (e.g. an [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) on AWS, a [fully qualified resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) on Azure, a [full resource name](https://google.aip.dev/122#full-resource-names) on GCP)\n", + "examples": [ + "arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function", + "//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID", + "/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e" + ], + "name": "cloud.resource_id", + "note": "On some cloud providers, it may not be possible to determine the full ID at startup,\nso it may be necessary to set `cloud.resource_id` as a span attribute instead.\n\nThe exact value to use for `cloud.resource_id` depends on the cloud provider.\nThe following well-known definitions MUST be used if you set this attribute and they apply:\n\n- **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).\n Take care not to use the \"invoked ARN\" directly but replace any\n [alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)\n with the resolved function version, as the same runtime instance may be invocable with\n multiple different aliases.\n- **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names)\n- **Azure:** The [Fully Qualified Resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) of the invoked function,\n *not* the function app, having the form\n `/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e`.\n This means that a span attribute MUST be used, as an Azure function app can host multiple functions that would usually share\n a TracerProvider.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The immutable version of the function being executed.", + "examples": [ + "26", + "pinkfroid-00002" + ], + "name": "faas.version", + "note": "Depending on the cloud provider and platform, use:\n\n- **AWS Lambda:** The [function version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)\n (an integer represented as a decimal string).\n- **Google Cloud Run (Services):** The [revision](https://cloud.google.com/run/docs/managing/revisions)\n (i.e., the function name plus the revision suffix).\n- **Google Cloud Functions:** The value of the\n [`K_REVISION` environment variable](https://cloud.google.com/run/docs/container-contract#services-env-vars).\n- **Azure Functions:** Not applicable. Do not set this attribute.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version.\n", + "examples": [ + "2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de" + ], + "name": "faas.instance", + "note": "- **AWS Lambda:** Use the (full) log stream name.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The amount of memory available to the serverless function converted to Bytes.\n", + "examples": 134217728, + "name": "faas.max_memory", + "note": "It\u0027s recommended to set this attribute since e.g. too little memory can easily stop a Java AWS Lambda function from working correctly. On AWS Lambda, the environment variable `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (which must be multiplied by 1,048,576).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the single function that this runtime instance executes.\n", + "examples": [ + "my-function", + "myazurefunctionapp/some-function-name" + ], + "name": "faas.name", + "note": "This is the name of the function as configured/deployed on the FaaS\nplatform and is usually different from the name of the callback\nfunction (which may be stored in the\n[`code.namespace`/`code.function.name`](/docs/general/attributes.md#source-code-attributes)\nspan attributes).\n\nFor some cloud providers, the above definition is ambiguous. The following\ndefinition of function name MUST be used for this attribute\n(and consequently the span name) for the listed cloud providers/products:\n\n- **Azure:** The full name `\u003cFUNCAPP\u003e/\u003cFUNC\u003e`, i.e., function app name\n followed by a forward slash followed by the function name (this form\n can also be seen in the resource JSON for the function).\n This means that a span attribute MUST be used, as an Azure function\n app can host multiple functions that would usually share\n a TracerProvider (see also the `cloud.resource_id` attribute).\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "A serverless instance.\n", + "id": "entity.faas", + "lineage": { + "attributes": { + "cloud.resource_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloud" + }, + "faas.instance": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + }, + "faas.max_memory": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + }, + "faas.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.faas" + }, + "faas.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/entities.yaml", + "registry_id": "main" + } + }, + "name": "faas", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Common attributes for all GenAI spans.\n", + "id": "attributes.gen_ai.common.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The maximum number of tokens the model generates for a request.", + "examples": [ + 100 + ], + "name": "gen_ai.request.max_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The temperature setting for the GenAI request.", + "examples": [ + 0.0 + ], + "name": "gen_ai.request.temperature", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_p sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_p", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "List of sequences that the model will use to stop generating further tokens.", + "examples": [ + [ + "forest", + "lived" + ] + ], + "name": "gen_ai.request.stop_sequences", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The frequency penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.frequency_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The presence penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.presence_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of reasons the model stopped generating tokens, corresponding to each generation received.", + "examples": [ + [ + "stop" + ], + [ + "stop", + "length" + ] + ], + "name": "gen_ai.response.finish_reasons", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of tokens used in the GenAI input (prompt).", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of tokens used in the GenAI response (completion).", + "examples": [ + 180 + ], + "name": "gen_ai.usage.output_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.", + "examples": [ + "conv_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.conversation.id", + "note": "Instrumentations SHOULD populate conversation id when they have it readily available\nfor a given operation, for example:\n\n- when client framework being instrumented manages conversation history\n(see [LlamaIndex chat store](https://docs.llamaindex.ai/en/stable/module_guides/storing/chat_stores/))\n\n- when instrumenting GenAI client libraries that maintain conversation on the backend side\n(see [AWS Bedrock agent sessions](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html),\n[OpenAI Assistant threads](https://platform.openai.com/docs/api-reference/threads))\n\nApplication developers that manage conversation history MAY add conversation id to GenAI and other\nspans or logs using custom span or log record processors or hooks provided by instrumentation\nlibraries.\n", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The chat history provided to the model as an input.\n", + "examples": [ + "[\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n },\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n },\n {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy, 57°F\"\n }\n ]\n }\n]\n" + ], + "name": "gen_ai.input.messages", + "note": "Instrumentations MUST follow [Input messages JSON schema](/docs/gen-ai/gen-ai-input-messages.json).\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nMessages MUST be provided in the order they were sent to the model.\nInstrumentations MAY provide a way for users to filter or truncate\ninput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "Messages returned by the model where each message represents a specific model response (choice, candidate).", + "examples": [ + "[\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n }\n]\n" + ], + "name": "gen_ai.output.messages", + "note": "Instrumentations MUST follow [Output messages JSON schema](/docs/gen-ai/gen-ai-output-messages.json)\n\nEach message represents a single output choice/candidate generated by\nthe model. Each message corresponds to exactly one generation\n(choice/candidate) and vice versa - one choice cannot be split across\nmultiple messages or one message cannot contain parts from multiple choices.\n\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\noutput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "Represents the content type requested by the client.", + "name": "gen_ai.output.type", + "note": "This attribute SHOULD be used when the client requests output of a specific type. The model may return zero or more outputs of this type.\nThis attribute specifies the output modality and not the actual output format. For example, if an image is requested, the actual output could be a URL pointing to an image file.\nAdditional output format details may be recorded in the future in the `gen_ai.output.{type}.*` attributes.\n", + "requirement_level": { + "conditionally_required": "when applicable and if the request includes an output format." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Plain text", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object with known or unknown schema", + "id": "json", + "stability": "development", + "value": "json" + }, + { + "brief": "Image", + "id": "image", + "stability": "development", + "value": "image" + }, + { + "brief": "Speech", + "id": "speech", + "stability": "development", + "value": "speech" + } + ] + } + }, + { + "brief": "The target number of candidate completions to return.", + "examples": [ + 3 + ], + "name": "gen_ai.request.choice.count", + "requirement_level": { + "conditionally_required": "if available, in the request, and !=1" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Requests with same seed value more likely to return same result.", + "examples": [ + 100 + ], + "name": "gen_ai.request.seed", + "requirement_level": { + "conditionally_required": "if applicable and if the request includes a seed" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "note": "If available. The name of the GenAI model that provided the response. If the model is supplied by a vendor, then the value must be the exact name of the model actually used. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "note": "This attribute SHOULD be used when the corresponding provider or API\nallows to provide system instructions or messages separately from the\nchat history.\n\nInstructions that are part of the chat history SHOULD be recorded in\n`gen_ai.input.messages` attribute instead.\n\nInstrumentations MUST follow [System instructions JSON schema](/docs/gen-ai/gen-ai-system-instructions.json).\n\nWhen recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\nsystem instructions.\n\n\u003e [!Warning]\n\u003e This attribute may contain sensitive information.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The list of source system tool definitions available to the GenAI agent or model.", + "examples": [ + "[\n {\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \"description\": \"Get the current weather in a given location\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ]\n }\n },\n \"required\": [\n \"location\",\n \"unit\"\n ]\n }\n }\n]\n" + ], + "name": "gen_ai.tool.definitions", + "note": "The value of this attribute matches source system tool definition format.\n\nIt\u0027s expected to be an array of objects where each object represents a tool definition. In case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an array. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n\nSince this attribute could be large, it\u0027s NOT RECOMMENDED to populate\nit by default. Instrumentations MAY provide a way to enable\npopulating this attribute.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Describes GenAI inference attributes.\n", + "id": "attributes.gen_ai.inference.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The maximum number of tokens the model generates for a request.", + "examples": [ + 100 + ], + "name": "gen_ai.request.max_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The temperature setting for the GenAI request.", + "examples": [ + 0.0 + ], + "name": "gen_ai.request.temperature", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_p sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_p", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_k sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_k", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "List of sequences that the model will use to stop generating further tokens.", + "examples": [ + [ + "forest", + "lived" + ] + ], + "name": "gen_ai.request.stop_sequences", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The frequency penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.frequency_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The presence penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.presence_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of reasons the model stopped generating tokens, corresponding to each generation received.", + "examples": [ + [ + "stop" + ], + [ + "stop", + "length" + ] + ], + "name": "gen_ai.response.finish_reasons", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of tokens used in the GenAI input (prompt).", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of tokens used in the GenAI response (completion).", + "examples": [ + 180 + ], + "name": "gen_ai.usage.output_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.", + "examples": [ + "conv_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.conversation.id", + "note": "Instrumentations SHOULD populate conversation id when they have it readily available\nfor a given operation, for example:\n\n- when client framework being instrumented manages conversation history\n(see [LlamaIndex chat store](https://docs.llamaindex.ai/en/stable/module_guides/storing/chat_stores/))\n\n- when instrumenting GenAI client libraries that maintain conversation on the backend side\n(see [AWS Bedrock agent sessions](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html),\n[OpenAI Assistant threads](https://platform.openai.com/docs/api-reference/threads))\n\nApplication developers that manage conversation history MAY add conversation id to GenAI and other\nspans or logs using custom span or log record processors or hooks provided by instrumentation\nlibraries.\n", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The chat history provided to the model as an input.\n", + "examples": [ + "[\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n },\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n },\n {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy, 57°F\"\n }\n ]\n }\n]\n" + ], + "name": "gen_ai.input.messages", + "note": "Instrumentations MUST follow [Input messages JSON schema](/docs/gen-ai/gen-ai-input-messages.json).\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nMessages MUST be provided in the order they were sent to the model.\nInstrumentations MAY provide a way for users to filter or truncate\ninput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "Messages returned by the model where each message represents a specific model response (choice, candidate).", + "examples": [ + "[\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n }\n]\n" + ], + "name": "gen_ai.output.messages", + "note": "Instrumentations MUST follow [Output messages JSON schema](/docs/gen-ai/gen-ai-output-messages.json)\n\nEach message represents a single output choice/candidate generated by\nthe model. Each message corresponds to exactly one generation\n(choice/candidate) and vice versa - one choice cannot be split across\nmultiple messages or one message cannot contain parts from multiple choices.\n\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\noutput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "Represents the content type requested by the client.", + "name": "gen_ai.output.type", + "note": "This attribute SHOULD be used when the client requests output of a specific type. The model may return zero or more outputs of this type.\nThis attribute specifies the output modality and not the actual output format. For example, if an image is requested, the actual output could be a URL pointing to an image file.\nAdditional output format details may be recorded in the future in the `gen_ai.output.{type}.*` attributes.\n", + "requirement_level": { + "conditionally_required": "when applicable and if the request includes an output format." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Plain text", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object with known or unknown schema", + "id": "json", + "stability": "development", + "value": "json" + }, + { + "brief": "Image", + "id": "image", + "stability": "development", + "value": "image" + }, + { + "brief": "Speech", + "id": "speech", + "stability": "development", + "value": "speech" + } + ] + } + }, + { + "brief": "The target number of candidate completions to return.", + "examples": [ + 3 + ], + "name": "gen_ai.request.choice.count", + "requirement_level": { + "conditionally_required": "if available, in the request, and !=1" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Requests with same seed value more likely to return same result.", + "examples": [ + 100 + ], + "name": "gen_ai.request.seed", + "requirement_level": { + "conditionally_required": "if applicable and if the request includes a seed" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "note": "If available. The name of the GenAI model that provided the response. If the model is supplied by a vendor, then the value must be the exact name of the model actually used. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "note": "This attribute SHOULD be used when the corresponding provider or API\nallows to provide system instructions or messages separately from the\nchat history.\n\nInstructions that are part of the chat history SHOULD be recorded in\n`gen_ai.input.messages` attribute instead.\n\nInstrumentations MUST follow [System instructions JSON schema](/docs/gen-ai/gen-ai-system-instructions.json).\n\nWhen recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\nsystem instructions.\n\n\u003e [!Warning]\n\u003e This attribute may contain sensitive information.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The list of source system tool definitions available to the GenAI agent or model.", + "examples": [ + "[\n {\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \"description\": \"Get the current weather in a given location\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ]\n }\n },\n \"required\": [\n \"location\",\n \"unit\"\n ]\n }\n }\n]\n" + ], + "name": "gen_ai.tool.definitions", + "note": "The value of this attribute matches source system tool definition format.\n\nIt\u0027s expected to be an array of objects where each object represents a tool definition. In case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an array. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n\nSince this attribute could be large, it\u0027s NOT RECOMMENDED to populate\nit by default. Instrumentations MAY provide a way to enable\npopulating this attribute.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "This span represents a client call to Generative AI model or service that generates a response or requests a tool call based on the input prompt.\n", + "id": "span.gen_ai.inference.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_k": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "note": "**Span name** SHOULD be `{gen_ai.operation.name} {gen_ai.request.model}`.\nSemantic conventions for individual GenAI systems and frameworks MAY specify different span name format\nand MUST follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.37.0/specification/trace/api.md#span).\n\n**Span kind** SHOULD be `CLIENT` and MAY be set to `INTERNAL` on spans representing\ncall to models running in the same process. It\u0027s RECOMMENDED to use `CLIENT` kind\nwhen the GenAI system being instrumented usually runs in a different process than its\nclient or when the GenAI call happens over instrumented protocol such as HTTP.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The maximum number of tokens the model generates for a request.", + "examples": [ + 100 + ], + "name": "gen_ai.request.max_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The temperature setting for the GenAI request.", + "examples": [ + 0.0 + ], + "name": "gen_ai.request.temperature", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_p sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_p", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "List of sequences that the model will use to stop generating further tokens.", + "examples": [ + [ + "forest", + "lived" + ] + ], + "name": "gen_ai.request.stop_sequences", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The frequency penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.frequency_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The presence penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.presence_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of reasons the model stopped generating tokens, corresponding to each generation received.", + "examples": [ + [ + "stop" + ], + [ + "stop", + "length" + ] + ], + "name": "gen_ai.response.finish_reasons", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of tokens used in the GenAI input (prompt).", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of tokens used in the GenAI response (completion).", + "examples": [ + 180 + ], + "name": "gen_ai.usage.output_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.", + "examples": [ + "conv_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.conversation.id", + "note": "Instrumentations SHOULD populate conversation id when they have it readily available\nfor a given operation, for example:\n\n- when client framework being instrumented manages conversation history\n(see [LlamaIndex chat store](https://docs.llamaindex.ai/en/stable/module_guides/storing/chat_stores/))\n\n- when instrumenting GenAI client libraries that maintain conversation on the backend side\n(see [AWS Bedrock agent sessions](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html),\n[OpenAI Assistant threads](https://platform.openai.com/docs/api-reference/threads))\n\nApplication developers that manage conversation history MAY add conversation id to GenAI and other\nspans or logs using custom span or log record processors or hooks provided by instrumentation\nlibraries.\n", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The chat history provided to the model as an input.\n", + "examples": [ + "[\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n },\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n },\n {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy, 57°F\"\n }\n ]\n }\n]\n" + ], + "name": "gen_ai.input.messages", + "note": "Instrumentations MUST follow [Input messages JSON schema](/docs/gen-ai/gen-ai-input-messages.json).\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nMessages MUST be provided in the order they were sent to the model.\nInstrumentations MAY provide a way for users to filter or truncate\ninput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "Messages returned by the model where each message represents a specific model response (choice, candidate).", + "examples": [ + "[\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n }\n]\n" + ], + "name": "gen_ai.output.messages", + "note": "Instrumentations MUST follow [Output messages JSON schema](/docs/gen-ai/gen-ai-output-messages.json)\n\nEach message represents a single output choice/candidate generated by\nthe model. Each message corresponds to exactly one generation\n(choice/candidate) and vice versa - one choice cannot be split across\nmultiple messages or one message cannot contain parts from multiple choices.\n\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\noutput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The target number of candidate completions to return.", + "examples": [ + 3 + ], + "name": "gen_ai.request.choice.count", + "requirement_level": { + "conditionally_required": "if available, in the request, and !=1" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Requests with same seed value more likely to return same result.", + "examples": [ + 100 + ], + "name": "gen_ai.request.seed", + "requirement_level": { + "conditionally_required": "if applicable and if the request includes a seed" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "note": "If available. The name of the GenAI model that provided the response. If the model is supplied by a vendor, then the value must be the exact name of the model actually used. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "note": "This attribute SHOULD be used when the corresponding provider or API\nallows to provide system instructions or messages separately from the\nchat history.\n\nInstructions that are part of the chat history SHOULD be recorded in\n`gen_ai.input.messages` attribute instead.\n\nInstrumentations MUST follow [System instructions JSON schema](/docs/gen-ai/gen-ai-system-instructions.json).\n\nWhen recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\nsystem instructions.\n\n\u003e [!Warning]\n\u003e This attribute may contain sensitive information.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The list of source system tool definitions available to the GenAI agent or model.", + "examples": [ + "[\n {\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \"description\": \"Get the current weather in a given location\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ]\n }\n },\n \"required\": [\n \"location\",\n \"unit\"\n ]\n }\n }\n]\n" + ], + "name": "gen_ai.tool.definitions", + "note": "The value of this attribute matches source system tool definition format.\n\nIt\u0027s expected to be an array of objects where each object represents a tool definition. In case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an array. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n\nSince this attribute could be large, it\u0027s NOT RECOMMENDED to populate\nit by default. Instrumentations MAY provide a way to enable\npopulating this attribute.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Represents the content type requested by the client.", + "name": "gen_ai.output.type", + "note": "This attribute SHOULD be set to the output type requested by the client:\n- `json` for structured outputs with defined or undefined schema\n- `image` for image output\n- `speech` for speech output\n- `text` for plain text output\n\nThe attribute specifies the output modality and not the actual output format.\nFor example, if an image is requested, the actual output could be a\nURL pointing to an image file.\n\nAdditional output format details may be recorded in the future in the\n`gen_ai.output.{type}.*` attributes.\n", + "requirement_level": { + "conditionally_required": "when applicable and if the request includes an output format." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Plain text", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object with known or unknown schema", + "id": "json", + "stability": "development", + "value": "json" + }, + { + "brief": "Image", + "id": "image", + "stability": "development", + "value": "image" + }, + { + "brief": "Speech", + "id": "speech", + "stability": "development", + "value": "speech" + } + ] + } + } + ], + "brief": "Describes attributes that are common to OpenAI-based Generative AI services.\n", + "id": "attributes.gen_ai.inference.openai_based", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A fingerprint to track any eventual change in the Generative AI environment.", + "examples": [ + "fp_44709d6fcb" + ], + "name": "openai.response.system_fingerprint", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The maximum number of tokens the model generates for a request.", + "examples": [ + 100 + ], + "name": "gen_ai.request.max_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The temperature setting for the GenAI request.", + "examples": [ + 0.0 + ], + "name": "gen_ai.request.temperature", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_p sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_p", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "List of sequences that the model will use to stop generating further tokens.", + "examples": [ + [ + "forest", + "lived" + ] + ], + "name": "gen_ai.request.stop_sequences", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The frequency penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.frequency_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The presence penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.presence_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of reasons the model stopped generating tokens, corresponding to each generation received.", + "examples": [ + [ + "stop" + ], + [ + "stop", + "length" + ] + ], + "name": "gen_ai.response.finish_reasons", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of tokens used in the GenAI input (prompt).", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of tokens used in the GenAI response (completion).", + "examples": [ + 180 + ], + "name": "gen_ai.usage.output_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.", + "examples": [ + "conv_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.conversation.id", + "note": "Instrumentations SHOULD populate conversation id when they have it readily available\nfor a given operation, for example:\n\n- when client framework being instrumented manages conversation history\n(see [LlamaIndex chat store](https://docs.llamaindex.ai/en/stable/module_guides/storing/chat_stores/))\n\n- when instrumenting GenAI client libraries that maintain conversation on the backend side\n(see [AWS Bedrock agent sessions](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html),\n[OpenAI Assistant threads](https://platform.openai.com/docs/api-reference/threads))\n\nApplication developers that manage conversation history MAY add conversation id to GenAI and other\nspans or logs using custom span or log record processors or hooks provided by instrumentation\nlibraries.\n", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The chat history provided to the model as an input.\n", + "examples": [ + "[\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n },\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n },\n {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy, 57°F\"\n }\n ]\n }\n]\n" + ], + "name": "gen_ai.input.messages", + "note": "Instrumentations MUST follow [Input messages JSON schema](/docs/gen-ai/gen-ai-input-messages.json).\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nMessages MUST be provided in the order they were sent to the model.\nInstrumentations MAY provide a way for users to filter or truncate\ninput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "Messages returned by the model where each message represents a specific model response (choice, candidate).", + "examples": [ + "[\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n }\n]\n" + ], + "name": "gen_ai.output.messages", + "note": "Instrumentations MUST follow [Output messages JSON schema](/docs/gen-ai/gen-ai-output-messages.json)\n\nEach message represents a single output choice/candidate generated by\nthe model. Each message corresponds to exactly one generation\n(choice/candidate) and vice versa - one choice cannot be split across\nmultiple messages or one message cannot contain parts from multiple choices.\n\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\noutput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The target number of candidate completions to return.", + "examples": [ + 3 + ], + "name": "gen_ai.request.choice.count", + "requirement_level": { + "conditionally_required": "if available, in the request, and !=1" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Requests with same seed value more likely to return same result.", + "examples": [ + 100 + ], + "name": "gen_ai.request.seed", + "requirement_level": { + "conditionally_required": "if applicable and if the request includes a seed" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "note": "If available. The name of the GenAI model that provided the response. If the model is supplied by a vendor, then the value must be the exact name of the model actually used. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "note": "This attribute SHOULD be used when the corresponding provider or API\nallows to provide system instructions or messages separately from the\nchat history.\n\nInstructions that are part of the chat history SHOULD be recorded in\n`gen_ai.input.messages` attribute instead.\n\nInstrumentations MUST follow [System instructions JSON schema](/docs/gen-ai/gen-ai-system-instructions.json).\n\nWhen recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\nsystem instructions.\n\n\u003e [!Warning]\n\u003e This attribute may contain sensitive information.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The list of source system tool definitions available to the GenAI agent or model.", + "examples": [ + "[\n {\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \"description\": \"Get the current weather in a given location\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ]\n }\n },\n \"required\": [\n \"location\",\n \"unit\"\n ]\n }\n }\n]\n" + ], + "name": "gen_ai.tool.definitions", + "note": "The value of this attribute matches source system tool definition format.\n\nIt\u0027s expected to be an array of objects where each object represents a tool definition. In case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an array. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n\nSince this attribute could be large, it\u0027s NOT RECOMMENDED to populate\nit by default. Instrumentations MAY provide a way to enable\npopulating this attribute.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Represents the content type requested by the client.", + "name": "gen_ai.output.type", + "note": "This attribute SHOULD be set to the output type requested by the client:\n- `json` for structured outputs with defined or undefined schema\n- `image` for image output\n- `speech` for speech output\n- `text` for plain text output\n\nThe attribute specifies the output modality and not the actual output format.\nFor example, if an image is requested, the actual output could be a\nURL pointing to an image file.\n\nAdditional output format details may be recorded in the future in the\n`gen_ai.output.{type}.*` attributes.\n", + "requirement_level": { + "conditionally_required": "when applicable and if the request includes an output format." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Plain text", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object with known or unknown schema", + "id": "json", + "stability": "development", + "value": "json" + }, + { + "brief": "Image", + "id": "image", + "stability": "development", + "value": "image" + }, + { + "brief": "Speech", + "id": "speech", + "stability": "development", + "value": "speech" + } + ] + } + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The service tier requested. May be a specific tier, default, or auto.", + "examples": [ + "auto", + "default" + ], + "name": "openai.request.service_tier", + "requirement_level": { + "conditionally_required": "if the request includes a service_tier and the value is not \u0027auto\u0027" + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "The system will utilize scale tier credits until they are exhausted.", + "id": "auto", + "stability": "development", + "value": "auto" + }, + { + "brief": "The system will utilize the default scale tier.", + "id": "default", + "stability": "development", + "value": "default" + } + ] + } + }, + { + "brief": "The service tier used for the response.", + "examples": [ + "scale", + "default" + ], + "name": "openai.response.service_tier", + "requirement_level": { + "conditionally_required": "if the response was received and includes a service_tier" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Semantic Conventions for [OpenAI](https://openai.com/) client spans extend and override the semantic conventions for [Gen AI Spans](gen-ai-spans.md).\n", + "id": "span.openai.inference.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "openai.request.service_tier": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.openai" + }, + "openai.response.service_tier": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.openai" + }, + "openai.response.system_fingerprint": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.openai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "note": "`gen_ai.provider.name` MUST be set to `\"openai\"` and SHOULD be provided **at span creation time**.\n\n**Span name** SHOULD be `{gen_ai.operation.name} {gen_ai.request.model}`.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The maximum number of tokens the model generates for a request.", + "examples": [ + 100 + ], + "name": "gen_ai.request.max_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The temperature setting for the GenAI request.", + "examples": [ + 0.0 + ], + "name": "gen_ai.request.temperature", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_p sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_p", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "List of sequences that the model will use to stop generating further tokens.", + "examples": [ + [ + "forest", + "lived" + ] + ], + "name": "gen_ai.request.stop_sequences", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The frequency penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.frequency_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The presence penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.presence_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of reasons the model stopped generating tokens, corresponding to each generation received.", + "examples": [ + [ + "stop" + ], + [ + "stop", + "length" + ] + ], + "name": "gen_ai.response.finish_reasons", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.", + "examples": [ + "conv_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.conversation.id", + "note": "Instrumentations SHOULD populate conversation id when they have it readily available\nfor a given operation, for example:\n\n- when client framework being instrumented manages conversation history\n(see [LlamaIndex chat store](https://docs.llamaindex.ai/en/stable/module_guides/storing/chat_stores/))\n\n- when instrumenting GenAI client libraries that maintain conversation on the backend side\n(see [AWS Bedrock agent sessions](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html),\n[OpenAI Assistant threads](https://platform.openai.com/docs/api-reference/threads))\n\nApplication developers that manage conversation history MAY add conversation id to GenAI and other\nspans or logs using custom span or log record processors or hooks provided by instrumentation\nlibraries.\n", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The chat history provided to the model as an input.\n", + "examples": [ + "[\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n },\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n },\n {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy, 57°F\"\n }\n ]\n }\n]\n" + ], + "name": "gen_ai.input.messages", + "note": "Instrumentations MUST follow [Input messages JSON schema](/docs/gen-ai/gen-ai-input-messages.json).\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nMessages MUST be provided in the order they were sent to the model.\nInstrumentations MAY provide a way for users to filter or truncate\ninput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "Messages returned by the model where each message represents a specific model response (choice, candidate).", + "examples": [ + "[\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n }\n]\n" + ], + "name": "gen_ai.output.messages", + "note": "Instrumentations MUST follow [Output messages JSON schema](/docs/gen-ai/gen-ai-output-messages.json)\n\nEach message represents a single output choice/candidate generated by\nthe model. Each message corresponds to exactly one generation\n(choice/candidate) and vice versa - one choice cannot be split across\nmultiple messages or one message cannot contain parts from multiple choices.\n\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\noutput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The target number of candidate completions to return.", + "examples": [ + 3 + ], + "name": "gen_ai.request.choice.count", + "requirement_level": { + "conditionally_required": "if available, in the request, and !=1" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Requests with same seed value more likely to return same result.", + "examples": [ + 100 + ], + "name": "gen_ai.request.seed", + "requirement_level": { + "conditionally_required": "if applicable and if the request includes a seed" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "note": "If available. The name of the GenAI model that provided the response. If the model is supplied by a vendor, then the value must be the exact name of the model actually used. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "note": "This attribute SHOULD be used when the corresponding provider or API\nallows to provide system instructions or messages separately from the\nchat history.\n\nInstructions that are part of the chat history SHOULD be recorded in\n`gen_ai.input.messages` attribute instead.\n\nInstrumentations MUST follow [System instructions JSON schema](/docs/gen-ai/gen-ai-system-instructions.json).\n\nWhen recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\nsystem instructions.\n\n\u003e [!Warning]\n\u003e This attribute may contain sensitive information.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The list of source system tool definitions available to the GenAI agent or model.", + "examples": [ + "[\n {\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \"description\": \"Get the current weather in a given location\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ]\n }\n },\n \"required\": [\n \"location\",\n \"unit\"\n ]\n }\n }\n]\n" + ], + "name": "gen_ai.tool.definitions", + "note": "The value of this attribute matches source system tool definition format.\n\nIt\u0027s expected to be an array of objects where each object represents a tool definition. In case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an array. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n\nSince this attribute could be large, it\u0027s NOT RECOMMENDED to populate\nit by default. Instrumentations MAY provide a way to enable\npopulating this attribute.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Represents the content type requested by the client.", + "name": "gen_ai.output.type", + "note": "This attribute SHOULD be set to the output type requested by the client:\n- `json` for structured outputs with defined or undefined schema\n- `image` for image output\n- `speech` for speech output\n- `text` for plain text output\n\nThe attribute specifies the output modality and not the actual output format.\nFor example, if an image is requested, the actual output could be a\nURL pointing to an image file.\n\nAdditional output format details may be recorded in the future in the\n`gen_ai.output.{type}.*` attributes.\n", + "requirement_level": { + "conditionally_required": "when applicable and if the request includes an output format." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Plain text", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object with known or unknown schema", + "id": "json", + "stability": "development", + "value": "json" + }, + { + "brief": "Image", + "id": "image", + "stability": "development", + "value": "image" + }, + { + "brief": "Speech", + "id": "speech", + "stability": "development", + "value": "speech" + } + ] + } + }, + { + "brief": "[Azure Resource Provider Namespace](https://learn.microsoft.com/azure/azure-resource-manager/management/azure-services-resource-providers) as recognized by the client.\n", + "examples": [ + "Microsoft.CognitiveServices" + ], + "name": "azure.resource_provider.namespace", + "note": "When `azure.resource_provider.namespace` attribute is populated, it MUST be set to `Microsoft.CognitiveServices` for all operations performed by Azure AI Inference clients.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The number of prompt tokens as reported in the usage prompt_tokens property of the response.\n", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of completion tokens as reported in the usage completion_tokens property of the response.\n", + "examples": [ + 180 + ], + "name": "gen_ai.usage.output_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If not default (443)." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Semantic Conventions for [Azure AI Inference](https://learn.microsoft.com/rest/api/aifoundry/modelinference/) client spans extend and override the semantic conventions for [Gen AI Spans](gen-ai-spans.md).\n", + "id": "span.azure.ai.inference.client", + "lineage": { + "attributes": { + "azure.resource_provider.namespace": { + "inherited_fields": [ + "brief", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note" + ], + "source_group": "registry.azure.client.sdk" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "note": "`gen_ai.provider.name` MUST be set to `\"azure.ai.inference\"` and SHOULD be provided **at span creation time**.\n\n**Span name** SHOULD be `{gen_ai.operation.name} {gen_ai.request.model}` when the\nmodel name is available and `{gen_ai.operation.name}` otherwise.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The encoding formats requested in an embeddings operation, if specified.", + "examples": [ + [ + "base64" + ], + [ + "float", + "binary" + ] + ], + "name": "gen_ai.request.encoding_formats", + "note": "In some GenAI systems the encoding formats are called embedding types. Also, some GenAI systems only accept a single format per request.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of tokens used in the GenAI input (prompt).", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of dimensions the resulting output embeddings should have.", + "examples": [ + 512, + 1024 + ], + "name": "gen_ai.embeddings.dimension.count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Describes GenAI embeddings span - a request to a Generative AI model or service that generates an embeddings based on the input.\nThe `gen_ai.operation.name` SHOULD be `embeddings`.\n**Span name** SHOULD be `{gen_ai.operation.name} {gen_ai.request.model}`.\n", + "id": "span.gen_ai.embeddings.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.embeddings.dimension.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.encoding_formats": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + }, + { + "brief": "Free-form description of the GenAI agent provided by the application.", + "examples": [ + "Helps with math problems", + "Generates fiction stories" + ], + "name": "gen_ai.agent.description", + "requirement_level": { + "conditionally_required": "If provided by the application." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier of the GenAI agent.", + "examples": [ + "asst_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.agent.id", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Human-readable name of the GenAI agent provided by the application.", + "examples": [ + "Math Tutor", + "Fiction Writer" + ], + "name": "gen_ai.agent.name", + "requirement_level": { + "conditionally_required": "If provided by the application." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + } + ], + "brief": "Describes GenAI agent creation and is usually applicable when working with remote agent services.\n", + "id": "span.gen_ai.create_agent.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.agent.description": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.agent.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.agent.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "note": "The `gen_ai.operation.name` SHOULD be `create_agent`.\n\n**Span name** SHOULD be `create_agent {gen_ai.agent.name}`.\nSemantic conventions for individual GenAI systems and frameworks MAY specify different span name format.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The maximum number of tokens the model generates for a request.", + "examples": [ + 100 + ], + "name": "gen_ai.request.max_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The temperature setting for the GenAI request.", + "examples": [ + 0.0 + ], + "name": "gen_ai.request.temperature", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_p sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_p", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "List of sequences that the model will use to stop generating further tokens.", + "examples": [ + [ + "forest", + "lived" + ] + ], + "name": "gen_ai.request.stop_sequences", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The frequency penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.frequency_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The presence penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.presence_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of reasons the model stopped generating tokens, corresponding to each generation received.", + "examples": [ + [ + "stop" + ], + [ + "stop", + "length" + ] + ], + "name": "gen_ai.response.finish_reasons", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of tokens used in the GenAI input (prompt).", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of tokens used in the GenAI response (completion).", + "examples": [ + 180 + ], + "name": "gen_ai.usage.output_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.", + "examples": [ + "conv_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.conversation.id", + "note": "Instrumentations SHOULD populate conversation id when they have it readily available\nfor a given operation, for example:\n\n- when client framework being instrumented manages conversation history\n(see [LlamaIndex chat store](https://docs.llamaindex.ai/en/stable/module_guides/storing/chat_stores/))\n\n- when instrumenting GenAI client libraries that maintain conversation on the backend side\n(see [AWS Bedrock agent sessions](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html),\n[OpenAI Assistant threads](https://platform.openai.com/docs/api-reference/threads))\n\nApplication developers that manage conversation history MAY add conversation id to GenAI and other\nspans or logs using custom span or log record processors or hooks provided by instrumentation\nlibraries.\n", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The chat history provided to the model as an input.\n", + "examples": [ + "[\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n },\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n },\n {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy, 57°F\"\n }\n ]\n }\n]\n" + ], + "name": "gen_ai.input.messages", + "note": "Instrumentations MUST follow [Input messages JSON schema](/docs/gen-ai/gen-ai-input-messages.json).\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nMessages MUST be provided in the order they were sent to the model.\nInstrumentations MAY provide a way for users to filter or truncate\ninput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "Messages returned by the model where each message represents a specific model response (choice, candidate).", + "examples": [ + "[\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n }\n]\n" + ], + "name": "gen_ai.output.messages", + "note": "Instrumentations MUST follow [Output messages JSON schema](/docs/gen-ai/gen-ai-output-messages.json)\n\nEach message represents a single output choice/candidate generated by\nthe model. Each message corresponds to exactly one generation\n(choice/candidate) and vice versa - one choice cannot be split across\nmultiple messages or one message cannot contain parts from multiple choices.\n\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\noutput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "Represents the content type requested by the client.", + "name": "gen_ai.output.type", + "note": "This attribute SHOULD be used when the client requests output of a specific type. The model may return zero or more outputs of this type.\nThis attribute specifies the output modality and not the actual output format. For example, if an image is requested, the actual output could be a URL pointing to an image file.\nAdditional output format details may be recorded in the future in the `gen_ai.output.{type}.*` attributes.\n", + "requirement_level": { + "conditionally_required": "when applicable and if the request includes an output format." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Plain text", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object with known or unknown schema", + "id": "json", + "stability": "development", + "value": "json" + }, + { + "brief": "Image", + "id": "image", + "stability": "development", + "value": "image" + }, + { + "brief": "Speech", + "id": "speech", + "stability": "development", + "value": "speech" + } + ] + } + }, + { + "brief": "The target number of candidate completions to return.", + "examples": [ + 3 + ], + "name": "gen_ai.request.choice.count", + "requirement_level": { + "conditionally_required": "if available, in the request, and !=1" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Requests with same seed value more likely to return same result.", + "examples": [ + 100 + ], + "name": "gen_ai.request.seed", + "requirement_level": { + "conditionally_required": "if applicable and if the request includes a seed" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "note": "If available. The name of the GenAI model that provided the response. If the model is supplied by a vendor, then the value must be the exact name of the model actually used. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "note": "This attribute SHOULD be used when the corresponding provider or API\nallows to provide system instructions or messages separately from the\nchat history.\n\nInstructions that are part of the chat history SHOULD be recorded in\n`gen_ai.input.messages` attribute instead.\n\nInstrumentations MUST follow [System instructions JSON schema](/docs/gen-ai/gen-ai-system-instructions.json).\n\nWhen recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\nsystem instructions.\n\n\u003e [!Warning]\n\u003e This attribute may contain sensitive information.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The list of source system tool definitions available to the GenAI agent or model.", + "examples": [ + "[\n {\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \"description\": \"Get the current weather in a given location\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ]\n }\n },\n \"required\": [\n \"location\",\n \"unit\"\n ]\n }\n }\n]\n" + ], + "name": "gen_ai.tool.definitions", + "note": "The value of this attribute matches source system tool definition format.\n\nIt\u0027s expected to be an array of objects where each object represents a tool definition. In case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an array. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n\nSince this attribute could be large, it\u0027s NOT RECOMMENDED to populate\nit by default. Instrumentations MAY provide a way to enable\npopulating this attribute.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + }, + { + "brief": "The unique identifier of the GenAI agent.", + "examples": [ + "asst_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.agent.id", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Free-form description of the GenAI agent provided by the application.", + "examples": [ + "Helps with math problems", + "Generates fiction stories" + ], + "name": "gen_ai.agent.description", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Human-readable name of the GenAI agent provided by the application.", + "examples": [ + "Math Tutor", + "Fiction Writer" + ], + "name": "gen_ai.agent.name", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The data source identifier.", + "examples": [ + "H7STPQYOND" + ], + "name": "gen_ai.data_source.id", + "note": "Data sources are used by AI agents and RAG applications to store grounding data. A data source may be an external database, object store, document collection, website, or any other storage system used by the GenAI agent or application. The `gen_ai.data_source.id` SHOULD match the identifier used by the GenAI system rather than a name specific to the external storage, such as a database or object store. Semantic conventions referencing `gen_ai.data_source.id` MAY also leverage additional attributes, such as `db.*`, to further identify and describe the data source.\n", + "requirement_level": { + "conditionally_required": "if applicable." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when span kind is `CLIENT`." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Describes GenAI agent invocation.\n", + "id": "span.gen_ai.invoke_agent.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.agent.description": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.agent.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.agent.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.data_source.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "note": "The `gen_ai.operation.name` SHOULD be `invoke_agent`.\n\n**Span name** SHOULD be `invoke_agent {gen_ai.agent.name}` if `gen_ai.agent.name` is readily available.\nWhen `gen_ai.agent.name` is not available, it SHOULD be `invoke_agent`.\nSemantic conventions for individual GenAI systems and frameworks MAY specify different span name format.\n\n**Span kind** SHOULD be `CLIENT` and MAY be set to `INTERNAL` on spans representing\ninvocation of agents running in the same process.\nIt\u0027s RECOMMENDED to use `CLIENT` kind when the agent being instrumented usually runs\nin a different process than its caller or when the agent invocation happens over\ninstrumented protocol such as HTTP.\n\nExamples of span kinds for different agent scenarios:\n- `CLIENT`: Remote agent services (e.g., OpenAI Assistants API, AWS Bedrock Agents)\n- `INTERNAL`: In-process agents (e.g., LangChain agents, CrewAI agents)\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the tool utilized by the agent.", + "examples": [ + "Flights" + ], + "name": "gen_ai.tool.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "The tool call identifier.", + "examples": [ + "call_mszuSIzqtI65i1wAUOE8w5H4" + ], + "name": "gen_ai.tool.call.id", + "requirement_level": { + "recommended": "if available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The tool description.", + "examples": [ + "Multiply two numbers" + ], + "name": "gen_ai.tool.description", + "requirement_level": { + "recommended": "if available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the tool utilized by the agent", + "examples": [ + "function", + "extension", + "datastore" + ], + "name": "gen_ai.tool.type", + "note": "Extension: A tool executed on the agent-side to directly call external APIs, bridging the gap between the agent and real-world systems.\n Agent-side operations involve actions that are performed by the agent on the server or within the agent\u0027s controlled environment.\nFunction: A tool executed on the client-side, where the agent generates parameters for a predefined function, and the client executes the logic.\n Client-side operations are actions taken on the user\u0027s end or within the client application.\nDatastore: A tool used by the agent to access and query structured or unstructured external data for retrieval-augmented tasks or knowledge updates.\n", + "requirement_level": { + "recommended": "if available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Parameters passed to the tool call.", + "examples": [ + "{\n \"location\": \"San Francisco?\",\n \"date\": \"2025-10-01\"\n}\n" + ], + "name": "gen_ai.tool.call.arguments", + "note": "\u003e [!WARNING]\n\u003e This attribute may contain sensitive information.\n\nIt\u0027s expected to be an object - in case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an object. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The result returned by the tool call (if any and if execution was successful).", + "examples": [ + "{\n \"temperature_range\": {\n \"high\": 75,\n \"low\": 60\n },\n \"conditions\": \"sunny\"\n}\n" + ], + "name": "gen_ai.tool.call.result", + "note": "\u003e [!WARNING]\n\u003e This attribute may contain sensitive information.\n\nIt\u0027s expected to be an object - in case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an object. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + } + ], + "brief": "Describes tool execution span.", + "id": "span.gen_ai.execute_tool.internal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.call.arguments": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.call.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.call.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.description": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "note": "`gen_ai.operation.name` SHOULD be `execute_tool`.\n\n**Span name** SHOULD be `execute_tool {gen_ai.tool.name}`.\n\nGenAI instrumentations that are able to instrument tool execution call SHOULD do so.\nHowever, it\u0027s common for tools to be executed by the application code. It\u0027s recommended\nfor the application developers to follow this semantic convention for tools invoked\nby the application code.\n", + "span_kind": "internal", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The maximum number of tokens the model generates for a request.", + "examples": [ + 100 + ], + "name": "gen_ai.request.max_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The temperature setting for the GenAI request.", + "examples": [ + 0.0 + ], + "name": "gen_ai.request.temperature", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_p sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_p", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_k sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_k", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "List of sequences that the model will use to stop generating further tokens.", + "examples": [ + [ + "forest", + "lived" + ] + ], + "name": "gen_ai.request.stop_sequences", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The frequency penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.frequency_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The presence penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.presence_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of reasons the model stopped generating tokens, corresponding to each generation received.", + "examples": [ + [ + "stop" + ], + [ + "stop", + "length" + ] + ], + "name": "gen_ai.response.finish_reasons", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of tokens used in the GenAI input (prompt).", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of tokens used in the GenAI response (completion).", + "examples": [ + 180 + ], + "name": "gen_ai.usage.output_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The unique identifier of the AWS Bedrock Knowledge base. A [knowledge base](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) is a bank of information that can be queried by models to generate more relevant responses and augment prompts.\n", + "examples": [ + "XFWUPB9PAW" + ], + "name": "aws.bedrock.knowledge_base.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.", + "examples": [ + "conv_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.conversation.id", + "note": "Instrumentations SHOULD populate conversation id when they have it readily available\nfor a given operation, for example:\n\n- when client framework being instrumented manages conversation history\n(see [LlamaIndex chat store](https://docs.llamaindex.ai/en/stable/module_guides/storing/chat_stores/))\n\n- when instrumenting GenAI client libraries that maintain conversation on the backend side\n(see [AWS Bedrock agent sessions](https://docs.aws.amazon.com/bedrock/latest/userguide/agents-session-state.html),\n[OpenAI Assistant threads](https://platform.openai.com/docs/api-reference/threads))\n\nApplication developers that manage conversation history MAY add conversation id to GenAI and other\nspans or logs using custom span or log record processors or hooks provided by instrumentation\nlibraries.\n", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The chat history provided to the model as an input.\n", + "examples": [ + "[\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n },\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n },\n {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy, 57°F\"\n }\n ]\n }\n]\n" + ], + "name": "gen_ai.input.messages", + "note": "Instrumentations MUST follow [Input messages JSON schema](/docs/gen-ai/gen-ai-input-messages.json).\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nMessages MUST be provided in the order they were sent to the model.\nInstrumentations MAY provide a way for users to filter or truncate\ninput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "Messages returned by the model where each message represents a specific model response (choice, candidate).", + "examples": [ + "[\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n }\n]\n" + ], + "name": "gen_ai.output.messages", + "note": "Instrumentations MUST follow [Output messages JSON schema](/docs/gen-ai/gen-ai-output-messages.json)\n\nEach message represents a single output choice/candidate generated by\nthe model. Each message corresponds to exactly one generation\n(choice/candidate) and vice versa - one choice cannot be split across\nmultiple messages or one message cannot contain parts from multiple choices.\n\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\noutput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "Represents the content type requested by the client.", + "name": "gen_ai.output.type", + "note": "This attribute SHOULD be used when the client requests output of a specific type. The model may return zero or more outputs of this type.\nThis attribute specifies the output modality and not the actual output format. For example, if an image is requested, the actual output could be a URL pointing to an image file.\nAdditional output format details may be recorded in the future in the `gen_ai.output.{type}.*` attributes.\n", + "requirement_level": { + "conditionally_required": "when applicable and if the request includes an output format." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Plain text", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object with known or unknown schema", + "id": "json", + "stability": "development", + "value": "json" + }, + { + "brief": "Image", + "id": "image", + "stability": "development", + "value": "image" + }, + { + "brief": "Speech", + "id": "speech", + "stability": "development", + "value": "speech" + } + ] + } + }, + { + "brief": "The target number of candidate completions to return.", + "examples": [ + 3 + ], + "name": "gen_ai.request.choice.count", + "requirement_level": { + "conditionally_required": "if available, in the request, and !=1" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "note": "The name of the GenAI model a request is being made to. If the model is supplied by a vendor, then the value must be the exact name of the model requested. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Requests with same seed value more likely to return same result.", + "examples": [ + 100 + ], + "name": "gen_ai.request.seed", + "requirement_level": { + "conditionally_required": "if applicable and if the request includes a seed" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "note": "If available. The name of the GenAI model that provided the response. If the model is supplied by a vendor, then the value must be the exact name of the model actually used. If the model is a fine-tuned custom model, the value should have a more specific name than the base model that\u0027s been fine-tuned.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "note": "This attribute SHOULD be used when the corresponding provider or API\nallows to provide system instructions or messages separately from the\nchat history.\n\nInstructions that are part of the chat history SHOULD be recorded in\n`gen_ai.input.messages` attribute instead.\n\nInstrumentations MUST follow [System instructions JSON schema](/docs/gen-ai/gen-ai-system-instructions.json).\n\nWhen recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\nsystem instructions.\n\n\u003e [!Warning]\n\u003e This attribute may contain sensitive information.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "The list of source system tool definitions available to the GenAI agent or model.", + "examples": [ + "[\n {\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \"description\": \"Get the current weather in a given location\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ]\n }\n },\n \"required\": [\n \"location\",\n \"unit\"\n ]\n }\n }\n]\n" + ], + "name": "gen_ai.tool.definitions", + "note": "The value of this attribute matches source system tool definition format.\n\nIt\u0027s expected to be an array of objects where each object represents a tool definition. In case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an array. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n\nSince this attribute could be large, it\u0027s NOT RECOMMENDED to populate\nit by default. Instrumentations MAY provide a way to enable\npopulating this attribute.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "any" + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + }, + { + "brief": "The unique identifier of the AWS Bedrock Guardrail. A [guardrail](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html) helps safeguard and prevent unwanted behavior from model responses or user messages.\n", + "examples": [ + "sgi5gkybzqak" + ], + "name": "aws.bedrock.guardrail.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes an AWS Bedrock operation span.\n", + "id": "span.aws.bedrock.client", + "lineage": { + "attributes": { + "aws.bedrock.guardrail.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.bedrock" + }, + "aws.bedrock.knowledge_base.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.bedrock" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_k": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `http.request.method` instead.", + "deprecated": { + "note": "Replaced by `http.request.method`.", + "reason": "renamed", + "renamed_to": "http.request.method" + }, + "examples": [ + "GET", + "POST", + "HEAD" + ], + "name": "http.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `http.response.status_code` instead.", + "deprecated": { + "note": "Replaced by `http.response.status_code`.", + "reason": "renamed", + "renamed_to": "http.response.status_code" + }, + "examples": [ + 200 + ], + "name": "http.status_code", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `url.scheme` instead.", + "deprecated": { + "note": "Replaced by `url.scheme`.", + "reason": "renamed", + "renamed_to": "url.scheme" + }, + "examples": [ + "http", + "https" + ], + "name": "http.scheme", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `url.full` instead.", + "deprecated": { + "note": "Replaced by `url.full`.", + "reason": "renamed", + "renamed_to": "url.full" + }, + "examples": [ + "https://www.foo.bar/search?q=OpenTelemetry#SemConv" + ], + "name": "http.url", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `url.path` and `url.query` instead.", + "deprecated": { + "note": "Split to `url.path` and `url.query`.", + "reason": "obsoleted" + }, + "examples": [ + "/search?q=OpenTelemetry#SemConv" + ], + "name": "http.target", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `http.request.header.content-length` instead.", + "deprecated": { + "note": "Replaced by `http.request.header.content-length`.", + "reason": "uncategorized" + }, + "examples": 3495, + "name": "http.request_content_length", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `http.response.header.content-length` instead.", + "deprecated": { + "note": "Replaced by `http.response.header.content-length`.", + "reason": "uncategorized" + }, + "examples": 3495, + "name": "http.response_content_length", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `client.address` instead.", + "deprecated": { + "note": "Replaced by `client.address`.", + "reason": "renamed", + "renamed_to": "client.address" + }, + "examples": "83.164.160.102", + "name": "http.client_ip", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use one of `server.address`, `client.address` or `http.request.header.host` instead, depending on the usage.", + "deprecated": { + "note": "Replaced by one of `server.address`, `client.address` or `http.request.header.host`, depending on the usage.\n", + "reason": "uncategorized" + }, + "examples": [ + "www.example.org" + ], + "name": "http.host", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `http.request.body.size` instead.", + "deprecated": { + "note": "Replaced by `http.request.body.size`.", + "reason": "renamed", + "renamed_to": "http.request.body.size" + }, + "examples": 5493, + "name": "http.request_content_length_uncompressed", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `http.response.body.size` instead.", + "deprecated": { + "note": "Replaced by `http.response.body.size`.", + "reason": "renamed", + "renamed_to": "http.response.body.size" + }, + "examples": 5493, + "name": "http.response_content_length_uncompressed", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `server.address` instead.", + "deprecated": { + "note": "Replaced by `server.address`.", + "reason": "renamed", + "renamed_to": "server.address" + }, + "examples": [ + "example.com" + ], + "name": "http.server_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `network.protocol.name` and `network.protocol.version` instead.", + "deprecated": { + "note": "Split into `network.protocol.name` and `network.protocol.version`", + "reason": "uncategorized" + }, + "name": "http.flavor", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "HTTP/1.0", + "id": "http_1_0", + "stability": "development", + "value": "1.0" + }, + { + "brief": "HTTP/1.1", + "id": "http_1_1", + "stability": "development", + "value": "1.1" + }, + { + "brief": "HTTP/2", + "id": "http_2_0", + "stability": "development", + "value": "2.0" + }, + { + "brief": "HTTP/3", + "id": "http_3_0", + "stability": "development", + "value": "3.0" + }, + { + "brief": "SPDY protocol.", + "id": "spdy", + "stability": "development", + "value": "SPDY" + }, + { + "brief": "QUIC protocol.", + "id": "quic", + "stability": "development", + "value": "QUIC" + } + ] + } + }, + { + "brief": "Deprecated, use `user_agent.original` instead.", + "deprecated": { + "note": "Replaced by `user_agent.original`.", + "reason": "renamed", + "renamed_to": "user_agent.original" + }, + "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": "http.user_agent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated HTTP attributes.", + "display_name": "Deprecated HTTP Attributes", + "id": "registry.http.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/http/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the logical partition that hosts a systems with a mainframe operating system.", + "examples": [ + "LPAR01" + ], + "name": "mainframe.lpar.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes of a Mainframe Logical Partition (LPAR).", + "display_name": "Mainframe LPAR attributes", + "id": "registry.mainframe.lpar", + "lineage": { + "provenance": { + "path": "/home/weaver/source/mainframe/registry_lpar.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the instrumentation scope - (`InstrumentationScope.Name` in OTLP).", + "examples": [ + "io.opentelemetry.contrib.mongodb" + ], + "name": "otel.scope.name", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The version of the instrumentation scope - (`InstrumentationScope.Version` in OTLP).", + "examples": [ + "1.0.0" + ], + "name": "otel.scope.version", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Attributes used by non-OTLP exporters to represent OpenTelemetry Scope\u0027s concepts.", + "deprecated": { + "note": "Obsoleted.", + "reason": "obsoleted" + }, + "id": "entity.otel.scope", + "lineage": { + "attributes": { + "otel.scope.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.otel.scope" + }, + "otel.scope.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.otel.scope" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/deprecated/entities-deprecated.yaml", + "registry_id": "main" + } + }, + "name": "otel.scope", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `rpc.message.type` instead.", + "deprecated": { + "note": "Replaced by `rpc.message.type`.", + "reason": "renamed", + "renamed_to": "rpc.message.type" + }, + "name": "message.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "sent", + "stability": "development", + "value": "SENT" + }, + { + "id": "received", + "stability": "development", + "value": "RECEIVED" + } + ] + } + }, + { + "brief": "Deprecated, use `rpc.message.id` instead.", + "deprecated": { + "note": "Replaced by `rpc.message.id`.", + "reason": "renamed", + "renamed_to": "rpc.message.id" + }, + "name": "message.id", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `rpc.message.compressed_size` instead.", + "deprecated": { + "note": "Replaced by `rpc.message.compressed_size`.", + "reason": "renamed", + "renamed_to": "rpc.message.compressed_size" + }, + "name": "message.compressed_size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `rpc.message.uncompressed_size` instead.", + "deprecated": { + "note": "Replaced by `rpc.message.uncompressed_size`.", + "reason": "renamed", + "renamed_to": "rpc.message.uncompressed_size" + }, + "name": "message.uncompressed_size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "Deprecated rpc message attributes.", + "display_name": "Deprecated RPC Attributes", + "id": "registry.rpc.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/rpc/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `process.state` instead.", + "deprecated": { + "note": "Replaced by `process.state`.", + "reason": "renamed", + "renamed_to": "process.state" + }, + "examples": [ + "running" + ], + "name": "system.processes.status", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "running", + "stability": "development", + "value": "running" + }, + { + "id": "sleeping", + "stability": "development", + "value": "sleeping" + }, + { + "id": "stopped", + "stability": "development", + "value": "stopped" + }, + { + "id": "defunct", + "stability": "development", + "value": "defunct" + } + ] + } + }, + { + "brief": "Deprecated, use `cpu.mode` instead.", + "deprecated": { + "note": "Replaced by `cpu.mode`.", + "reason": "renamed", + "renamed_to": "cpu.mode" + }, + "examples": [ + "idle", + "interrupt" + ], + "name": "system.cpu.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "user", + "stability": "development", + "value": "user" + }, + { + "id": "system", + "stability": "development", + "value": "system" + }, + { + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "id": "steal", + "stability": "development", + "value": "steal" + } + ] + } + }, + { + "brief": "Deprecated, use `network.connection.state` instead.", + "deprecated": { + "note": "Replaced by `network.connection.state`.", + "reason": "renamed", + "renamed_to": "network.connection.state" + }, + "examples": [ + "close_wait" + ], + "name": "system.network.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "close", + "stability": "development", + "value": "close" + }, + { + "id": "close_wait", + "stability": "development", + "value": "close_wait" + }, + { + "id": "closing", + "stability": "development", + "value": "closing" + }, + { + "id": "delete", + "stability": "development", + "value": "delete" + }, + { + "id": "established", + "stability": "development", + "value": "established" + }, + { + "id": "fin_wait_1", + "stability": "development", + "value": "fin_wait_1" + }, + { + "id": "fin_wait_2", + "stability": "development", + "value": "fin_wait_2" + }, + { + "id": "last_ack", + "stability": "development", + "value": "last_ack" + }, + { + "id": "listen", + "stability": "development", + "value": "listen" + }, + { + "id": "syn_recv", + "stability": "development", + "value": "syn_recv" + }, + { + "id": "syn_sent", + "stability": "development", + "value": "syn_sent" + }, + { + "id": "time_wait", + "stability": "development", + "value": "time_wait" + } + ] + } + }, + { + "brief": "Deprecated, use `cpu.logical_number` instead.", + "deprecated": { + "note": "Replaced by `cpu.logical_number`.", + "reason": "renamed", + "renamed_to": "cpu.logical_number" + }, + "examples": [ + 1 + ], + "name": "system.cpu.logical_number", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `system.paging.fault.type` instead.", + "deprecated": { + "note": "Replaced by `system.paging.fault.type`.", + "reason": "renamed", + "renamed_to": "system.paging.fault.type" + }, + "examples": [ + "minor" + ], + "name": "system.paging.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "major", + "stability": "development", + "value": "major" + }, + { + "id": "minor", + "stability": "development", + "value": "minor" + } + ] + } + }, + { + "brief": "Deprecated, use `process.state` instead.", + "deprecated": { + "note": "Replaced by `process.state`.", + "reason": "renamed", + "renamed_to": "process.state" + }, + "examples": [ + "running" + ], + "name": "system.process.status", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "running", + "stability": "development", + "value": "running" + }, + { + "id": "sleeping", + "stability": "development", + "value": "sleeping" + }, + { + "id": "stopped", + "stability": "development", + "value": "stopped" + }, + { + "id": "defunct", + "stability": "development", + "value": "defunct" + } + ] + } + } + ], + "brief": "Deprecated system attributes.", + "display_name": "Deprecated System Attributes", + "id": "registry.system.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `vcs.ref.head.name` instead.\n", + "deprecated": { + "note": "Replaced by `vcs.ref.head.name`.", + "reason": "renamed", + "renamed_to": "vcs.ref.head.name" + }, + "examples": [ + "my-feature-branch", + "tag-1-test" + ], + "name": "vcs.repository.ref.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `vcs.ref.head.type` instead.\n", + "deprecated": { + "note": "Replaced by `vcs.ref.head.type`.", + "reason": "renamed", + "renamed_to": "vcs.ref.head.type" + }, + "examples": [ + "branch", + "tag" + ], + "name": "vcs.repository.ref.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "[branch](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbranchabranch)", + "id": "branch", + "stability": "development", + "value": "branch" + }, + { + "brief": "[tag](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddeftagatag)", + "id": "tag", + "stability": "development", + "value": "tag" + } + ] + } + }, + { + "brief": "Deprecated, use `vcs.ref.head.revision` instead.\n", + "deprecated": { + "note": "Replaced by `vcs.ref.head.revision`.", + "reason": "renamed", + "renamed_to": "vcs.ref.head.revision" + }, + "examples": [ + "9d59409acf479dfa0df1aa568182e43e43df8bbe28d60fcf2bc52e30068802cc", + "main", + "123", + "HEAD" + ], + "name": "vcs.repository.ref.revision", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `vcs.change.title` instead.\n", + "deprecated": { + "note": "Replaced by `vcs.change.title`.", + "reason": "renamed", + "renamed_to": "vcs.change.title" + }, + "examples": [ + "Fixes broken thing", + "feat: add my new feature", + "[chore] update dependency" + ], + "name": "vcs.repository.change.title", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `vcs.change.id` instead.\n", + "deprecated": { + "note": "Replaced by `vcs.change.id`.", + "reason": "renamed", + "renamed_to": "vcs.change.id" + }, + "examples": [ + "123" + ], + "name": "vcs.repository.change.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated vcs attributes.\n", + "id": "registry.vcs.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/vcs/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated. Use `android.app.state` attribute instead.", + "deprecated": { + "note": "Replaced by `android.app.state`.", + "reason": "renamed", + "renamed_to": "android.app.state" + }, + "name": "android.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has been called in the app for the first time.\n", + "id": "created", + "stability": "development", + "value": "created" + }, + { + "brief": "Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been called when the app was in the foreground state.\n", + "id": "background", + "stability": "development", + "value": "background" + }, + { + "brief": "Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has been called when the app was in either the created or background states.\n", + "id": "foreground", + "stability": "development", + "value": "foreground" + } + ] + } + } + ], + "brief": "This document defines attributes that represents an occurrence of a lifecycle transition on the Android platform.\n", + "display_name": "Deprecated Android Attributes", + "id": "registry.android.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/android/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Array of brand name and version separated by a space", + "examples": [ + [ + " Not A;Brand 99", + "Chromium 99", + "Chrome 99" + ] + ], + "name": "browser.brands", + "note": "This value is intended to be taken from the [UA client hints API](https://wicg.github.io/ua-client-hints/#interface) (`navigator.userAgentData.brands`).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The platform on which the browser is running", + "examples": [ + "Windows", + "macOS", + "Android" + ], + "name": "browser.platform", + "note": "This value is intended to be taken from the [UA client hints API](https://wicg.github.io/ua-client-hints/#interface) (`navigator.userAgentData.platform`). If unavailable, the legacy `navigator.platform` API SHOULD NOT be used instead and this attribute SHOULD be left unset in order for the values to be consistent.\nThe list of possible values is defined in the [W3C User-Agent Client Hints specification](https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform). Note that some (but not all) of these values can overlap with values in the [`os.type` and `os.name` attributes](./os.md). However, for consistency, the values in the `browser.platform` attribute should capture the exact value that the user agent provides.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A boolean that is true if the browser is running on a mobile device", + "name": "browser.mobile", + "note": "This value is intended to be taken from the [UA client hints API](https://wicg.github.io/ua-client-hints/#interface) (`navigator.userAgentData.mobile`). If unavailable, this attribute SHOULD be left unset.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Preferred language of the user using the browser", + "examples": [ + "en", + "en-US", + "fr", + "fr-FR" + ], + "name": "browser.language", + "note": "This value is intended to be taken from the Navigator API `navigator.language`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The web browser attributes\n", + "display_name": "Browser Attributes", + "id": "registry.browser", + "lineage": { + "provenance": { + "path": "/home/weaver/source/browser/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The method or function fully-qualified name without arguments. The value should fit the natural representation of the language runtime, which is also likely the same used within `code.stacktrace` attribute value. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Function\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": [ + "com.example.MyHttpService.serveRequest", + "GuzzleHttp\\Client::transfer", + "fopen" + ], + "name": "code.function.name", + "note": "Values and format depends on each language runtime, thus it is impossible to provide an exhaustive list of examples.\nThe values are usually the same (or prefixes of) the ones found in native stack trace representation stored in\n`code.stacktrace` without information on arguments.\n\nExamples:\n\n* Java method: `com.example.MyHttpService.serveRequest`\n* Java anonymous class method: `com.mycompany.Main$1.myMethod`\n* Java lambda method: `com.mycompany.Main$$Lambda/0x0000748ae4149c00.myMethod`\n* PHP function: `GuzzleHttp\\Client::transfer`\n* Go function: `github.com/my/repo/pkg.foo.func5`\n* Elixir: `OpenTelemetry.Ctx.new`\n* Erlang: `opentelemetry_ctx:new`\n* Rust: `playground::my_module::my_cool_func`\n* C function: `fopen`\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path). This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Function\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": "/usr/local/MyApplication/content_root/app/index.php", + "name": "code.file.path", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The line number in `code.file.path` best representing the operation. It SHOULD point within the code unit named in `code.function.name`. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Line\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": 42, + "name": "code.line.number", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "The column number in `code.file.path` best representing the operation. It SHOULD point within the code unit named in `code.function.name`. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Line\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": 16, + "name": "code.column.number", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "A stacktrace as a string in the natural representation for the language runtime. The representation is identical to [`exception.stacktrace`](/docs/exceptions/exceptions-spans.md#stacktrace-representation). This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Location\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": "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)\n", + "name": "code.stacktrace", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "These attributes provide context about source code\n", + "display_name": "Code Attributes", + "id": "registry.code", + "lineage": { + "provenance": { + "path": "/home/weaver/source/code/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the [deployment environment](https://wikipedia.org/wiki/Deployment_environment) (aka deployment tier).\n", + "examples": [ + "staging", + "production" + ], + "name": "deployment.environment.name", + "note": "`deployment.environment.name` does not affect the uniqueness constraints defined through\nthe `service.namespace`, `service.name` and `service.instance.id` resource attributes.\nThis implies that resources carrying the following attribute combinations MUST be\nconsidered to be identifying the same service:\n\n- `service.name=frontend`, `deployment.environment.name=production`\n- `service.name=frontend`, `deployment.environment.name=staging`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The software deployment.\n", + "id": "entity.deployment", + "lineage": { + "attributes": { + "deployment.environment.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.deployment" + } + }, + "provenance": { + "path": "/home/weaver/source/deployment/entities.yaml", + "registry_id": "main" + } + }, + "name": "deployment", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Cloud provider-specific native identifier of the monitored cloud resource (e.g. an [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) on AWS, a [fully qualified resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) on Azure, a [full resource name](https://google.aip.dev/122#full-resource-names) on GCP)\n", + "examples": [ + "arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function", + "//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID", + "/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e" + ], + "name": "cloud.resource_id", + "note": "On some cloud providers, it may not be possible to determine the full ID at startup,\nso it may be necessary to set `cloud.resource_id` as a span attribute instead.\n\nThe exact value to use for `cloud.resource_id` depends on the cloud provider.\nThe following well-known definitions MUST be used if you set this attribute and they apply:\n\n- **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).\n Take care not to use the \"invoked ARN\" directly but replace any\n [alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)\n with the resolved function version, as the same runtime instance may be invocable with\n multiple different aliases.\n- **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names)\n- **Azure:** The [Fully Qualified Resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) of the invoked function,\n *not* the function app, having the form\n `/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e`.\n This means that a span attribute MUST be used, as an Azure function app can host multiple functions that would usually share\n a TracerProvider.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The invocation ID of the current function invocation.\n", + "examples": "af9d5aa4-a685-4c5f-a22b-444f80b3cc28", + "name": "faas.invocation_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "note": "For the server/consumer span on the incoming side,\n`faas.trigger` MUST be set.\n\nClients invoking FaaS instances usually cannot set `faas.trigger`,\nsince they would typically need to look in the payload to determine\nthe event type. If clients set it, it should be the same as the\ntrigger that corresponding incoming would have (i.e., this has\nnothing to do with the underlying transport used to make the API\ncall to invoke the lambda, which is often HTTP).\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "This span represents a serverless function (FaaS) execution.\n", + "id": "faas.attributes", + "lineage": { + "attributes": { + "cloud.resource_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloud" + }, + "faas.invocation_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + }, + "faas.trigger": { + "inherited_fields": [ + "brief", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "note" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/spans.yaml", + "registry_id": "main" + } + }, + "note": "Span `name` should be set to the function name being executed.\nDepending on the value of the `faas.trigger` attribute, additional attributes MUST be set.\n\nFor example, an `http` trigger SHOULD follow the [HTTP Server semantic conventions](/docs/http/http-spans.md#http-server-span).\nFor more information, refer to the [Function Trigger Type](#function-trigger-type) section.\n\nIf Spans following this convention are produced, a Resource of type `faas` MUST exist following the [Resource semantic convention](/docs/resource/faas.md).\n", + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "A string containing the time when the data was accessed in the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n", + "examples": "2020-01-23T13:47:06Z", + "name": "faas.document.time", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The document name/table subjected to the operation. For example, in Cloud Storage or S3 is the name of the file, and in Cosmos DB the table name.\n", + "examples": [ + "myFile.txt", + "myTableName" + ], + "name": "faas.document.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the source on which the triggering operation was performed. For example, in Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the database name.\n", + "examples": [ + "myBucketName", + "myDbName" + ], + "name": "faas.document.collection", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes the type of the operation that was performed on the data.", + "name": "faas.document.operation", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "When a new object is created.", + "id": "insert", + "stability": "development", + "value": "insert" + }, + { + "brief": "When an object is modified.", + "id": "edit", + "stability": "development", + "value": "edit" + }, + { + "brief": "When an object is deleted.", + "id": "delete", + "stability": "development", + "value": "delete" + } + ] + } + } + ], + "brief": "This span represents server side if the FaaS invocations triggered in response response to some data source operation such as a database or filesystem read/write.\n", + "id": "span.faas.datasource.server", + "lineage": { + "attributes": { + "faas.document.collection": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.faas" + }, + "faas.document.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + }, + "faas.document.operation": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.faas" + }, + "faas.document.time": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/spans.yaml", + "registry_id": "main" + } + }, + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "A string containing the function invocation time in the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n", + "examples": "2020-01-23T13:47:06Z", + "name": "faas.time", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A string containing the schedule period as [Cron Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).\n", + "examples": "0/5 * * * ? *", + "name": "faas.cron", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents server side if the FaaS invocations triggered by a timer.\n", + "id": "span.faas.timer.server", + "lineage": { + "attributes": { + "faas.cron": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + }, + "faas.time": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/spans.yaml", + "registry_id": "main" + } + }, + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "A boolean that is true if the serverless function is executed for the first time (aka cold-start).\n", + "name": "faas.coldstart", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "note": "For the server/consumer span on the incoming side,\n`faas.trigger` MUST be set.\n\nClients invoking FaaS instances usually cannot set `faas.trigger`,\nsince they would typically need to look in the payload to determine\nthe event type. If clients set it, it should be the same as the\ntrigger that corresponding incoming would have (i.e., this has\nnothing to do with the underlying transport used to make the API\ncall to invoke the lambda, which is often HTTP).\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "This span represents server (incoming) side of the FaaS invocation.\n", + "id": "span.faas.server", + "lineage": { + "attributes": { + "faas.coldstart": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.faas" + }, + "faas.trigger": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/spans.yaml", + "registry_id": "main" + } + }, + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The name of the invoked function.\n", + "examples": "my-function", + "name": "faas.invoked_name", + "note": "SHOULD be equal to the `faas.name` resource attribute of the invoked function.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The cloud provider of the invoked function.\n", + "name": "faas.invoked_provider", + "note": "SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Alibaba Cloud", + "id": "alibaba_cloud", + "stability": "development", + "value": "alibaba_cloud" + }, + { + "brief": "Amazon Web Services", + "id": "aws", + "stability": "development", + "value": "aws" + }, + { + "brief": "Microsoft Azure", + "id": "azure", + "stability": "development", + "value": "azure" + }, + { + "brief": "Google Cloud Platform", + "id": "gcp", + "stability": "development", + "value": "gcp" + }, + { + "brief": "Tencent Cloud", + "id": "tencent_cloud", + "stability": "development", + "value": "tencent_cloud" + } + ] + } + }, + { + "brief": "The cloud region of the invoked function.\n", + "examples": "eu-central-1", + "name": "faas.invoked_region", + "note": "SHOULD be equal to the `cloud.region` resource attribute of the invoked function.\n", + "requirement_level": { + "conditionally_required": "For some cloud providers, like AWS or GCP, the region in which a function is hosted is essential to uniquely identify the function and also part of its endpoint. Since it\u0027s part of the endpoint being called, the region is always known to clients. In these cases, `faas.invoked_region` MUST be set accordingly. If the region is unknown to the client or not required for identifying the invoked function, setting `faas.invoked_region` is optional.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents an outgoing call to a FaaS service.\n", + "id": "span.faas.client", + "lineage": { + "attributes": { + "faas.invoked_name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.faas" + }, + "faas.invoked_provider": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.faas" + }, + "faas.invoked_region": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.faas" + } + }, + "provenance": { + "path": "/home/weaver/source/faas/spans.yaml", + "registry_id": "main" + } + }, + "note": "The values reported by the client for the attributes listed below SHOULD be equal to\nthe corresponding [FaaS resource attributes][] and [Cloud resource attributes][],\nwhich the invoked FaaS instance reports about itself, if it\u0027s instrumented.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the memory module\n", + "examples": [ + "DDR4", + "DDR5", + "LPDDR5" + ], + "name": "hw.memory.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for memory module metrics\n", + "id": "metric_attributes.hw.memory", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/memory-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the memory module\n", + "examples": [ + "DDR4", + "DDR5", + "LPDDR5" + ], + "name": "hw.memory.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Size of the memory module.", + "id": "metric.hw.memory.size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/memory-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.memory.size", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "udp" + ], + "name": "network.transport", + "note": "Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "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": "opt_in", + "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": [ + [ + "application/json" + ], + [ + "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.\nIncluding all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nThe `User-Agent` header is already captured in the `user_agent.original` attribute.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` SHOULD be recorded as the `http.request.header.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` SHOULD be recorded as the `http.request.header.x-forwarded-for`\n attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]` or `[\"1.2.3.4, 1.2.3.5\"]` depending on the HTTP library.\n", + "requirement_level": "opt_in", + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "sampling_relevant": true, + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "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": { + "conditionally_required": "If and only if it\u0027s different than `http.request.method`." + }, + "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": "if and only if request was retried." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The total size of the request in bytes. This should be the total number of bytes sent over the wire, including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and request body if any.\n", + "examples": 1437, + "name": "http.request.size", + "requirement_level": "opt_in", + "stability": "development", + "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": "opt_in", + "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": [ + [ + "application/json" + ], + [ + "abc", + "def" + ] + ], + "name": "http.response.header", + "note": "Instrumentations SHOULD require an explicit configuration of which headers are to be captured.\nIncluding all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` header SHOULD be recorded as the `http.request.response.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `My-custom-header: abc, def` header SHOULD be recorded as the `http.response.header.my-custom-header`\n attribute with value `[\"abc\", \"def\"]` or `[\"abc, def\"]` depending on the HTTP library.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "template[string[]]" + }, + { + "brief": "The total size of the response in bytes. This should be the total number of bytes sent over the wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and response body and trailers if any.\n", + "examples": 1437, + "name": "http.response.size", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "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\nis not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`.\nIn such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed).\n\nSensitive content provided in `url.full` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the\nvalue `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`https://www.example.com/path?color=blue\u0026sig=REDACTED`.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n", + "examples": [ + "/users/{id}", + "/users/:id", + "/users?id={id}" + ], + "name": "url.template", + "note": "The `url.template` MUST have low cardinality. It is not usually available on HTTP clients, but may be known by the application or specialized HTTP instrumentation.\n", + "requirement_level": "opt_in", + "stability": "development", + "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", + "YourApp/1.0.0 grpc-java-okhttp/1.27.2" + ], + "name": "user_agent.original", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Specifies the category of synthetic traffic, such as tests or bots.\n", + "name": "user_agent.synthetic.type", + "note": "This attribute MAY be derived from the contents of the `user_agent.original` attribute. Components that populate the attribute are responsible for determining what they consider to be synthetic bot or test traffic. This attribute can either be set for self-identification purposes, or on telemetry detected to be generated as a result of a synthetic request. This attribute is useful for distinguishing between genuine client traffic and synthetic traffic generated by bots or tests.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "Bot source.", + "id": "bot", + "stability": "development", + "value": "bot" + }, + { + "brief": "Synthetic test source.", + "id": "test", + "stability": "development", + "value": "test" + } + ] + } + } + ], + "brief": "This span represents an outbound HTTP request.\n", + "id": "span.http.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.header": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.http" + }, + "http.request.method_original": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.resend_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.header": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.url" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + }, + "user_agent.original": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/spans.yaml", + "registry_id": "main" + } + }, + "note": "There are two ways HTTP client spans can be implemented in an instrumentation:\n\n1. Instrumentations SHOULD create an HTTP span for each attempt to send an HTTP request over the wire.\n In case the request is resent, the resend attempts MUST follow the [HTTP resend spec](#http-request-retries-and-redirects).\n In this case, instrumentations SHOULD NOT (also) emit a logical encompassing HTTP client span.\n\n2. If for some reason it is not possible to emit a span for each send attempt (because e.g. the instrumented library does not expose hooks that would allow this),\n instrumentations MAY create an HTTP span for the top-most operation of the HTTP client.\n In this case, the `url.full` MUST be the absolute URL that was originally requested, before any HTTP-redirects that may happen when executing the request.\n\n**Span name:** refer to the [Span Name](/docs/http/http-spans.md#name) section.\n\n**Span kind** MUST be `CLIENT`.\n\n**Span status:** refer to the [Span Status](/docs/http/http-spans.md#status) section.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "udp" + ], + "name": "network.transport", + "note": "Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Local socket address. Useful in case of a multi-IP host.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.local.address", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Local socket port. Useful in case of a multi-port host.", + "examples": [ + 65123 + ], + "name": "network.local.port", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "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": "opt_in", + "stability": "development", + "type": "int" + }, + { + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "sampling_relevant": true, + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "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": { + "conditionally_required": "If and only if it\u0027s different than `http.request.method`." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The total size of the request in bytes. This should be the total number of bytes sent over the wire, including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and request body if any.\n", + "examples": 1437, + "name": "http.request.size", + "requirement_level": "opt_in", + "stability": "development", + "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": "opt_in", + "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": [ + [ + "application/json" + ], + [ + "abc", + "def" + ] + ], + "name": "http.response.header", + "note": "Instrumentations SHOULD require an explicit configuration of which headers are to be captured.\nIncluding all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` header SHOULD be recorded as the `http.request.response.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `My-custom-header: abc, def` header SHOULD be recorded as the `http.response.header.my-custom-header`\n attribute with value `[\"abc\", \"def\"]` or `[\"abc, def\"]` depending on the HTTP library.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "template[string[]]" + }, + { + "brief": "The total size of the response in bytes. This should be the total number of bytes sent over the wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and response body and trailers if any.\n", + "examples": 1437, + "name": "http.response.size", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Specifies the category of synthetic traffic, such as tests or bots.\n", + "name": "user_agent.synthetic.type", + "note": "This attribute MAY be derived from the contents of the `user_agent.original` attribute. Components that populate the attribute are responsible for determining what they consider to be synthetic bot or test traffic. This attribute can either be set for self-identification purposes, or on telemetry detected to be generated as a result of a synthetic request. This attribute is useful for distinguishing between genuine client traffic and synthetic traffic generated by bots or tests.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "Bot source.", + "id": "bot", + "stability": "development", + "value": "bot" + }, + { + "brief": "Synthetic test source.", + "id": "test", + "stability": "development", + "value": "test" + } + ] + } + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "83.164.160.102" + ], + "name": "client.address", + "note": "The IP address of the original client behind all proxies, if known (e.g. from [Forwarded#for](https://developer.mozilla.org/docs/Web/HTTP/Headers/Forwarded#for), [X-Forwarded-For](https://developer.mozilla.org/docs/Web/HTTP/Headers/X-Forwarded-For), or a similar header). Otherwise, the immediate client peer address.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The port of whichever client was captured in `client.address`.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "brief": "HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n", + "examples": [ + [ + "application/json" + ], + [ + "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.\nIncluding all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nThe `User-Agent` header is already captured in the `user_agent.original` attribute.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` SHOULD be recorded as the `http.request.header.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` SHOULD be recorded as the `http.request.header.x-forwarded-for`\n attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]` or `[\"1.2.3.4, 1.2.3.5\"]` depending on the HTTP library.\n", + "requirement_level": "opt_in", + "sampling_relevant": true, + "stability": "stable", + "type": "template[string[]]" + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n", + "requirement_level": { + "conditionally_required": "If available and `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\n", + "examples": [ + "/search" + ], + "name": "url.path", + "note": "Sensitive content provided in `url.path` SHOULD be scrubbed when instrumentations can identify it.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\n", + "examples": [ + "q=OpenTelemetry" + ], + "name": "url.query", + "note": "Sensitive content provided in `url.query` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the value `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`q=OpenTelemetry\u0026sig=REDACTED`.\n", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "sampling_relevant": true, + "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", + "YourApp/1.0.0 grpc-java-okhttp/1.27.2" + ], + "name": "user_agent.original", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + } + ], + "brief": "This span represents an inbound HTTP request.\n", + "id": "span.http.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "sampling_relevant" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.header": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.http" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.http" + }, + "http.request.method_original": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.header": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.local.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.local.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "url.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.url" + }, + "url.query": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.url" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.url" + }, + "user_agent.original": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.user_agent" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/spans.yaml", + "registry_id": "main" + } + }, + "note": "**Span name:** refer to the [Span Name](/docs/http/http-spans.md#name) section.\n\n**Span kind** MUST be `SERVER`.\n\n**Span status:** refer to the [Span Status](/docs/http/http-spans.md#status) section.\n", + "span_kind": "server", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The stream associated with the log. See below for a list of well-known values.\n", + "name": "log.iostream", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Logs from stdout stream", + "id": "stdout", + "stability": "development", + "value": "stdout" + }, + { + "brief": "Events from stderr stream", + "id": "stderr", + "stability": "development", + "value": "stderr" + } + ] + } + } + ], + "brief": "This document defines log attributes\n", + "display_name": "General Log Attributes", + "id": "registry.log", + "lineage": { + "provenance": { + "path": "/home/weaver/source/log/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The basename of the file.\n", + "examples": [ + "audit.log" + ], + "name": "log.file.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full path to the file.\n", + "examples": [ + "/var/log/mysql/audit.log" + ], + "name": "log.file.path", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The basename of the file, with symlinks resolved.\n", + "examples": [ + "uuid.log" + ], + "name": "log.file.name_resolved", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full path to the file, with symlinks resolved.\n", + "examples": [ + "/var/lib/docker/uuid.log" + ], + "name": "log.file.path_resolved", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes for a file to which log was emitted.\n", + "display_name": "Log File Attributes", + "id": "registry.log.file", + "lineage": { + "provenance": { + "path": "/home/weaver/source/log/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "A unique identifier for the Log Record.\n", + "examples": [ + "01ARZ3NDEKTSV4RRFFQ69G5FAV" + ], + "name": "log.record.uid", + "note": "If an id is provided, other log records with the same id will be considered duplicates and can be removed safely. This means, that two distinguishable log records MUST have different values.\nThe id MAY be an [Universally Unique Lexicographically Sortable Identifier (ULID)](https://github.com/ulid/spec), but other identifiers (e.g. UUID) may be used as needed.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The complete original Log Record.\n", + "examples": [ + "77 \u003c86\u003e1 2015-08-06T21:58:59.694Z 192.168.2.133 inactive - - - Something happened", + "[INFO] 8/3/24 12:34:56 Something happened" + ], + "name": "log.record.original", + "note": "This value MAY be added when processing a Log Record which was originally transmitted as a string or equivalent data type AND the Body field of the Log Record does not contain the same value. (e.g. a syslog or a log record read from a file.)\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines the generic attributes that may be used in any Log Record.\n", + "display_name": "Log Record Attributes", + "id": "registry.log.record", + "lineage": { + "provenance": { + "path": "/home/weaver/source/log/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "ONC/Sun RPC program version.", + "name": "onc_rpc.version", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "ONC/Sun RPC procedure number.", + "name": "onc_rpc.procedure.number", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "ONC/Sun RPC procedure name.", + "examples": [ + "OPEN", + "READ", + "GETATTR" + ], + "name": "onc_rpc.procedure.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "ONC/Sun RPC program name.", + "examples": [ + "portmapper", + "nfs" + ], + "name": "onc_rpc.program.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for [ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "display_name": "ONC RPC (Sun RPC) attributes", + "id": "registry.onc_rpc", + "lineage": { + "provenance": { + "path": "/home/weaver/source/onc_rpc/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The [`service.name`](/docs/resource/README.md#service) of the remote service. SHOULD be equal to the actual `service.name` resource attribute of the remote service if any.\n", + "examples": "AuthTokenCache", + "name": "peer.service", + "note": "Examples of `peer.service` that users may specify:\n\n- A Redis cache of auth tokens as `peer.service=\"AuthTokenCache\"`.\n- A gRPC service `rpc.service=\"io.opentelemetry.AuthService\"` may be hosted in both a gateway, `peer.service=\"ExternalApiService\"` and a backend, `peer.service=\"AuthService\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Operations that access some remote service.", + "id": "peer", + "lineage": { + "attributes": { + "peer.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.peer" + } + }, + "provenance": { + "path": "/home/weaver/source/peer/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + } + ], + "brief": "General server attributes.\n", + "id": "server", + "lineage": { + "attributes": { + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/server/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The human readable name of a [test suite](https://wikipedia.org/wiki/Test_suite).\n", + "examples": [ + "TestSuite1" + ], + "name": "test.suite.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The status of the test suite run.\n", + "examples": [ + "success", + "failure", + "skipped", + "aborted", + "timed_out", + "in_progress" + ], + "name": "test.suite.run.status", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "success", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "failure", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "skipped", + "id": "skipped", + "stability": "development", + "value": "skipped" + }, + { + "brief": "aborted", + "id": "aborted", + "stability": "development", + "value": "aborted" + }, + { + "brief": "timed_out", + "id": "timed_out", + "stability": "development", + "value": "timed_out" + }, + { + "brief": "in_progress", + "id": "in_progress", + "stability": "development", + "value": "in_progress" + } + ] + } + }, + { + "brief": "The fully qualified human readable name of the [test case](https://wikipedia.org/wiki/Test_case).\n", + "examples": [ + "org.example.TestCase1.test1", + "example/tests/TestCase1.test1", + "ExampleTestCase1_test1" + ], + "name": "test.case.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The status of the actual test case result from test execution.\n", + "examples": [ + "pass", + "fail" + ], + "name": "test.case.result.status", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "pass", + "id": "pass", + "stability": "development", + "value": "pass" + }, + { + "brief": "fail", + "id": "fail", + "stability": "development", + "value": "fail" + } + ] + } + } + ], + "brief": "This group describes attributes specific to [software tests](https://wikipedia.org/wiki/Software_testing).\n", + "display_name": "Test Attributes", + "id": "registry.test", + "lineage": { + "provenance": { + "path": "/home/weaver/source/test/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The version of the web engine.\n", + "examples": [ + "21.0.0" + ], + "name": "webengine.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Additional description of the web engine (e.g. detailed version and edition information).\n", + "examples": [ + "WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) - 2.2.2.Final" + ], + "name": "webengine.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the web engine.\n", + "examples": [ + "WildFly" + ], + "name": "webengine.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Resource describing the packaged software running the application code. Web engines are typically executed using process.runtime.\n", + "id": "entity.webengine", + "lineage": { + "attributes": { + "webengine.description": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.webengine" + }, + "webengine.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.webengine" + }, + "webengine.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.webengine" + } + }, + "provenance": { + "path": "/home/weaver/source/webengine/entities.yaml", + "registry_id": "main" + } + }, + "name": "webengine", + "stability": "development", + "type": "entity" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The human readable name of the pipeline within a CI/CD system.\n", + "examples": [ + "Build and Test", + "Lint", + "Deploy Go Project", + "deploy_to_environment" + ], + "name": "cicd.pipeline.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The pipeline run goes through these states during its lifecycle.\n", + "examples": [ + "pending", + "executing", + "finalizing" + ], + "name": "cicd.pipeline.run.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The run pending state spans from the event triggering the pipeline run until the execution of the run starts (eg. time spent in a queue, provisioning agents, creating run resources).\n", + "id": "pending", + "stability": "development", + "value": "pending" + }, + { + "brief": "The executing state spans the execution of any run tasks (eg. build, test).", + "id": "executing", + "stability": "development", + "value": "executing" + }, + { + "brief": "The finalizing state spans from when the run has finished executing (eg. cleanup of run resources).", + "id": "finalizing", + "stability": "development", + "value": "finalizing" + } + ] + } + }, + { + "brief": "The result of a pipeline run.\n", + "examples": [ + "success", + "failure", + "timeout", + "skipped" + ], + "name": "cicd.pipeline.result", + "requirement_level": { + "conditionally_required": "If and only if the pipeline run result has been set during that state." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "The pipeline run finished successfully.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "The pipeline run did not finish successfully, eg. due to a compile error or a failing test. Such failures are usually detected by non-zero exit codes of the tools executed in the pipeline run.", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "The pipeline run failed due to an error in the CICD system, eg. due to the worker being killed.", + "id": "error", + "stability": "development", + "value": "error" + }, + { + "brief": "A timeout caused the pipeline run to be interrupted.", + "id": "timeout", + "stability": "development", + "value": "timeout" + }, + { + "brief": "The pipeline run was cancelled, eg. by a user manually cancelling the pipeline run.", + "id": "cancellation", + "stability": "development", + "value": "cancellation" + }, + { + "brief": "The pipeline run was skipped, eg. due to a precondition not being met.", + "id": "skip", + "stability": "development", + "value": "skip" + } + ] + } + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the pipeline run failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Duration of a pipeline run grouped by pipeline, state and result.", + "entity_associations": [ + "cicd.pipeline" + ], + "id": "metric.cicd.pipeline.run.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "cicd.pipeline.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.pipeline.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.pipeline.run.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "cicd.pipeline.run.duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The human readable name of the pipeline within a CI/CD system.\n", + "examples": [ + "Build and Test", + "Lint", + "Deploy Go Project", + "deploy_to_environment" + ], + "name": "cicd.pipeline.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The pipeline run goes through these states during its lifecycle.\n", + "examples": [ + "pending", + "executing", + "finalizing" + ], + "name": "cicd.pipeline.run.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The run pending state spans from the event triggering the pipeline run until the execution of the run starts (eg. time spent in a queue, provisioning agents, creating run resources).\n", + "id": "pending", + "stability": "development", + "value": "pending" + }, + { + "brief": "The executing state spans the execution of any run tasks (eg. build, test).", + "id": "executing", + "stability": "development", + "value": "executing" + }, + { + "brief": "The finalizing state spans from when the run has finished executing (eg. cleanup of run resources).", + "id": "finalizing", + "stability": "development", + "value": "finalizing" + } + ] + } + } + ], + "brief": "The number of pipeline runs currently active in the system by state.", + "entity_associations": [ + "cicd.pipeline" + ], + "id": "metric.cicd.pipeline.run.active", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "cicd.pipeline.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.pipeline.run.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "cicd.pipeline.run.active", + "stability": "development", + "type": "metric", + "unit": "{run}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The state of a CICD worker / agent.\n", + "examples": [ + "idle", + "busy", + "down" + ], + "name": "cicd.worker.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The worker is not performing work for the CICD system. It is available to the CICD system to perform work on (online / idle).", + "id": "available", + "note": "Pipelines might have conditions on which workers they are able to run so not every worker might be available to every pipeline.", + "stability": "development", + "value": "available" + }, + { + "brief": "The worker is performing work for the CICD system.", + "id": "busy", + "stability": "development", + "value": "busy" + }, + { + "brief": "The worker is not available to the CICD system (disconnected / down).", + "id": "offline", + "stability": "development", + "value": "offline" + } + ] + } + } + ], + "brief": "The number of workers on the CICD system by state.", + "id": "metric.cicd.worker.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "cicd.worker.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "cicd.worker.count", + "stability": "development", + "type": "metric", + "unit": "{count}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The human readable name of the pipeline within a CI/CD system.\n", + "examples": [ + "Build and Test", + "Lint", + "Deploy Go Project", + "deploy_to_environment" + ], + "name": "cicd.pipeline.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The number of errors encountered in pipeline runs (eg. compile, test failures).", + "entity_associations": [ + "cicd.pipeline" + ], + "id": "metric.cicd.pipeline.run.errors", + "instrument": "counter", + "lineage": { + "attributes": { + "cicd.pipeline.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "cicd.pipeline.run.errors", + "note": "There might be errors in a pipeline run that are non fatal (eg. they are suppressed) or in a parallel stage multiple stages could have a fatal error.\nThis means that this error count might not be the same as the count of metric `cicd.pipeline.run.duration` with run result `failure`.\n", + "stability": "development", + "type": "metric", + "unit": "{error}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of a component of the CICD system.", + "examples": [ + "controller", + "scheduler", + "agent" + ], + "name": "cicd.system.component", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The number of errors in a component of the CICD system (eg. controller, scheduler, agent).", + "id": "metric.cicd.system.errors", + "instrument": "counter", + "lineage": { + "attributes": { + "cicd.system.component": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "cicd.system.errors", + "note": "Errors in pipeline run execution are explicitly excluded. Ie a test failure is not counted in this metric.", + "stability": "development", + "type": "metric", + "unit": "{error}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The time the container has been running.", + "id": "metric.container.uptime", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.uptime", + "note": "Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available.\nThe actual accuracy would depend on the instrumentation and operating system.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The CPU mode for this data point. A container\u0027s CPU metric SHOULD be characterized _either_ by data points with no `mode` labels, _or only_ data points with `mode` labels.", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "note": "Following states SHOULD be used: `user`, `system`, `kernel`", + "requirement_level": { + "conditionally_required": "Required if mode is available, i.e. metrics coming from the Docker Stats API." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + } + ], + "brief": "Total CPU time consumed.", + "id": "metric.container.cpu.time", + "instrument": "counter", + "lineage": { + "attributes": { + "cpu.mode": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.cpu.time", + "note": "Total CPU time consumed by the specific container on all available CPU cores\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The CPU mode for this data point. A container\u0027s CPU metric SHOULD be characterized _either_ by data points with no `mode` labels, _or only_ data points with `mode` labels.", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "note": "Following states SHOULD be used: `user`, `system`, `kernel`", + "requirement_level": { + "conditionally_required": "Required if mode is available, i.e. metrics coming from the Docker Stats API." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + } + ], + "brief": "Container\u0027s CPU usage, measured in cpus. Range from 0 to the number of allocatable CPUs.", + "id": "metric.container.cpu.usage", + "instrument": "gauge", + "lineage": { + "attributes": { + "cpu.mode": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.cpu.usage", + "note": "CPU usage of the specific container on all available CPU cores, averaged over the sample window\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Memory usage of the container.", + "id": "metric.container.memory.usage", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.memory.usage", + "note": "Memory usage of the container.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Container memory available.", + "entity_associations": [ + "container" + ], + "id": "metric.container.memory.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.memory.available", + "note": "Available memory for use. This is defined as the memory limit - workingSetBytes. If memory limit is undefined, the available bytes is omitted.\nIn general, this metric can be derived from [cadvisor](https://github.com/google/cadvisor/blob/v0.53.0/docs/storage/prometheus.md#prometheus-container-metrics) and by subtracting the `container_memory_working_set_bytes` metric from the `container_spec_memory_limit_bytes` metric.\nIn K8s, this metric is derived from the [MemoryStats.AvailableBytes](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [PodStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#PodStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Container memory RSS.", + "entity_associations": [ + "container" + ], + "id": "metric.container.memory.rss", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.memory.rss", + "note": "In general, this metric can be derived from [cadvisor](https://github.com/google/cadvisor/blob/v0.53.0/docs/storage/prometheus.md#prometheus-container-metrics) and specifically the `container_memory_rss` metric.\nIn K8s, this metric is derived from the [MemoryStats.RSSBytes](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [PodStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#PodStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Container memory working set.", + "entity_associations": [ + "container" + ], + "id": "metric.container.memory.working_set", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.memory.working_set", + "note": "In general, this metric can be derived from [cadvisor](https://github.com/google/cadvisor/blob/v0.53.0/docs/storage/prometheus.md#prometheus-container-metrics) and specifically the `container_memory_working_set_bytes` metric.\nIn K8s, this metric is derived from the [MemoryStats.WorkingSetBytes](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [PodStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#PodStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The paging fault type", + "examples": [ + "minor" + ], + "name": "system.paging.fault.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "major", + "stability": "development", + "value": "major" + }, + { + "id": "minor", + "stability": "development", + "value": "minor" + } + ] + } + } + ], + "brief": "Container memory paging faults.", + "entity_associations": [ + "container" + ], + "id": "metric.container.memory.paging.faults", + "instrument": "counter", + "lineage": { + "attributes": { + "system.paging.fault.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.paging" + } + }, + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.memory.paging.faults", + "note": "In general, this metric can be derived from [cadvisor](https://github.com/google/cadvisor/blob/v0.53.0/docs/storage/prometheus.md#prometheus-container-metrics) and specifically the `container_memory_failures_total{failure_type=pgfault, scope=container}` and `container_memory_failures_total{failure_type=pgmajfault, scope=container}`metric.\nIn K8s, this metric is derived from the [MemoryStats.PageFaults](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) and [MemoryStats.MajorPageFaults](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [PodStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#PodStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "{fault}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The disk IO operation direction.", + "examples": [ + "read" + ], + "name": "disk.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "read", + "stability": "development", + "value": "read" + }, + { + "id": "write", + "stability": "development", + "value": "write" + } + ] + } + }, + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Disk bytes for the container.", + "id": "metric.container.disk.io", + "instrument": "counter", + "lineage": { + "attributes": { + "disk.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.disk" + }, + "system.device": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system" + } + }, + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.disk.io", + "note": "The total number of bytes read/written successfully (aggregated from all disks).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Network bytes for the container.", + "id": "metric.container.network.io", + "instrument": "counter", + "lineage": { + "attributes": { + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.network.io", + "note": "The number of bytes sent/received on all network interfaces by the container.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Container filesystem available bytes.", + "entity_associations": [ + "container" + ], + "id": "metric.container.filesystem.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.filesystem.available", + "note": "In K8s, this metric is derived from the\n[FsStats.AvailableBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#FsStats) field\nof the [ContainerStats.Rootfs](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#ContainerStats)\nof the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Container filesystem capacity.", + "entity_associations": [ + "container" + ], + "id": "metric.container.filesystem.capacity", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.filesystem.capacity", + "note": "In K8s, this metric is derived from the\n[FsStats.CapacityBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#FsStats) field\nof the [ContainerStats.Rootfs](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#ContainerStats)\nof the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Container filesystem usage.", + "entity_associations": [ + "container" + ], + "id": "metric.container.filesystem.usage", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "container.filesystem.usage", + "note": "This may not equal capacity - available.\n\nIn K8s, this metric is derived from the\n[FsStats.UsedBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#FsStats) field\nof the [ContainerStats.Rootfs](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#ContainerStats)\nof the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "attributes": [ + { + "brief": "The name of the device manufacturer\n", + "examples": [ + "Apple", + "Samsung" + ], + "name": "device.manufacturer", + "note": "The Android OS provides this field via [Build](https://developer.android.com/reference/android/os/Build#MANUFACTURER). iOS apps SHOULD hardcode the value `Apple`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The model identifier for the device\n", + "examples": [ + "iPhone3,4", + "SM-G920F" + ], + "name": "device.model.identifier", + "note": "It\u0027s recommended this value represents a machine-readable version of the model identifier rather than the market or consumer-friendly name of the device.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The marketing name for the device model\n", + "examples": [ + "iPhone 6s Plus", + "Samsung Galaxy S6" + ], + "name": "device.model.name", + "note": "It\u0027s recommended this value represents a human-readable version of the device model rather than a machine-readable alternative.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A unique identifier representing the device\n", + "examples": [ + "123456789012345", + "01:23:45:67:89:AB" + ], + "name": "device.id", + "note": "Its value SHOULD be identical for all apps on a device and it SHOULD NOT change if an app is uninstalled and re-installed.\nHowever, it might be resettable by the user for all apps on a device.\nHardware IDs (e.g. vendor-specific serial number, IMEI or MAC address) MAY be used as values.\n\nMore information about Android identifier best practices can be found in the [Android user data IDs guide](https://developer.android.com/training/articles/user-data-ids).\n\n\u003e [!WARNING]\n\u003e\n\u003e This attribute may contain sensitive (PII) information. Caution should be taken when storing personal data or anything which can identify a user. GDPR and data protection laws may apply,\n\u003e ensure you do your own due diligence.\n\u003e\n\u003e Due to these reasons, this identifier is not recommended for consumer applications and will likely result in rejection from both Google Play and App Store.\n\u003e However, it may be appropriate for specific enterprise scenarios, such as kiosk devices or enterprise-managed devices, with appropriate compliance clearance.\n\u003e Any instrumentation providing this identifier MUST implement it as an opt-in feature.\n\u003e\n\u003e See [`app.installation.id`](/docs/registry/attributes/app.md#app-installation-id) for a more privacy-preserving alternative.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "The device on which the process represented by this resource is running.\n", + "id": "entity.device", + "lineage": { + "attributes": { + "device.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.device" + }, + "device.manufacturer": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.device" + }, + "device.model.identifier": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.device" + }, + "device.model.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.device" + } + }, + "provenance": { + "path": "/home/weaver/source/device/entities.yaml", + "registry_id": "main" + } + }, + "name": "device", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The instance name of a GCE instance. This is the value provided by `host.name`, the visible name of the instance in the Cloud Console UI, and the prefix for the default hostname of the instance as defined by the [default internal DNS name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names).\n", + "examples": [ + "instance-1", + "my-vm-name" + ], + "name": "gcp.gce.instance.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The hostname of a GCE instance. This is the full value of the default or [custom hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm).\n", + "examples": [ + "my-host1234.example.com", + "sample-vm.us-west1-b.c.my-project.internal" + ], + "name": "gcp.gce.instance.hostname", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Resources used by Google Compute Engine (GCE).\n", + "id": "entity.gcp.gce", + "lineage": { + "attributes": { + "gcp.gce.instance.hostname": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.gce" + }, + "gcp.gce.instance.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.gce" + } + }, + "provenance": { + "path": "/home/weaver/source/gcp/gce-entities.yaml", + "registry_id": "main" + } + }, + "name": "gcp.gce", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "BIOS version of the hardware component\n", + "examples": [ + "1.2.3" + ], + "name": "hw.bios_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the enclosure (useful for modular systems)\n", + "examples": [ + "Computer", + "Storage", + "Switch" + ], + "name": "hw.enclosure.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for enclosure metrics\n", + "id": "metric_attributes.hw.enclosure", + "lineage": { + "attributes": { + "hw.bios_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.enclosure.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/enclosure-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The UID of the cluster quota.\n", + "examples": [ + "275ecb36-5aa8-4c2a-9c47-d8bb681b9aff" + ], + "name": "openshift.clusterquota.uid", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the cluster quota.\n", + "examples": [ + "opentelemetry" + ], + "name": "openshift.clusterquota.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "OpenShift resource attributes.\n", + "display_name": "Openshift Attributes", + "id": "registry.openshift", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openshift/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "A process SHOULD be characterized _either_ by data points with no `mode` labels, _or only_ data points with `mode` labels.\n", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "note": "Following states SHOULD be used: `user`, `system`, `wait`", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + } + ], + "brief": "Total CPU seconds broken down by different states.", + "entity_associations": [ + "process" + ], + "id": "metric.process.cpu.time", + "instrument": "counter", + "lineage": { + "attributes": { + "cpu.mode": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.cpu.time", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "A process SHOULD be characterized _either_ by data points with no `mode` labels, _or only_ data points with `mode` labels.\n", + "examples": [ + "user", + "system" + ], + "name": "cpu.mode", + "note": "Following states SHOULD be used: `user`, `system`, `wait`", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "User", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "System", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "Nice", + "id": "nice", + "stability": "development", + "value": "nice" + }, + { + "brief": "Idle", + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "brief": "IO Wait", + "id": "iowait", + "stability": "development", + "value": "iowait" + }, + { + "brief": "Interrupt", + "id": "interrupt", + "stability": "development", + "value": "interrupt" + }, + { + "brief": "Steal", + "id": "steal", + "stability": "development", + "value": "steal" + }, + { + "brief": "Kernel", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + } + ], + "brief": "Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process.", + "entity_associations": [ + "process" + ], + "id": "metric.process.cpu.utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "cpu.mode": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.cpu.utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The amount of physical memory in use.", + "entity_associations": [ + "process" + ], + "id": "metric.process.memory.usage", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.memory.usage", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The amount of committed virtual memory.", + "entity_associations": [ + "process" + ], + "id": "metric.process.memory.virtual", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.memory.virtual", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The disk IO operation direction.", + "examples": [ + "read" + ], + "name": "disk.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "read", + "stability": "development", + "value": "read" + }, + { + "id": "write", + "stability": "development", + "value": "write" + } + ] + } + } + ], + "brief": "Disk bytes transferred.", + "entity_associations": [ + "process" + ], + "id": "metric.process.disk.io", + "instrument": "counter", + "lineage": { + "attributes": { + "disk.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.disk" + } + }, + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.disk.io", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + } + ], + "brief": "Network bytes transferred.", + "entity_associations": [ + "process" + ], + "id": "metric.process.network.io", + "instrument": "counter", + "lineage": { + "attributes": { + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.network.io", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Process threads count.", + "entity_associations": [ + "process" + ], + "id": "metric.process.thread.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.thread.count", + "stability": "development", + "type": "metric", + "unit": "{thread}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of file descriptors in use by the process.", + "entity_associations": [ + "process" + ], + "id": "metric.process.open_file_descriptor.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.open_file_descriptor.count", + "stability": "development", + "type": "metric", + "unit": "{file_descriptor}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Specifies whether the context switches for this data point were voluntary or involuntary.", + "name": "process.context_switch.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "voluntary", + "stability": "development", + "value": "voluntary" + }, + { + "id": "involuntary", + "stability": "development", + "value": "involuntary" + } + ] + } + } + ], + "brief": "Number of times the process has been context switched.", + "entity_associations": [ + "process" + ], + "id": "metric.process.context_switches", + "instrument": "counter", + "lineage": { + "attributes": { + "process.context_switch.type": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.process" + } + }, + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.context_switches", + "stability": "development", + "type": "metric", + "unit": "{context_switch}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The paging fault type", + "examples": [ + "minor" + ], + "name": "system.paging.fault.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "major", + "stability": "development", + "value": "major" + }, + { + "id": "minor", + "stability": "development", + "value": "minor" + } + ] + } + } + ], + "brief": "Number of page faults the process has made.", + "entity_associations": [ + "process" + ], + "id": "metric.process.paging.faults", + "instrument": "counter", + "lineage": { + "attributes": { + "system.paging.fault.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.paging" + } + }, + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.paging.faults", + "stability": "development", + "type": "metric", + "unit": "{fault}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The time the process has been running.", + "entity_associations": [ + "process" + ], + "id": "metric.process.uptime", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/process/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "process.uptime", + "note": "Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available.\nThe actual accuracy would depend on the instrumentation and operating system.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "attributes": [ + { + "brief": "SignalR HTTP connection closure status.", + "examples": [ + "app_shutdown", + "timeout" + ], + "name": "signalr.connection.status", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The connection was closed normally.", + "id": "normal_closure", + "stability": "stable", + "value": "normal_closure" + }, + { + "brief": "The connection was closed due to a timeout.", + "id": "timeout", + "stability": "stable", + "value": "timeout" + }, + { + "brief": "The connection was closed because the app is shutting down.", + "id": "app_shutdown", + "stability": "stable", + "value": "app_shutdown" + } + ] + } + }, + { + "brief": "[SignalR transport type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)", + "examples": [ + "web_sockets", + "long_polling" + ], + "name": "signalr.transport", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "ServerSentEvents protocol", + "id": "server_sent_events", + "stability": "stable", + "value": "server_sent_events" + }, + { + "brief": "LongPolling protocol", + "id": "long_polling", + "stability": "stable", + "value": "long_polling" + }, + { + "brief": "WebSockets protocol", + "id": "web_sockets", + "stability": "stable", + "value": "web_sockets" + } + ] + } + } + ], + "brief": "SignalR attributes", + "display_name": "SignalR Attributes", + "id": "registry.signalr", + "lineage": { + "provenance": { + "path": "/home/weaver/source/signalr/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "User email address.\n", + "examples": [ + "a.einstein@example.com" + ], + "name": "user.email", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "User\u0027s full name\n", + "examples": [ + "Albert Einstein" + ], + "name": "user.full_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique user hash to correlate information for a user in anonymized form.\n", + "examples": [ + "364fc68eaf4c8acec74a4e52d7d1feaa" + ], + "name": "user.hash", + "note": "Useful if `user.id` or `user.name` contain confidential information and cannot be used.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the user.\n", + "examples": [ + "S-1-5-21-202424912787-2692429404-2351956786-1000" + ], + "name": "user.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Short name or login/username of the user.\n", + "examples": [ + "a.einstein" + ], + "name": "user.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of user roles at the time of the event.\n", + "examples": [ + [ + "admin", + "reporting_user" + ] + ], + "name": "user.roles", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "Describes information about the user.", + "display_name": "User Attributes", + "id": "registry.user", + "lineage": { + "provenance": { + "path": "/home/weaver/source/user/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the cloud provider.\n", + "name": "cloud.provider", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Alibaba Cloud", + "id": "alibaba_cloud", + "stability": "development", + "value": "alibaba_cloud" + }, + { + "brief": "Amazon Web Services", + "id": "aws", + "stability": "development", + "value": "aws" + }, + { + "brief": "Microsoft Azure", + "id": "azure", + "stability": "development", + "value": "azure" + }, + { + "brief": "Google Cloud Platform", + "id": "gcp", + "stability": "development", + "value": "gcp" + }, + { + "brief": "Heroku Platform as a Service", + "id": "heroku", + "stability": "development", + "value": "heroku" + }, + { + "brief": "IBM Cloud", + "id": "ibm_cloud", + "stability": "development", + "value": "ibm_cloud" + }, + { + "brief": "Oracle Cloud Infrastructure (OCI)", + "id": "oracle_cloud", + "stability": "development", + "value": "oracle_cloud" + }, + { + "brief": "Tencent Cloud", + "id": "tencent_cloud", + "stability": "development", + "value": "tencent_cloud" + } + ] + } + }, + { + "brief": "The cloud account ID the resource is assigned to.\n", + "examples": [ + "111111111111", + "opentelemetry" + ], + "name": "cloud.account.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The geographical region within a cloud provider. When associated with a resource, this attribute specifies the region where the resource operates. When calling services or APIs deployed on a cloud, this attribute identifies the region where the called destination is deployed.\n", + "examples": [ + "us-central1", + "us-east-1" + ], + "name": "cloud.region", + "note": "Refer to your provider\u0027s docs to see the available regions, for example [Alibaba Cloud regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), [Azure regions](https://azure.microsoft.com/global-infrastructure/geographies/), [Google Cloud regions](https://cloud.google.com/about/locations), or [Tencent Cloud regions](https://www.tencentcloud.com/document/product/213/6091).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Cloud provider-specific native identifier of the monitored cloud resource (e.g. an [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) on AWS, a [fully qualified resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) on Azure, a [full resource name](https://google.aip.dev/122#full-resource-names) on GCP)\n", + "examples": [ + "arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function", + "//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID", + "/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e" + ], + "name": "cloud.resource_id", + "note": "On some cloud providers, it may not be possible to determine the full ID at startup,\nso it may be necessary to set `cloud.resource_id` as a span attribute instead.\n\nThe exact value to use for `cloud.resource_id` depends on the cloud provider.\nThe following well-known definitions MUST be used if you set this attribute and they apply:\n\n- **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).\n Take care not to use the \"invoked ARN\" directly but replace any\n [alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)\n with the resolved function version, as the same runtime instance may be invocable with\n multiple different aliases.\n- **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names)\n- **Azure:** The [Fully Qualified Resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) of the invoked function,\n *not* the function app, having the form\n `/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e`.\n This means that a span attribute MUST be used, as an Azure function app can host multiple functions that would usually share\n a TracerProvider.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Cloud regions often have multiple, isolated locations known as zones to increase availability. Availability zone represents the zone where the resource is running.\n", + "examples": [ + "us-east-1c" + ], + "name": "cloud.availability_zone", + "note": "Availability zones are called \"zones\" on Alibaba Cloud and Google Cloud.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The cloud platform in use.\n", + "name": "cloud.platform", + "note": "The prefix of the service SHOULD match the one specified in `cloud.provider`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Alibaba Cloud Elastic Compute Service", + "id": "alibaba_cloud_ecs", + "stability": "development", + "value": "alibaba_cloud_ecs" + }, + { + "brief": "Alibaba Cloud Function Compute", + "id": "alibaba_cloud_fc", + "stability": "development", + "value": "alibaba_cloud_fc" + }, + { + "brief": "Red Hat OpenShift on Alibaba Cloud", + "id": "alibaba_cloud_openshift", + "stability": "development", + "value": "alibaba_cloud_openshift" + }, + { + "brief": "AWS Elastic Compute Cloud", + "id": "aws_ec2", + "stability": "development", + "value": "aws_ec2" + }, + { + "brief": "AWS Elastic Container Service", + "id": "aws_ecs", + "stability": "development", + "value": "aws_ecs" + }, + { + "brief": "AWS Elastic Kubernetes Service", + "id": "aws_eks", + "stability": "development", + "value": "aws_eks" + }, + { + "brief": "AWS Lambda", + "id": "aws_lambda", + "stability": "development", + "value": "aws_lambda" + }, + { + "brief": "AWS Elastic Beanstalk", + "id": "aws_elastic_beanstalk", + "stability": "development", + "value": "aws_elastic_beanstalk" + }, + { + "brief": "AWS App Runner", + "id": "aws_app_runner", + "stability": "development", + "value": "aws_app_runner" + }, + { + "brief": "Red Hat OpenShift on AWS (ROSA)", + "id": "aws_openshift", + "stability": "development", + "value": "aws_openshift" + }, + { + "brief": "Azure Virtual Machines", + "id": "azure.vm", + "stability": "development", + "value": "azure.vm" + }, + { + "brief": "Azure Container Apps", + "id": "azure.container_apps", + "stability": "development", + "value": "azure.container_apps" + }, + { + "brief": "Azure Container Instances", + "id": "azure.container_instances", + "stability": "development", + "value": "azure.container_instances" + }, + { + "brief": "Azure Kubernetes Service", + "id": "azure.aks", + "stability": "development", + "value": "azure.aks" + }, + { + "brief": "Azure Functions", + "id": "azure.functions", + "stability": "development", + "value": "azure.functions" + }, + { + "brief": "Azure App Service", + "id": "azure.app_service", + "stability": "development", + "value": "azure.app_service" + }, + { + "brief": "Azure Red Hat OpenShift", + "id": "azure.openshift", + "stability": "development", + "value": "azure.openshift" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Virtual Machines", + "deprecated": { + "note": "Replaced by `azure.vm`.", + "reason": "renamed", + "renamed_to": "azure.vm" + }, + "id": "azure_vm", + "stability": "development", + "value": "azure_vm" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Container Apps", + "deprecated": { + "note": "Replaced by `azure.container_apps`.", + "reason": "renamed", + "renamed_to": "azure.container_apps" + }, + "id": "azure_container_apps", + "stability": "development", + "value": "azure_container_apps" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Container Instances", + "deprecated": { + "note": "Replaced by `azure.container_instances`.", + "reason": "renamed", + "renamed_to": "azure.container_instances" + }, + "id": "azure_container_instances", + "stability": "development", + "value": "azure_container_instances" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Kubernetes Service", + "deprecated": { + "note": "Replaced by `azure.aks`.", + "reason": "renamed", + "renamed_to": "azure.aks" + }, + "id": "azure_aks", + "stability": "development", + "value": "azure_aks" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Functions", + "deprecated": { + "note": "Replaced by `azure.functions`.", + "reason": "renamed", + "renamed_to": "azure.functions" + }, + "id": "azure_functions", + "stability": "development", + "value": "azure_functions" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure App Service", + "deprecated": { + "note": "Replaced by `azure.app_service`.", + "reason": "renamed", + "renamed_to": "azure.app_service" + }, + "id": "azure_app_service", + "stability": "development", + "value": "azure_app_service" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Azure Red Hat OpenShift", + "deprecated": { + "note": "Replaced by `azure.openshift`.", + "reason": "renamed", + "renamed_to": "azure.openshift" + }, + "id": "azure_openshift", + "stability": "development", + "value": "azure_openshift" + }, + { + "brief": "Google Vertex AI Agent Engine", + "id": "gcp.agent_engine", + "stability": "development", + "value": "gcp.agent_engine" + }, + { + "brief": "Google Bare Metal Solution (BMS)", + "id": "gcp_bare_metal_solution", + "stability": "development", + "value": "gcp_bare_metal_solution" + }, + { + "brief": "Google Cloud Compute Engine (GCE)", + "id": "gcp_compute_engine", + "stability": "development", + "value": "gcp_compute_engine" + }, + { + "brief": "Google Cloud Run", + "id": "gcp_cloud_run", + "stability": "development", + "value": "gcp_cloud_run" + }, + { + "brief": "Google Cloud Kubernetes Engine (GKE)", + "id": "gcp_kubernetes_engine", + "stability": "development", + "value": "gcp_kubernetes_engine" + }, + { + "brief": "Google Cloud Functions (GCF)", + "id": "gcp_cloud_functions", + "stability": "development", + "value": "gcp_cloud_functions" + }, + { + "brief": "Google Cloud App Engine (GAE)", + "id": "gcp_app_engine", + "stability": "development", + "value": "gcp_app_engine" + }, + { + "brief": "Red Hat OpenShift on Google Cloud", + "id": "gcp_openshift", + "stability": "development", + "value": "gcp_openshift" + }, + { + "brief": "Red Hat OpenShift on IBM Cloud", + "id": "ibm_cloud_openshift", + "stability": "development", + "value": "ibm_cloud_openshift" + }, + { + "brief": "Compute on Oracle Cloud Infrastructure (OCI)", + "id": "oracle_cloud_compute", + "stability": "development", + "value": "oracle_cloud_compute" + }, + { + "brief": "Kubernetes Engine (OKE) on Oracle Cloud Infrastructure (OCI)", + "id": "oracle_cloud_oke", + "stability": "development", + "value": "oracle_cloud_oke" + }, + { + "brief": "Tencent Cloud Cloud Virtual Machine (CVM)", + "id": "tencent_cloud_cvm", + "stability": "development", + "value": "tencent_cloud_cvm" + }, + { + "brief": "Tencent Cloud Elastic Kubernetes Service (EKS)", + "id": "tencent_cloud_eks", + "stability": "development", + "value": "tencent_cloud_eks" + }, + { + "brief": "Tencent Cloud Serverless Cloud Function (SCF)", + "id": "tencent_cloud_scf", + "stability": "development", + "value": "tencent_cloud_scf" + } + ] + } + } + ], + "brief": "A cloud environment (e.g. GCP, Azure, AWS)\n", + "id": "entity.cloud", + "lineage": { + "attributes": { + "cloud.account.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloud" + }, + "cloud.availability_zone": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloud" + }, + "cloud.platform": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloud" + }, + "cloud.provider": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloud" + }, + "cloud.region": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloud" + }, + "cloud.resource_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloud" + } + }, + "provenance": { + "path": "/home/weaver/source/cloud/entities.yaml", + "registry_id": "main" + } + }, + "name": "cloud", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Database Client attributes", + "id": "attributes.db.client.minimal", + "lineage": { + "attributes": { + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Cosmos DB container name.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Account or request [consistency level](https://learn.microsoft.com/azure/cosmos-db/consistency-levels).", + "examples": [ + "Eventual", + "ConsistentPrefix", + "BoundedStaleness", + "Strong", + "Session" + ], + "name": "azure.cosmosdb.consistency.level", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Strong", + "id": "strong", + "stability": "development", + "value": "Strong" + }, + { + "brief": "Bounded Staleness", + "id": "bounded_staleness", + "stability": "development", + "value": "BoundedStaleness" + }, + { + "brief": "Session", + "id": "session", + "stability": "development", + "value": "Session" + }, + { + "brief": "Eventual", + "id": "eventual", + "stability": "development", + "value": "Eventual" + }, + { + "brief": "Consistent Prefix", + "id": "consistent_prefix", + "stability": "development", + "value": "ConsistentPrefix" + } + ] + } + }, + { + "brief": "Cosmos DB sub status code.", + "examples": [ + 1000, + 1002 + ], + "name": "azure.cosmosdb.response.sub_status_code", + "requirement_level": { + "conditionally_required": "when response was received and contained sub-code." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Azure Cosmos DB Client attributes", + "id": "attributes.azure.cosmosdb.minimal", + "lineage": { + "attributes": { + "azure.cosmosdb.consistency.level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.cosmosdb.response.sub_status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "db.collection.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/common.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group defines the attributes describing database operations that may have queries.", + "id": "attributes.db.client.with_query", + "lineage": { + "attributes": { + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group defines the attributes describing database operations that have operation name, collection name and query.", + "id": "attributes.db.client.with_query_and_collection", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "One of the [HTTP Request errors](https://learn.microsoft.com/dotnet/api/system.net.http.httprequesterror) in snake_case, or a full exception type.\n", + "examples": [ + "version_negotiation_error", + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The span describes the time it takes for the HTTP request to obtain a connection from the connection pool.", + "id": "span.dotnet.http.request.wait_for_connection.internal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/network-spans.yaml", + "registry_id": "main" + } + }, + "note": "The span is reported only if there was no connection readily available when request has started.\nIt\u0027s reported as a child of *HTTP client request* span.\n\nThe span ends when the connection is obtained - it could happen when an existing connection becomes available or once\na new connection is established, so the duration of *Wait For Connection* span is different from duration of the\n[*HTTP connection setup*](/docs/dotnet/dotnet-network-traces.md#http-connection-setup) span.\n\nThe time it takes to get a connection from the pool is also reported by the\n[`http.client.request.time_in_queue` metric](/docs/dotnet/dotnet-http-metrics.md#metric-httpclientrequesttime_in_queue).\n\nCorresponding `Activity.OperationName` is `Experimental.System.Net.Http.Connections.WaitForConnection`, `ActivitySource` name - `Experimental.System.Net.Http`.\nAdded in .NET 9.\n\n**Span name** SHOULD be `HTTP wait_for_connection {server.address}:{server.port}`.\n", + "span_kind": "internal", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Peer IP address of the socket connection.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "The `network.peer.address` attribute is available only if the connection was successfully established and only for IP sockets.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "One of the [HTTP Request errors](https://learn.microsoft.com/dotnet/api/system.net.http.httprequesterror) in snake_case, or a full exception type.\n", + "examples": [ + "name_resolution_error", + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "https", + "ftp", + "telnet" + ], + "name": "url.scheme", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "The span describes the establishment of the HTTP connection. It includes the time it takes to resolve the DNS, establish the socket connection, and perform the TLS handshake.\n", + "id": "span.dotnet.http.connection_setup.internal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/network-spans.yaml", + "registry_id": "main" + } + }, + "note": "There is no parent-child relationship between the [*HTTP client request*](/docs/dotnet/dotnet-network-traces.md#http-client-request) and the\n[*HTTP connection setup*]/docs/dotnet/dotnet-network-traces.md(/docs/dotnet/dotnet-network-traces.md#http-connection-setup) spans;\nthe latter will always be a root span, defining a separate trace.\n\nHowever, if the connection attempt represented by the [*HTTP connection setup*](/docs/dotnet/dotnet-network-traces.md#http-connection-setup) span results in a\nsuccessful HTTP connection, and that connection is picked up by a request to serve it, the instrumentation adds a link\nto the [*HTTP client request*](/docs/dotnet/dotnet-network-traces.md#http-client-request) span pointing to the *HTTP connection setup* span.\nI.e., each request is linked to the connection that served this request.\n\nCorresponding `Activity.OperationName` is `Experimental.System.Net.Http.Connections.ConnectionSetup`, `ActivitySource` name - `Experimental.System.Net.Http.Connections`.\nAdded in .NET 9.\n\n**Span name** SHOULD be `HTTP connection_setup {server.address}:{server.port}`.\n", + "span_kind": "internal", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If port is supported for the socket address family." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if `network.peer.address` is an IP address." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "udp", + "unix" + ], + "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": "If value is not `tcp`. When missing, the value is assumed to be `tcp`." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Socket error code.", + "examples": [ + "connection_refused", + "address_not_available" + ], + "name": "error.type", + "note": "The following errors codes are reported:\n\n- `network_down`\n- `address_already_in_use`\n- `interrupted`\n- `in_progress`\n- `already_in_progress`\n- `address_not_available`\n- `address_family_not_supported`\n- `connection_refused`\n- `fault`\n- `invalid_argument`\n- `is_connected`\n- `network_unreachable`\n- `host_unreachable`\n- `no_buffer_space_available`\n- `timed_out`\n- `access_denied`\n- `protocol_type`\n\nSee socket errors on [Windows](https://learn.microsoft.com/windows/win32/api/winsock2/nf-winsock2-connect#return-value) and\n[Linux](https://man7.org/linux/man-pages/man2/connect.2.html) for more details.\n", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The span describes the establishment of the socket connection.\n", + "id": "span.dotnet.socket.connect.internal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/network-spans.yaml", + "registry_id": "main" + } + }, + "note": "It\u0027s different from [*HTTP connection setup*](/docs/dotnet/dotnet-network-traces.md#http-connection-setup) span, which also covers the DNS lookup and TLS handshake.\n\nWhen *socket connect* span is reported along with *HTTP connection setup* span, the socket span becomes a child of HTTP connection setup.\n\nCorresponding `Activity.OperationName` is `Experimental.System.Net.Sockets.Connect`, `ActivitySource` name - `Experimental.System.Net.Sockets`.\nAdded in .NET 9.\n\n**Span name** SHOULD be `socket connect {network.peer.address}:{network.peer.port}` when socket address family has a\nnotion of port and `socket connect {network.peer.address}`\notherwise.\n", + "span_kind": "internal", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The domain name or an IP address being queried.", + "examples": [ + "www.example.com", + "opentelemetry.io" + ], + "name": "dns.question.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "List of resolved IP addresses (for DNS lookup) or a single element containing domain name (for reverse lookup).", + "examples": [ + [ + "10.0.0.1", + "2001:0db8:85a3:0000:0000:8a2e:0370:7334" + ] + ], + "name": "dns.answers", + "requirement_level": { + "recommended": "if DNS lookup was successful." + }, + "stability": "development", + "type": "string[]" + }, + { + "brief": "The error code or exception name returned by [System.Net.Dns](https://learn.microsoft.com/dotnet/api/system.net.dns).", + "examples": [ + "host_not_found", + "try_again" + ], + "name": "error.type", + "note": "The following errors are reported:\n\n- `host_not_found`\n- `try_again`\n- `no_recovery`\n- `address_family_not_supported`\n- the full exception type name\n\nSee [SocketError](https://learn.microsoft.com/dotnet/api/system.net.sockets.socketerror) for more details.\n", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The span describes DNS lookup or reverse lookup performed with one of the methods on [System.Net.Dns](https://learn.microsoft.com/dotnet/api/system.net.dns) class.\n", + "id": "span.dotnet.dns.lookup.internal", + "lineage": { + "attributes": { + "dns.answers": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.dns" + }, + "dns.question.name": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note" + ], + "source_group": "registry.dns" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/network-spans.yaml", + "registry_id": "main" + } + }, + "note": "DNS spans track logical operations rather than physical DNS calls and the actual behavior depends on the\nresolver implementation which could be changed in the future versions of .NET.\n.NET 9 uses OS DNS resolver which may do zero or more physical lookups for one API call.\n\nWhen the *DNS lookup* span is reported along with *HTTP connection setup* and *socket connect* span,\nthe *DNS lookup* span span becomes a child of *HTTP connection setup* and a sibling of *socket connect*.\n\nDNS lookup duration is also reported by [`dns.lookup.duration` metric](/docs/dotnet/dotnet-dns-metrics.md#metric-dnslookupduration).\n\nCorresponding `Activity.OperationName` is `Experimental.System.Net.NameResolution.DnsLookup`, `ActivitySource` name - `Experimental.System.Net.NameResolution`.\nAdded in .NET 9.\n\n**Span name** SHOULD be `DNS lookup {dns.question.name}` for DNS lookup (IP addresses from host name)\nand `DNS reverse lookup {dns.question.name}` for reverse lookup (host names from IP address).\n", + "span_kind": "internal", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "System.Net.Security.Authentication.AuthenticationException", + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Normalized lowercase protocol name parsed from original string of the negotiated [SSL/TLS protocol version](https://docs.openssl.org/1.1.1/man3/SSL_get_version/#return-values)\n", + "name": "tls.protocol.name", + "requirement_level": { + "recommended": "when available" + }, + "stability": "development", + "type": { + "members": [ + { + "id": "ssl", + "stability": "development", + "value": "ssl" + }, + { + "id": "tls", + "stability": "development", + "value": "tls" + } + ] + } + }, + { + "brief": "Numeric part of the version parsed from the original string of the negotiated [SSL/TLS protocol version](https://docs.openssl.org/1.1.1/man3/SSL_get_version/#return-values)\n", + "examples": [ + "1.2", + "3" + ], + "name": "tls.protocol.version", + "requirement_level": { + "recommended": "when available" + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The [server name indication (SNI)](https://en.wikipedia.org/wiki/Server_Name_Indication) used in the \u0027Client Hello\u0027 message during TLS handshake.", + "examples": [ + "opentelemetry.io", + "example.com" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": { + "recommended": "when authenticating the client." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "The span describes TLS client or server handshake performed with [System.Net.Security.SslStream](https://learn.microsoft.com/dotnet/api/system.net.security.sslstream).\n", + "id": "span.dotnet.tls.handshake.internal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.server" + }, + "tls.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.tls" + }, + "tls.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.tls" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/network-spans.yaml", + "registry_id": "main" + } + }, + "note": "When *TLS* span is reported for client-side authentication along with *HTTP connection setup* and *socket connect* span, the *TLS* span becomes a child of *HTTP connection setup*.\n\nCorresponding `Activity.OperationName` is `Experimental.System.Net.Security.TlsHandshake`, `ActivitySource` name - `Experimental.System.Net.Security`.\nAdded in .NET 9.\n\n**Span name** SHOULD be `TLS client handshake {server.address}` when authenticating on the client\nside and `TLS server handshake` when authenticating the server.\n\n**Span kind** SHOULD be `INTERNAL` in both cases.\n", + "span_kind": "internal", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Locality name. Represents the name of a city, town, village, or similar populated place.\n", + "examples": [ + "Montreal", + "Berlin" + ], + "name": "geo.locality.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Two-letter code representing continent’s name.\n", + "name": "geo.continent.code", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Africa", + "id": "af", + "stability": "development", + "value": "AF" + }, + { + "brief": "Antarctica", + "id": "an", + "stability": "development", + "value": "AN" + }, + { + "brief": "Asia", + "id": "as", + "stability": "development", + "value": "AS" + }, + { + "brief": "Europe", + "id": "eu", + "stability": "development", + "value": "EU" + }, + { + "brief": "North America", + "id": "na", + "stability": "development", + "value": "NA" + }, + { + "brief": "Oceania", + "id": "oc", + "stability": "development", + "value": "OC" + }, + { + "brief": "South America", + "id": "sa", + "stability": "development", + "value": "SA" + } + ] + } + }, + { + "brief": "Two-letter ISO Country Code ([ISO 3166-1 alpha2](https://wikipedia.org/wiki/ISO_3166-1#Codes)).\n", + "examples": [ + "CA" + ], + "name": "geo.country.iso_code", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Longitude of the geo location in [WGS84](https://wikipedia.org/wiki/World_Geodetic_System#WGS84).\n", + "examples": [ + -73.61483 + ], + "name": "geo.location.lon", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "Latitude of the geo location in [WGS84](https://wikipedia.org/wiki/World_Geodetic_System#WGS84).\n", + "examples": [ + 45.505918 + ], + "name": "geo.location.lat", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to country.\n", + "examples": [ + "94040" + ], + "name": "geo.postal_code", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Region ISO code ([ISO 3166-2](https://wikipedia.org/wiki/ISO_3166-2)).\n", + "examples": [ + "CA-QC" + ], + "name": "geo.region.iso_code", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Geo fields can carry data about a specific location related to an event. This geolocation information can be derived from techniques such as Geo IP, or be user-supplied.\nNote: Geo attributes are typically used under another namespace, such as client.* and describe the location of the corresponding entity (device, end-user, etc). Semantic conventions that reference geo attributes (as a root namespace) or embed them (under their own namespace) SHOULD document what geo attributes describe in the scope of that convention.\n", + "id": "registry.geo", + "lineage": { + "provenance": { + "path": "/home/weaver/source/geo/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for temperature metrics\n", + "id": "metric_attributes.hw.temperature.common", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/temperature-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Temperature in degrees Celsius.", + "id": "metric.hw.temperature", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/temperature-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.temperature", + "stability": "development", + "type": "metric", + "unit": "Cel" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of limit for hardware components\n", + "examples": [ + "low.critical", + "low.degraded", + "high.degraded", + "high.critical" + ], + "name": "hw.limit_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Critical", + "id": "critical", + "stability": "development", + "value": "critical" + }, + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "High Critical", + "id": "high_critical", + "stability": "development", + "value": "high.critical" + }, + { + "brief": "High Degraded", + "id": "high_degraded", + "stability": "development", + "value": "high.degraded" + }, + { + "brief": "Low Critical", + "id": "low_critical", + "stability": "development", + "value": "low.critical" + }, + { + "brief": "Low Degraded", + "id": "low_degraded", + "stability": "development", + "value": "low.degraded" + }, + { + "brief": "Maximum", + "id": "max", + "stability": "development", + "value": "max" + }, + { + "brief": "Throttled", + "id": "throttled", + "stability": "development", + "value": "throttled" + }, + { + "brief": "Turbo", + "id": "turbo", + "stability": "development", + "value": "turbo" + } + ] + } + } + ], + "brief": "Temperature limit in degrees Celsius.", + "id": "metric.hw.temperature.limit", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.limit_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/temperature-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.temperature.limit", + "stability": "development", + "type": "metric", + "unit": "Cel" + }, + { + "attributes": [ + { + "brief": "This attribute represents the state of the application.\n", + "name": "ios.app.state", + "note": "The iOS lifecycle states are defined in the [UIApplicationDelegate documentation](https://developer.apple.com/documentation/uikit/uiapplicationdelegate), and from which the `OS terminology` column values are derived.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The app has become `active`. Associated with UIKit notification `applicationDidBecomeActive`.\n", + "id": "active", + "stability": "development", + "value": "active" + }, + { + "brief": "The app is now `inactive`. Associated with UIKit notification `applicationWillResignActive`.\n", + "id": "inactive", + "stability": "development", + "value": "inactive" + }, + { + "brief": "The app is now in the background. This value is associated with UIKit notification `applicationDidEnterBackground`.\n", + "id": "background", + "stability": "development", + "value": "background" + }, + { + "brief": "The app is now in the foreground. This value is associated with UIKit notification `applicationWillEnterForeground`.\n", + "id": "foreground", + "stability": "development", + "value": "foreground" + }, + { + "brief": "The app is about to terminate. Associated with UIKit notification `applicationWillTerminate`.\n", + "id": "terminate", + "stability": "development", + "value": "terminate" + } + ] + } + } + ], + "brief": "This group describes iOS-specific attributes.\n", + "display_name": "iOS Attributes", + "id": "registry.ios", + "lineage": { + "provenance": { + "path": "/home/weaver/source/ios/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Common cross-signal messaging attributes.", + "id": "attributes.messaging.common.minimal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/common.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The service tier requested. May be a specific tier, default, or auto.", + "examples": [ + "auto", + "default" + ], + "name": "openai.request.service_tier", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The system will utilize scale tier credits until they are exhausted.", + "id": "auto", + "stability": "development", + "value": "auto" + }, + { + "brief": "The system will utilize the default scale tier.", + "id": "default", + "stability": "development", + "value": "default" + } + ] + } + }, + { + "brief": "The service tier used for the response.", + "examples": [ + "scale", + "default" + ], + "name": "openai.response.service_tier", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A fingerprint to track any eventual change in the Generative AI environment.", + "examples": [ + "fp_44709d6fcb" + ], + "name": "openai.response.system_fingerprint", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This group defines attributes for OpenAI.\n", + "display_name": "OpenAI Attributes", + "id": "registry.openai", + "lineage": { + "provenance": { + "path": "/home/weaver/source/openai/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The device identifier", + "examples": [ + "(identifier)" + ], + "name": "system.device", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes System attributes", + "display_name": "General System Attributes", + "id": "registry.system", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The memory state", + "examples": [ + "free", + "cached" + ], + "name": "system.memory.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Actual used virtual memory in bytes.", + "id": "used", + "note": "Calculation based on the operating system metrics. On Linux, this corresponds to \"MemTotal - MemAvailable\" from /proc/meminfo, which more accurately reflects memory in active use by applications compared to older formulas based on free, cached, and buffers. If MemAvailable is not available, a fallback to those older formulas may be used.\n", + "stability": "development", + "value": "used" + }, + { + "id": "free", + "stability": "development", + "value": "free" + }, + { + "deprecated": { + "note": "Removed, report shared memory usage with `metric.system.memory.shared` metric", + "reason": "uncategorized" + }, + "id": "shared", + "stability": "development", + "value": "shared" + }, + { + "id": "buffers", + "stability": "development", + "value": "buffers" + }, + { + "id": "cached", + "stability": "development", + "value": "cached" + } + ] + } + } + ], + "brief": "Describes System Memory attributes", + "display_name": "System Memory Attributes", + "id": "registry.system.memory", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The memory paging state", + "examples": [ + "free" + ], + "name": "system.paging.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "used", + "stability": "development", + "value": "used" + }, + { + "id": "free", + "stability": "development", + "value": "free" + } + ] + } + }, + { + "brief": "The paging fault type", + "examples": [ + "minor" + ], + "name": "system.paging.fault.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "major", + "stability": "development", + "value": "major" + }, + { + "id": "minor", + "stability": "development", + "value": "minor" + } + ] + } + }, + { + "brief": "The paging access direction", + "examples": [ + "in" + ], + "name": "system.paging.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "in", + "stability": "development", + "value": "in" + }, + { + "id": "out", + "stability": "development", + "value": "out" + } + ] + } + } + ], + "brief": "Describes System Memory Paging attributes", + "display_name": "System Paging Attributes", + "id": "registry.system.paging", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The filesystem state", + "examples": [ + "used" + ], + "name": "system.filesystem.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "used", + "stability": "development", + "value": "used" + }, + { + "id": "free", + "stability": "development", + "value": "free" + }, + { + "id": "reserved", + "stability": "development", + "value": "reserved" + } + ] + } + }, + { + "brief": "The filesystem type", + "examples": [ + "ext4" + ], + "name": "system.filesystem.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "fat32", + "stability": "development", + "value": "fat32" + }, + { + "id": "exfat", + "stability": "development", + "value": "exfat" + }, + { + "id": "ntfs", + "stability": "development", + "value": "ntfs" + }, + { + "id": "refs", + "stability": "development", + "value": "refs" + }, + { + "id": "hfsplus", + "stability": "development", + "value": "hfsplus" + }, + { + "id": "ext4", + "stability": "development", + "value": "ext4" + } + ] + } + }, + { + "brief": "The filesystem mode", + "examples": [ + "rw, ro" + ], + "name": "system.filesystem.mode", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The filesystem mount path", + "examples": [ + "/mnt/data" + ], + "name": "system.filesystem.mountpoint", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes Filesystem attributes", + "display_name": "Filesystem Attributes", + "id": "registry.system.filesystem", + "lineage": { + "provenance": { + "path": "/home/weaver/source/system/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The ARN of an EKS cluster.\n", + "examples": [ + "arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster" + ], + "name": "aws.eks.cluster.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Entities used by AWS Elastic Kubernetes Service (EKS).\n", + "id": "entity.aws.eks", + "lineage": { + "attributes": { + "aws.eks.cluster.arn": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.eks" + } + }, + "provenance": { + "path": "/home/weaver/source/aws/eks-entities.yaml", + "registry_id": "main" + } + }, + "name": "aws.eks", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The unique identifier of the service request. It\u0027s generated by the Azure service and returned with the response.", + "examples": [ + "00000000-0000-0000-0000-000000000000" + ], + "name": "azure.service.request.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "[Azure Resource Provider Namespace](https://learn.microsoft.com/azure/azure-resource-manager/management/azure-services-resource-providers) as recognized by the client.\n", + "examples": [ + "Microsoft.Storage", + "Microsoft.KeyVault", + "Microsoft.ServiceBus" + ], + "name": "azure.resource_provider.namespace", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier of the client instance.", + "examples": [ + "3ba4827d-4422-483f-b59f-85b74211c11d", + "storage-client-1" + ], + "name": "azure.client.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This section defines generic attributes used by Azure Client Libraries.\n", + "display_name": "Azure Client Library Attributes", + "id": "registry.azure.client.sdk", + "lineage": { + "provenance": { + "path": "/home/weaver/source/azure/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Cosmos client connection mode.", + "name": "azure.cosmosdb.connection.mode", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Gateway (HTTP) connection.", + "id": "gateway", + "stability": "development", + "value": "gateway" + }, + { + "brief": "Direct connection.", + "id": "direct", + "stability": "development", + "value": "direct" + } + ] + } + }, + { + "brief": "The number of request units consumed by the operation.\n", + "examples": [ + 46.18, + 1.0 + ], + "name": "azure.cosmosdb.operation.request_charge", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "Request payload size in bytes.", + "name": "azure.cosmosdb.request.body.size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "List of regions contacted during operation in the order that they were contacted. If there is more than one region listed, it indicates that the operation was performed on multiple regions i.e. cross-regional call.\n", + "examples": [ + [ + "North Central US", + "Australia East", + "Australia Southeast" + ] + ], + "name": "azure.cosmosdb.operation.contacted_regions", + "note": "Region name matches the format of `displayName` in [Azure Location API](https://learn.microsoft.com/rest/api/resources/subscriptions/list-locations)\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Cosmos DB sub status code.", + "examples": [ + 1000, + 1002 + ], + "name": "azure.cosmosdb.response.sub_status_code", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Account or request [consistency level](https://learn.microsoft.com/azure/cosmos-db/consistency-levels).", + "examples": [ + "Eventual", + "ConsistentPrefix", + "BoundedStaleness", + "Strong", + "Session" + ], + "name": "azure.cosmosdb.consistency.level", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Strong", + "id": "strong", + "stability": "development", + "value": "Strong" + }, + { + "brief": "Bounded Staleness", + "id": "bounded_staleness", + "stability": "development", + "value": "BoundedStaleness" + }, + { + "brief": "Session", + "id": "session", + "stability": "development", + "value": "Session" + }, + { + "brief": "Eventual", + "id": "eventual", + "stability": "development", + "value": "Eventual" + }, + { + "brief": "Consistent Prefix", + "id": "consistent_prefix", + "stability": "development", + "value": "ConsistentPrefix" + } + ] + } + } + ], + "brief": "This section defines attributes for Azure Cosmos DB.\n", + "display_name": "Azure Cosmos DB Attributes", + "id": "registry.azure.cosmosdb", + "lineage": { + "provenance": { + "path": "/home/weaver/source/azure/registry.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Indicates that the exception is escaping the scope of the span.\n", + "deprecated": { + "note": "It\u0027s no longer recommended to record exceptions that are handled and do not escape the scope of a span.\n", + "reason": "obsoleted" + }, + "name": "exception.escaped", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + } + ], + "brief": "Deprecated exception attributes.\n", + "display_name": "Deprecated Exception Attributes", + "id": "registry.exception.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/exceptions/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The Generative AI provider as identified by the client or server instrumentation.", + "name": "gen_ai.provider.name", + "note": "The attribute SHOULD be set based on the instrumentation\u0027s best\nknowledge and may differ from the actual model provider.\n\nMultiple providers, including Azure OpenAI, Gemini, and AI hosting platforms\nare accessible using the OpenAI REST API and corresponding client libraries,\nbut may proxy or host models from different providers.\n\nThe `gen_ai.request.model`, `gen_ai.response.model`, and `server.address`\nattributes may help identify the actual system in use.\n\nThe `gen_ai.provider.name` attribute acts as a discriminator that\nidentifies the GenAI telemetry format flavor specific to that provider\nwithin GenAI semantic conventions.\nIt SHOULD be set consistently with provider-specific attributes and signals.\nFor example, GenAI spans, metrics, and events related to AWS Bedrock\nshould have the `gen_ai.provider.name` set to `aws.bedrock` and include\napplicable `aws.bedrock.*` attributes and are not expected to include\n`openai.*` attributes.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "[OpenAI](https://openai.com/)", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "[Vertex AI](https://cloud.google.com/vertex-ai)", + "id": "gcp.vertex_ai", + "note": "Used when accessing the \u0027aiplatform.googleapis.com\u0027 endpoint.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "[Gemini](https://cloud.google.com/products/gemini)", + "id": "gcp.gemini", + "note": "Used when accessing the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "[Anthropic](https://www.anthropic.com/)", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "[Cohere](https://cohere.com/)", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "[Azure OpenAI](https://azure.microsoft.com/products/ai-services/openai-service/)", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "[IBM Watsonx AI](https://www.ibm.com/products/watsonx-ai)", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "[AWS Bedrock](https://aws.amazon.com/bedrock)", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "[Perplexity](https://www.perplexity.ai/)", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "[xAI](https://x.ai/)", + "id": "x_ai", + "stability": "development", + "value": "x_ai" + }, + { + "brief": "[DeepSeek](https://www.deepseek.com/)", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "[Groq](https://groq.com/)", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "[Mistral AI](https://mistral.ai/)", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + }, + { + "brief": "The name of the GenAI model a request is being made to.", + "examples": "gpt-4", + "name": "gen_ai.request.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The maximum number of tokens the model generates for a request.", + "examples": [ + 100 + ], + "name": "gen_ai.request.max_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The target number of candidate completions to return.", + "examples": [ + 3 + ], + "name": "gen_ai.request.choice.count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The temperature setting for the GenAI request.", + "examples": [ + 0.0 + ], + "name": "gen_ai.request.temperature", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_p sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_p", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The top_k sampling setting for the GenAI request.", + "examples": [ + 1.0 + ], + "name": "gen_ai.request.top_k", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "List of sequences that the model will use to stop generating further tokens.", + "examples": [ + [ + "forest", + "lived" + ] + ], + "name": "gen_ai.request.stop_sequences", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The frequency penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.frequency_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The presence penalty setting for the GenAI request.", + "examples": [ + 0.1 + ], + "name": "gen_ai.request.presence_penalty", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The encoding formats requested in an embeddings operation, if specified.", + "examples": [ + [ + "base64" + ], + [ + "float", + "binary" + ] + ], + "name": "gen_ai.request.encoding_formats", + "note": "In some GenAI systems the encoding formats are called embedding types. Also, some GenAI systems only accept a single format per request.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Requests with same seed value more likely to return same result.", + "examples": [ + 100 + ], + "name": "gen_ai.request.seed", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The unique identifier for the completion.", + "examples": [ + "chatcmpl-123" + ], + "name": "gen_ai.response.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the model that generated the response.", + "examples": [ + "gpt-4-0613" + ], + "name": "gen_ai.response.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of reasons the model stopped generating tokens, corresponding to each generation received.", + "examples": [ + [ + "stop" + ], + [ + "stop", + "length" + ] + ], + "name": "gen_ai.response.finish_reasons", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of tokens used in the GenAI input (prompt).", + "examples": [ + 100 + ], + "name": "gen_ai.usage.input_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The number of tokens used in the GenAI response (completion).", + "examples": [ + 180 + ], + "name": "gen_ai.usage.output_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The type of token being counted.", + "examples": [ + "input", + "output" + ], + "name": "gen_ai.token.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Input tokens (prompt, input, etc.)", + "id": "input", + "stability": "development", + "value": "input" + }, + { + "brief": "Output tokens (completion, response, etc.)", + "deprecated": { + "note": "Replaced by `output`.", + "reason": "renamed", + "renamed_to": "output" + }, + "id": "completion", + "stability": "development", + "value": "output" + }, + { + "brief": "Output tokens (completion, response, etc.)", + "id": "output", + "stability": "development", + "value": "output" + } + ] + } + }, + { + "brief": "The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.", + "examples": [ + "conv_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.conversation.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier of the GenAI agent.", + "examples": [ + "asst_5j66UpCpwteGg4YSxUnt7lPY" + ], + "name": "gen_ai.agent.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Human-readable name of the GenAI agent provided by the application.", + "examples": [ + "Math Tutor", + "Fiction Writer" + ], + "name": "gen_ai.agent.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Free-form description of the GenAI agent provided by the application.", + "examples": [ + "Helps with math problems", + "Generates fiction stories" + ], + "name": "gen_ai.agent.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Name of the tool utilized by the agent.", + "examples": [ + "Flights" + ], + "name": "gen_ai.tool.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The tool call identifier.", + "examples": [ + "call_mszuSIzqtI65i1wAUOE8w5H4" + ], + "name": "gen_ai.tool.call.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The tool description.", + "examples": [ + "Multiply two numbers" + ], + "name": "gen_ai.tool.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the tool utilized by the agent", + "examples": [ + "function", + "extension", + "datastore" + ], + "name": "gen_ai.tool.type", + "note": "Extension: A tool executed on the agent-side to directly call external APIs, bridging the gap between the agent and real-world systems.\n Agent-side operations involve actions that are performed by the agent on the server or within the agent\u0027s controlled environment.\nFunction: A tool executed on the client-side, where the agent generates parameters for a predefined function, and the client executes the logic.\n Client-side operations are actions taken on the user\u0027s end or within the client application.\nDatastore: A tool used by the agent to access and query structured or unstructured external data for retrieval-augmented tasks or knowledge updates.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Parameters passed to the tool call.", + "examples": [ + "{\n \"location\": \"San Francisco?\",\n \"date\": \"2025-10-01\"\n}\n" + ], + "name": "gen_ai.tool.call.arguments", + "note": "\u003e [!WARNING]\n\u003e This attribute may contain sensitive information.\n\nIt\u0027s expected to be an object - in case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an object. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "any" + }, + { + "brief": "The result returned by the tool call (if any and if execution was successful).", + "examples": [ + "{\n \"temperature_range\": {\n \"high\": 75,\n \"low\": 60\n },\n \"conditions\": \"sunny\"\n}\n" + ], + "name": "gen_ai.tool.call.result", + "note": "\u003e [!WARNING]\n\u003e This attribute may contain sensitive information.\n\nIt\u0027s expected to be an object - in case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an object. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "any" + }, + { + "brief": "The list of source system tool definitions available to the GenAI agent or model.", + "examples": [ + "[\n {\n \"type\": \"function\",\n \"name\": \"get_current_weather\",\n \"description\": \"Get the current weather in a given location\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"location\": {\n \"type\": \"string\",\n \"description\": \"The city and state, e.g. San Francisco, CA\"\n },\n \"unit\": {\n \"type\": \"string\",\n \"enum\": [\n \"celsius\",\n \"fahrenheit\"\n ]\n }\n },\n \"required\": [\n \"location\",\n \"unit\"\n ]\n }\n }\n]\n" + ], + "name": "gen_ai.tool.definitions", + "note": "The value of this attribute matches source system tool definition format.\n\nIt\u0027s expected to be an array of objects where each object represents a tool definition. In case a serialized string is available\nto the instrumentation, the instrumentation SHOULD do the best effort to\ndeserialize it to an array. When recorded on spans, it MAY be recorded as a JSON string if structured format is not supported and SHOULD be recorded in structured form otherwise.\n\nSince this attribute could be large, it\u0027s NOT RECOMMENDED to populate\nit by default. Instrumentations MAY provide a way to enable\npopulating this attribute.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "any" + }, + { + "brief": "The data source identifier.", + "examples": [ + "H7STPQYOND" + ], + "name": "gen_ai.data_source.id", + "note": "Data sources are used by AI agents and RAG applications to store grounding data. A data source may be an external database, object store, document collection, website, or any other storage system used by the GenAI agent or application. The `gen_ai.data_source.id` SHOULD match the identifier used by the GenAI system rather than a name specific to the external storage, such as a database or object store. Semantic conventions referencing `gen_ai.data_source.id` MAY also leverage additional attributes, such as `db.*`, to further identify and describe the data source.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the operation being performed.", + "name": "gen_ai.operation.name", + "note": "If one of the predefined values applies, but specific system uses a different name it\u0027s RECOMMENDED to document it in the semantic conventions for specific GenAI system and use system-specific name in the instrumentation. If a different name is not documented, instrumentation libraries SHOULD use applicable predefined value.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Chat completion operation such as [OpenAI Chat API](https://platform.openai.com/docs/api-reference/chat)", + "id": "chat", + "stability": "development", + "value": "chat" + }, + { + "brief": "Multimodal content generation operation such as [Gemini Generate Content](https://ai.google.dev/api/generate-content)", + "id": "generate_content", + "stability": "development", + "value": "generate_content" + }, + { + "brief": "Text completions operation such as [OpenAI Completions API (Legacy)](https://platform.openai.com/docs/api-reference/completions)", + "id": "text_completion", + "stability": "development", + "value": "text_completion" + }, + { + "brief": "Embeddings operation such as [OpenAI Create embeddings API](https://platform.openai.com/docs/api-reference/embeddings/create)", + "id": "embeddings", + "stability": "development", + "value": "embeddings" + }, + { + "brief": "Create GenAI agent", + "id": "create_agent", + "stability": "development", + "value": "create_agent" + }, + { + "brief": "Invoke GenAI agent", + "id": "invoke_agent", + "stability": "development", + "value": "invoke_agent" + }, + { + "brief": "Execute a tool", + "id": "execute_tool", + "stability": "development", + "value": "execute_tool" + } + ] + } + }, + { + "brief": "Represents the content type requested by the client.", + "name": "gen_ai.output.type", + "note": "This attribute SHOULD be used when the client requests output of a specific type. The model may return zero or more outputs of this type.\nThis attribute specifies the output modality and not the actual output format. For example, if an image is requested, the actual output could be a URL pointing to an image file.\nAdditional output format details may be recorded in the future in the `gen_ai.output.{type}.*` attributes.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Plain text", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object with known or unknown schema", + "id": "json", + "stability": "development", + "value": "json" + }, + { + "brief": "Image", + "id": "image", + "stability": "development", + "value": "image" + }, + { + "brief": "Speech", + "id": "speech", + "stability": "development", + "value": "speech" + } + ] + } + }, + { + "brief": "The number of dimensions the resulting output embeddings should have.", + "examples": [ + 512, + 1024 + ], + "name": "gen_ai.embeddings.dimension.count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The system message or instructions provided to the GenAI model separately from the chat history.", + "examples": [ + "[\n {\n \"type\": \"text\",\n \"content\": \"You are an Agent that greet users, always use greetings tool to respond\"\n }\n]\n", + "[\n {\n \"type\": \"text\",\n \"content\": \"You are a language translator.\"\n },\n {\n \"type\": \"text\",\n \"content\": \"Your mission is to translate text in English to French.\"\n }\n]\n" + ], + "name": "gen_ai.system_instructions", + "note": "This attribute SHOULD be used when the corresponding provider or API\nallows to provide system instructions or messages separately from the\nchat history.\n\nInstructions that are part of the chat history SHOULD be recorded in\n`gen_ai.input.messages` attribute instead.\n\nInstrumentations MUST follow [System instructions JSON schema](/docs/gen-ai/gen-ai-system-instructions.json).\n\nWhen recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\nsystem instructions.\n\n\u003e [!Warning]\n\u003e This attribute may contain sensitive information.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "any" + }, + { + "brief": "The chat history provided to the model as an input.\n", + "examples": [ + "[\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"Weather in Paris?\"\n }\n ]\n },\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"tool_call\",\n \"id\": \"call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"name\": \"get_weather\",\n \"arguments\": {\n \"location\": \"Paris\"\n }\n }\n ]\n },\n {\n \"role\": \"tool\",\n \"parts\": [\n {\n \"type\": \"tool_call_response\",\n \"id\": \" call_VSPygqKTWdrhaFErNvMV18Yl\",\n \"result\": \"rainy, 57°F\"\n }\n ]\n }\n]\n" + ], + "name": "gen_ai.input.messages", + "note": "Instrumentations MUST follow [Input messages JSON schema](/docs/gen-ai/gen-ai-input-messages.json).\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nMessages MUST be provided in the order they were sent to the model.\nInstrumentations MAY provide a way for users to filter or truncate\ninput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "any" + }, + { + "brief": "Messages returned by the model where each message represents a specific model response (choice, candidate).", + "examples": [ + "[\n {\n \"role\": \"assistant\",\n \"parts\": [\n {\n \"type\": \"text\",\n \"content\": \"The weather in Paris is currently rainy with a temperature of 57°F.\"\n }\n ],\n \"finish_reason\": \"stop\"\n }\n]\n" + ], + "name": "gen_ai.output.messages", + "note": "Instrumentations MUST follow [Output messages JSON schema](/docs/gen-ai/gen-ai-output-messages.json)\n\nEach message represents a single output choice/candidate generated by\nthe model. Each message corresponds to exactly one generation\n(choice/candidate) and vice versa - one choice cannot be split across\nmultiple messages or one message cannot contain parts from multiple choices.\n\nWhen the attribute is recorded on events, it MUST be recorded in structured\nform. When recorded on spans, it MAY be recorded as a JSON string if structured\nformat is not supported and SHOULD be recorded in structured form otherwise.\n\nInstrumentations MAY provide a way for users to filter or truncate\noutput messages.\n\n\u003e [!Warning]\n\u003e This attribute is likely to contain sensitive information including user/PII data.\n\nSee [Recording content on attributes](/docs/gen-ai/gen-ai-spans.md#recording-content-on-attributes)\nsection for more details.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "any" + }, + { + "brief": "The name of the evaluation metric used for the GenAI response.", + "examples": [ + "Relevance", + "IntentResolution" + ], + "name": "gen_ai.evaluation.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The evaluation score returned by the evaluator.", + "examples": [ + 4.0 + ], + "name": "gen_ai.evaluation.score.value", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "Human readable label for evaluation.", + "examples": [ + "relevant", + "not_relevant", + "correct", + "incorrect", + "pass", + "fail" + ], + "name": "gen_ai.evaluation.score.label", + "note": "This attribute provides a human-readable interpretation of the evaluation score produced by an evaluator. For example, a score value of 1 could mean \"relevant\" in one evaluation system and \"not relevant\" in another, depending on the scoring range and evaluator. The label SHOULD have low cardinality. Possible values depend on the evaluation metric and evaluator used; implementations SHOULD document the possible values.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A free-form explanation for the assigned score provided by the evaluator.", + "examples": [ + "The response is factually accurate but lacks sufficient detail to fully address the question." + ], + "name": "gen_ai.evaluation.explanation", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines the attributes used to describe telemetry in the context of Generative Artificial Intelligence (GenAI) Models requests and responses.\n", + "display_name": "GenAI Attributes", + "id": "registry.gen_ai", + "lineage": { + "provenance": { + "path": "/home/weaver/source/gen-ai/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Time and date the release was created\n", + "examples": [ + "2022-10-23T18:00:42Z" + ], + "name": "heroku.release.creation_timestamp", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "Commit hash for the current release\n", + "examples": [ + "e6134959463efd8966b20e75b913cafe3f5ec" + ], + "name": "heroku.release.commit", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier for the application\n", + "examples": [ + "2daa2797-e42b-4624-9322-ec3f968df4da" + ], + "name": "heroku.app.id", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "[Heroku dyno metadata](https://devcenter.heroku.com/articles/dyno-metadata)\n", + "id": "entity.heroku", + "lineage": { + "attributes": { + "heroku.app.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.heroku" + }, + "heroku.release.commit": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.heroku" + }, + "heroku.release.creation_timestamp": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.heroku" + } + }, + "provenance": { + "path": "/home/weaver/source/heroku/entities.yaml", + "registry_id": "main" + } + }, + "name": "heroku", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "A unique identifier for the Log Record.\n", + "examples": [ + "01ARZ3NDEKTSV4RRFFQ69G5FAV" + ], + "name": "log.record.uid", + "note": "If an id is provided, other log records with the same id will be considered duplicates and can be removed safely. This means, that two distinguishable log records MUST have different values.\nThe id MAY be an [Universally Unique Lexicographically Sortable Identifier (ULID)](https://github.com/ulid/spec), but other identifiers (e.g. UUID) may be used as needed.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The complete original Log Record.\n", + "examples": [ + "77 \u003c86\u003e1 2015-08-06T21:58:59.694Z 192.168.2.133 inactive - - - Something happened", + "[INFO] 8/3/24 12:34:56 Something happened" + ], + "name": "log.record.original", + "note": "This value MAY be added when processing a Log Record which was originally transmitted as a string or equivalent data type AND the Body field of the Log Record does not contain the same value. (e.g. a syslog or a log record read from a file.)\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "The attributes described in this section are rather generic. They may be used in any Log Record they apply to.\n", + "id": "log.record", + "lineage": { + "attributes": { + "log.record.original": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.log.record" + }, + "log.record.uid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.log.record" + } + }, + "provenance": { + "path": "/home/weaver/source/log/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The stream associated with the log. See below for a list of well-known values.\n", + "name": "log.iostream", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "Logs from stdout stream", + "id": "stdout", + "stability": "development", + "value": "stdout" + }, + { + "brief": "Events from stderr stream", + "id": "stderr", + "stability": "development", + "value": "stderr" + } + ] + } + } + ], + "brief": "Describes Log attributes", + "id": "attributes.log", + "lineage": { + "attributes": { + "log.iostream": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.log" + } + }, + "provenance": { + "path": "/home/weaver/source/log/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The basename of the file.\n", + "examples": [ + "audit.log" + ], + "name": "log.file.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full path to the file.\n", + "examples": [ + "/var/log/mysql/audit.log" + ], + "name": "log.file.path", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The basename of the file, with symlinks resolved.\n", + "examples": [ + "uuid.log" + ], + "name": "log.file.name_resolved", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The full path to the file, with symlinks resolved.\n", + "examples": [ + "/var/lib/docker/uuid.log" + ], + "name": "log.file.path_resolved", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "A file to which log was emitted.\n", + "id": "attributes.log.file", + "lineage": { + "attributes": { + "log.file.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.log.file" + }, + "log.file.name_resolved": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.log.file" + }, + "log.file.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.log.file" + }, + "log.file.path_resolved": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.log.file" + } + }, + "provenance": { + "path": "/home/weaver/source/log/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The type of garbage collection.", + "name": "v8js.gc.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Major (Mark Sweep Compact).", + "id": "major", + "stability": "development", + "value": "major" + }, + { + "brief": "Minor (Scavenge).", + "id": "minor", + "stability": "development", + "value": "minor" + }, + { + "brief": "Incremental (Incremental Marking).", + "id": "incremental", + "stability": "development", + "value": "incremental" + }, + { + "brief": "Weak Callbacks (Process Weak Callbacks).", + "id": "weakcb", + "stability": "development", + "value": "weakcb" + } + ] + } + }, + { + "brief": "The name of the space type of heap memory.", + "name": "v8js.heap.space.name", + "note": "Value can be retrieved from value `space_name` of [`v8.getHeapSpaceStatistics()`](https://nodejs.org/api/v8.html#v8getheapspacestatistics)\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "New memory space.", + "id": "new_space", + "stability": "development", + "value": "new_space" + }, + { + "brief": "Old memory space.", + "id": "old_space", + "stability": "development", + "value": "old_space" + }, + { + "brief": "Code memory space.", + "id": "code_space", + "stability": "development", + "value": "code_space" + }, + { + "brief": "Map memory space.", + "id": "map_space", + "stability": "development", + "value": "map_space" + }, + { + "brief": "Large object memory space.", + "id": "large_object_space", + "stability": "development", + "value": "large_object_space" + } + ] + } + } + ], + "brief": "Describes V8 JS Engine Runtime related attributes.", + "display_name": "V8 JS Attributes", + "id": "registry.v8js", + "lineage": { + "provenance": { + "path": "/home/weaver/source/v8js/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The result of a pipeline run.\n", + "examples": [ + "success", + "failure", + "timeout", + "skipped" + ], + "name": "cicd.pipeline.result", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The pipeline run finished successfully.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "The pipeline run did not finish successfully, eg. due to a compile error or a failing test. Such failures are usually detected by non-zero exit codes of the tools executed in the pipeline run.", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "The pipeline run failed due to an error in the CICD system, eg. due to the worker being killed.", + "id": "error", + "stability": "development", + "value": "error" + }, + { + "brief": "A timeout caused the pipeline run to be interrupted.", + "id": "timeout", + "stability": "development", + "value": "timeout" + }, + { + "brief": "The pipeline run was cancelled, eg. by a user manually cancelling the pipeline run.", + "id": "cancellation", + "stability": "development", + "value": "cancellation" + }, + { + "brief": "The pipeline run was skipped, eg. due to a precondition not being met.", + "id": "skip", + "stability": "development", + "value": "skip" + } + ] + } + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "if the pipeline result is `failure` or `error`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The kind of action a pipeline run is performing.\n", + "examples": [ + "BUILD", + "RUN", + "SYNC" + ], + "name": "cicd.pipeline.action.name", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "The pipeline run is executing a build.", + "id": "build", + "stability": "development", + "value": "BUILD" + }, + { + "brief": "The pipeline run is executing.", + "id": "run", + "stability": "development", + "value": "RUN" + }, + { + "brief": "The pipeline run is executing a sync.", + "id": "sync", + "stability": "development", + "value": "SYNC" + } + ] + } + } + ], + "brief": "This span describes a CICD pipeline run.", + "id": "span.cicd.pipeline.run.server", + "lineage": { + "attributes": { + "cicd.pipeline.action.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.pipeline.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/spans.yaml", + "registry_id": "main" + } + }, + "note": "For all pipeline runs, a span with kind `SERVER` SHOULD be created corresponding to the execution of the pipeline run.\n\n**Span name** MUST follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.43.0/specification/trace/api.md#span).\n\nThe span name SHOULD be `{action} {pipeline}` if there is a (low-cardinality) pipeline name available.\nIf the pipeline name is not available or is likely to have high cardinality, then the span name SHOULD be `{action}`.\n\nThe `{action}` SHOULD be the [`cicd.pipeline.action.name`](/docs/registry/attributes/cicd.md#cicd-pipeline-action-name).\n\nThe `{pipeline}` SHOULD be the [`cicd.pipeline.name`](/docs/registry/attributes/cicd.md#cicd-pipeline-name).\n", + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The human readable name of a task within a pipeline. Task here most closely aligns with a [computing process](https://wikipedia.org/wiki/Pipeline_(computing)) in a pipeline. Other terms for tasks include commands, steps, and procedures.\n", + "examples": [ + "Run GoLang Linter", + "Go Build", + "go-test", + "deploy_binary" + ], + "name": "cicd.pipeline.task.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier of a task run within a pipeline.\n", + "examples": [ + "12097" + ], + "name": "cicd.pipeline.task.run.id", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "The [URL](https://wikipedia.org/wiki/URL) of the pipeline task run, providing the complete address in order to locate and identify the pipeline task run.\n", + "examples": [ + "https://github.com/open-telemetry/semantic-conventions/actions/runs/9753949763/job/26920038674?pr=1075" + ], + "name": "cicd.pipeline.task.run.url.full", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "development", + "type": "string" + }, + { + "brief": "The result of a task run.\n", + "examples": [ + "success", + "failure", + "timeout", + "skipped" + ], + "name": "cicd.pipeline.task.run.result", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The task run finished successfully.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "The task run did not finish successfully, eg. due to a compile error or a failing test. Such failures are usually detected by non-zero exit codes of the tools executed in the task run.", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "The task run failed due to an error in the CICD system, eg. due to the worker being killed.", + "id": "error", + "stability": "development", + "value": "error" + }, + { + "brief": "A timeout caused the task run to be interrupted.", + "id": "timeout", + "stability": "development", + "value": "timeout" + }, + { + "brief": "The task run was cancelled, eg. by a user manually cancelling the task run.", + "id": "cancellation", + "stability": "development", + "value": "cancellation" + }, + { + "brief": "The task run was skipped, eg. due to a precondition not being met.", + "id": "skip", + "stability": "development", + "value": "skip" + } + ] + } + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "if the task result is `failure` or `error`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "This span describes task execution in a pipeline run.", + "id": "span.cicd.pipeline.task.internal", + "lineage": { + "attributes": { + "cicd.pipeline.task.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.pipeline.task.run.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.pipeline.task.run.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cicd.pipeline" + }, + "cicd.pipeline.task.run.url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.cicd.pipeline" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/cicd/spans.yaml", + "registry_id": "main" + } + }, + "span_kind": "internal", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Destination address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "destination.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "destination.address", + "note": "When observed from the source side, and when communicating through an intermediary, `destination.address` SHOULD represent the destination address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Destination port number", + "examples": [ + 3389, + 2888 + ], + "name": "destination.port", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "General destination attributes.\n", + "id": "destination", + "lineage": { + "attributes": { + "destination.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.destination" + }, + "destination.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.destination" + } + }, + "provenance": { + "path": "/home/weaver/source/destination/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "other", + "stack" + ], + "name": "go.memory.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Memory allocated from the heap that is reserved for stack space, whether or not it is currently in-use.", + "id": "stack", + "note": "Computed from `/memory/classes/heap/stacks:bytes`.\n", + "stability": "development", + "value": "stack" + }, + { + "brief": "Memory used by the Go runtime, excluding other categories of memory usage described in this enumeration.", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + } + ], + "brief": "This document defines Go related attributes.\n", + "display_name": "Go Attributes", + "id": "registry.go", + "lineage": { + "provenance": { + "path": "/home/weaver/source/go/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for tape drive metrics\n", + "id": "metric_attributes.hw.tape_drive", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/tape-drive-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of tape drive operation\n", + "examples": [ + "mount", + "unmount", + "clean" + ], + "name": "hw.tape_drive.operation_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Mount", + "id": "mount", + "stability": "development", + "value": "mount" + }, + { + "brief": "Unmount", + "id": "unmount", + "stability": "development", + "value": "unmount" + }, + { + "brief": "Clean", + "id": "clean", + "stability": "development", + "value": "clean" + } + ] + } + } + ], + "brief": "Operations performed by the tape drive.", + "id": "metric.hw.tape_drive.operations", + "instrument": "counter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.tape_drive.operation_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/tape-drive-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.tape_drive.operations", + "stability": "development", + "type": "metric", + "unit": "{operation}" + }, + { + "attributes": [ + { + "brief": "Deprecated. Use the `ios.app.state` attribute.\n", + "deprecated": { + "note": "Replaced by `ios.app.state`.", + "reason": "renamed", + "renamed_to": "ios.app.state" + }, + "name": "ios.state", + "note": "The iOS lifecycle states are defined in the [UIApplicationDelegate documentation](https://developer.apple.com/documentation/uikit/uiapplicationdelegate), and from which the `OS terminology` column values are derived.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The app has become `active`. Associated with UIKit notification `applicationDidBecomeActive`.\n", + "id": "active", + "stability": "development", + "value": "active" + }, + { + "brief": "The app is now `inactive`. Associated with UIKit notification `applicationWillResignActive`.\n", + "id": "inactive", + "stability": "development", + "value": "inactive" + }, + { + "brief": "The app is now in the background. This value is associated with UIKit notification `applicationDidEnterBackground`.\n", + "id": "background", + "stability": "development", + "value": "background" + }, + { + "brief": "The app is now in the foreground. This value is associated with UIKit notification `applicationWillEnterForeground`.\n", + "id": "foreground", + "stability": "development", + "value": "foreground" + }, + { + "brief": "The app is about to terminate. Associated with UIKit notification `applicationWillTerminate`.\n", + "id": "terminate", + "stability": "development", + "value": "terminate" + } + ] + } + } + ], + "brief": "The iOS platform on which the iOS application is running.\n", + "display_name": "Deprecated iOS Attributes", + "id": "registry.ios.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/ios/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Deprecated. Use `messaging.client.operation.duration` instead.", + "deprecated": { + "note": "Replaced by `messaging.client.operation.duration`.", + "reason": "renamed", + "renamed_to": "messaging.client.operation.duration" + }, + "id": "metric.messaging.publish.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.publish.duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Deprecated. Use `messaging.client.operation.duration` instead.", + "deprecated": { + "note": "Replaced by `messaging.client.operation.duration`.", + "reason": "renamed", + "renamed_to": "messaging.client.operation.duration" + }, + "id": "metric.messaging.receive.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.receive.duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Deprecated. Use `messaging.client.consumed.messages` instead.", + "deprecated": { + "note": "Replaced by `messaging.client.consumed.messages`.", + "reason": "renamed", + "renamed_to": "messaging.client.consumed.messages" + }, + "id": "metric.messaging.process.messages", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.process.messages", + "stability": "development", + "type": "metric", + "unit": "{message}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Deprecated. Use `messaging.client.sent.messages` instead.", + "deprecated": { + "note": "Replaced by `messaging.client.sent.messages`.", + "reason": "renamed", + "renamed_to": "messaging.client.sent.messages" + }, + "id": "metric.messaging.publish.messages", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.publish.messages", + "stability": "development", + "type": "metric", + "unit": "{message}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Deprecated. Use `messaging.client.consumed.messages` instead.", + "deprecated": { + "note": "Replaced by `messaging.client.consumed.messages`.", + "reason": "renamed", + "renamed_to": "messaging.client.consumed.messages" + }, + "id": "metric.messaging.receive.messages", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.receive.messages", + "stability": "development", + "type": "metric", + "unit": "{message}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The identifier of the partition messages are sent to or received from, unique within the `messaging.destination.name`.\n", + "examples": "1", + "name": "messaging.destination.partition.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The system-specific name of the messaging operation.\n", + "examples": [ + "ack", + "nack", + "send" + ], + "name": "messaging.operation.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The message destination name", + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination.name", + "note": "Destination name SHOULD uniquely identify a specific queue, topic or other entity within the broker. If\nthe broker doesn\u0027t have such notion, the destination name SHOULD uniquely identify the broker.\n", + "requirement_level": { + "conditionally_required": "if and only if `messaging.destination.name` is known to have low cardinality. Otherwise, `messaging.destination.template` MAY be populated." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Low cardinality representation of the messaging destination name", + "examples": [ + "/customers/{customerId}" + ], + "name": "messaging.destination.template", + "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", + "requirement_level": { + "conditionally_required": "if available." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The messaging system as identified by the client instrumentation.", + "name": "messaging.system", + "note": "The actual messaging system may differ from the one known by the client. For example, when using Kafka client libraries to communicate with Azure Event Hubs, the `messaging.system` is set to `kafka` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Apache ActiveMQ", + "id": "activemq", + "stability": "development", + "value": "activemq" + }, + { + "brief": "Amazon Simple Notification Service (SNS)", + "id": "aws.sns", + "stability": "development", + "value": "aws.sns" + }, + { + "brief": "Amazon Simple Queue Service (SQS)", + "id": "aws_sqs", + "stability": "development", + "value": "aws_sqs" + }, + { + "brief": "Azure Event Grid", + "id": "eventgrid", + "stability": "development", + "value": "eventgrid" + }, + { + "brief": "Azure Event Hubs", + "id": "eventhubs", + "stability": "development", + "value": "eventhubs" + }, + { + "brief": "Azure Service Bus", + "id": "servicebus", + "stability": "development", + "value": "servicebus" + }, + { + "brief": "Google Cloud Pub/Sub", + "id": "gcp_pubsub", + "stability": "development", + "value": "gcp_pubsub" + }, + { + "brief": "Java Message Service", + "id": "jms", + "stability": "development", + "value": "jms" + }, + { + "brief": "Apache Kafka", + "id": "kafka", + "stability": "development", + "value": "kafka" + }, + { + "brief": "RabbitMQ", + "id": "rabbitmq", + "stability": "development", + "value": "rabbitmq" + }, + { + "brief": "Apache RocketMQ", + "id": "rocketmq", + "stability": "development", + "value": "rocketmq" + }, + { + "brief": "Apache Pulsar", + "id": "pulsar", + "stability": "development", + "value": "pulsar" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Deprecated. Use `messaging.client.sent.messages` instead.", + "deprecated": { + "note": "Replaced by `messaging.client.sent.messages`.", + "reason": "renamed", + "renamed_to": "messaging.client.sent.messages" + }, + "id": "metric.messaging.client.published.messages", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "messaging.client.published.messages", + "stability": "development", + "type": "metric", + "unit": "{message}" + }, + { + "attributes": [ + { + "brief": "Parent-child Reference type", + "name": "opentracing.ref_type", + "note": "The causal relationship between a child Span and a parent Span.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The parent Span depends on the child Span in some capacity", + "id": "child_of", + "stability": "development", + "value": "child_of" + }, + { + "brief": "The parent Span doesn\u0027t depend in any way on the result of the child Span", + "id": "follows_from", + "stability": "development", + "value": "follows_from" + } + ] + } + } + ], + "brief": "This document defines semantic conventions for the OpenTracing Shim", + "id": "opentracing", + "lineage": { + "attributes": { + "opentracing.ref_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.opentracing" + } + }, + "provenance": { + "path": "/home/weaver/source/opentracing/common.yaml", + "registry_id": "main" + } + }, + "note": "These conventions are used by the OpenTracing Shim layer.\n", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes the interpreter or compiler of a single frame.\n", + "examples": [ + "cpython" + ], + "name": "profile.frame.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "[.NET](https://wikipedia.org/wiki/.NET)\n", + "id": "dotnet", + "stability": "development", + "value": "dotnet" + }, + { + "brief": "[JVM](https://wikipedia.org/wiki/Java_virtual_machine)\n", + "id": "jvm", + "stability": "development", + "value": "jvm" + }, + { + "brief": "[Kernel](https://wikipedia.org/wiki/Kernel_(operating_system))\n", + "id": "kernel", + "stability": "development", + "value": "kernel" + }, + { + "brief": "Can be one of but not limited to [C](https://wikipedia.org/wiki/C_(programming_language)), [C++](https://wikipedia.org/wiki/C%2B%2B), [Go](https://wikipedia.org/wiki/Go_(programming_language)) or [Rust](https://wikipedia.org/wiki/Rust_(programming_language)). If possible, a more precise value MUST be used.\n", + "id": "native", + "stability": "development", + "value": "native" + }, + { + "brief": "[Perl](https://wikipedia.org/wiki/Perl)\n", + "id": "perl", + "stability": "development", + "value": "perl" + }, + { + "brief": "[PHP](https://wikipedia.org/wiki/PHP)\n", + "id": "php", + "stability": "development", + "value": "php" + }, + { + "brief": "[Python](https://wikipedia.org/wiki/Python_(programming_language))\n", + "id": "cpython", + "stability": "development", + "value": "cpython" + }, + { + "brief": "[Ruby](https://wikipedia.org/wiki/Ruby_(programming_language))\n", + "id": "ruby", + "stability": "development", + "value": "ruby" + }, + { + "brief": "[V8JS](https://wikipedia.org/wiki/V8_(JavaScript_engine))\n", + "id": "v8js", + "stability": "development", + "value": "v8js" + }, + { + "brief": "[Erlang](https://en.wikipedia.org/wiki/BEAM_(Erlang_virtual_machine))\n", + "id": "beam", + "stability": "development", + "value": "beam" + }, + { + "brief": "[Go](https://wikipedia.org/wiki/Go_(programming_language)),\n", + "id": "go", + "stability": "development", + "value": "go" + }, + { + "brief": "[Rust](https://wikipedia.org/wiki/Rust_(programming_language))\n", + "id": "rust", + "stability": "development", + "value": "rust" + } + ] + } + } + ], + "brief": "Describes the origin of a single frame in a Profile.\n", + "id": "profile.frame", + "lineage": { + "attributes": { + "profile.frame.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.profile.frame" + } + }, + "provenance": { + "path": "/home/weaver/source/profile/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `server.address` instead.", + "deprecated": { + "note": "Replaced by `server.address`.", + "reason": "renamed", + "renamed_to": "server.address" + }, + "examples": [ + "opentelemetry.io" + ], + "name": "tls.client.server_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated `tls` attributes.", + "id": "registry.tls.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/tls/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the logical partition that hosts a systems with a mainframe operating system.", + "examples": [ + "LPAR01" + ], + "name": "mainframe.lpar.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the SYSPLEX to which the z/OS system belongs too.", + "examples": [ + "SYSPLEX1" + ], + "name": "zos.sysplex.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The System Management Facility (SMF) Identifier uniquely identified a z/OS system within a SYSPLEX or mainframe environment and is used for system and performance analysis.", + "examples": [ + "SYS1" + ], + "name": "zos.smf.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "A software resource running on a z/OS system.", + "id": "entity.zos.software", + "lineage": { + "attributes": { + "mainframe.lpar.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.mainframe.lpar" + }, + "zos.smf.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.zos" + }, + "zos.sysplex.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.zos" + } + }, + "provenance": { + "path": "/home/weaver/source/zos/entities.yaml", + "registry_id": "main" + } + }, + "name": "zos.software", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "A unique identifier representing the installation of an application on a specific device\n", + "examples": [ + "2ab2916d-a51f-4ac8-80ee-45ac31a28092" + ], + "name": "app.installation.id", + "note": "Its value SHOULD persist across launches of the same application installation, including through application upgrades.\nIt SHOULD change if the application is uninstalled or if all applications of the vendor are uninstalled.\nAdditionally, users might be able to reset this value (e.g. by clearing application data).\nIf an app is installed multiple times on the same device (e.g. in different accounts on Android), each `app.installation.id` SHOULD have a different value.\nIf multiple OpenTelemetry SDKs are used within the same application, they SHOULD use the same value for `app.installation.id`.\nHardware IDs (e.g. serial number, IMEI, MAC address) MUST NOT be used as the `app.installation.id`.\n\nFor iOS, this value SHOULD be equal to the [vendor identifier](https://developer.apple.com/documentation/uikit/uidevice/identifierforvendor).\n\nFor Android, examples of `app.installation.id` implementations include:\n\n- [Firebase Installation ID](https://firebase.google.com/docs/projects/manage-installations).\n- A globally unique UUID which is persisted across sessions in your application.\n- [App set ID](https://developer.android.com/identity/app-set-id).\n- [`Settings.getString(Settings.Secure.ANDROID_ID)`](https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID).\n\nMore information about Android identifier best practices can be found in the [Android user data IDs guide](https://developer.android.com/training/articles/user-data-ids).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier for a particular build or compilation of the application.", + "examples": [ + "6cff0a7e-cefc-4668-96f5-1273d8b334d0", + "9f2b833506aa6973a92fde9733e6271f", + "my-app-1.0.0-code-123" + ], + "name": "app.build_id", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "string" + } + ], + "brief": "An app used directly by end users — like mobile, web, or desktop.\n", + "id": "entity.app", + "lineage": { + "attributes": { + "app.build_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.app" + }, + "app.installation.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.app" + } + }, + "provenance": { + "path": "/home/weaver/source/app/entities.yaml", + "registry_id": "main" + } + }, + "name": "app", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The data center of the coordinating node for a query.\n", + "examples": "us-west-2", + "name": "cassandra.coordinator.dc", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ID of the coordinating node for a query.\n", + "examples": "be13faa2-8574-4d71-926d-27f16cf8a7af", + "name": "cassandra.coordinator.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "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": "cassandra.consistency.level", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "All", + "id": "all", + "stability": "development", + "value": "all" + }, + { + "brief": "Each Quorum", + "id": "each_quorum", + "stability": "development", + "value": "each_quorum" + }, + { + "brief": "Quorum", + "id": "quorum", + "stability": "development", + "value": "quorum" + }, + { + "brief": "Local Quorum", + "id": "local_quorum", + "stability": "development", + "value": "local_quorum" + }, + { + "brief": "One", + "id": "one", + "stability": "development", + "value": "one" + }, + { + "brief": "Two", + "id": "two", + "stability": "development", + "value": "two" + }, + { + "brief": "Three", + "id": "three", + "stability": "development", + "value": "three" + }, + { + "brief": "Local One", + "id": "local_one", + "stability": "development", + "value": "local_one" + }, + { + "brief": "Any", + "id": "any", + "stability": "development", + "value": "any" + }, + { + "brief": "Serial", + "id": "serial", + "stability": "development", + "value": "serial" + }, + { + "brief": "Local Serial", + "id": "local_serial", + "stability": "development", + "value": "local_serial" + } + ] + } + }, + { + "brief": "Whether or not the query is idempotent.\n", + "name": "cassandra.query.idempotent", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The fetch size used for paging, i.e. how many rows will be returned at once.\n", + "examples": [ + 5000 + ], + "name": "cassandra.page.size", + "requirement_level": "recommended", + "stability": "development", + "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": "cassandra.speculative_execution.count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "This section defines attributes for Cassandra.\n", + "display_name": "Cassandra Attributes", + "id": "registry.cassandra", + "lineage": { + "provenance": { + "path": "/home/weaver/source/cassandra/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `container.label` instead.", + "deprecated": { + "note": "Replaced by `container.label`.", + "reason": "renamed", + "renamed_to": "container.label" + }, + "examples": [ + "nginx" + ], + "name": "container.labels", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Deprecated, use `cpu.mode` instead.", + "deprecated": { + "note": "Replaced by `cpu.mode`.", + "reason": "renamed", + "renamed_to": "cpu.mode" + }, + "examples": [ + "user", + "kernel" + ], + "name": "container.cpu.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "When tasks of the cgroup are in user mode (Linux). When all container processes are in user mode (Windows).", + "id": "user", + "stability": "development", + "value": "user" + }, + { + "brief": "When CPU is used by the system (host OS)", + "id": "system", + "stability": "development", + "value": "system" + }, + { + "brief": "When tasks of the cgroup are in kernel mode (Linux). When all container processes are in kernel mode (Windows).", + "id": "kernel", + "stability": "development", + "value": "kernel" + } + ] + } + }, + { + "brief": "The container runtime managing this container.\n", + "deprecated": { + "note": "Replaced by `container.runtime.name`.", + "reason": "renamed", + "renamed_to": "container.runtime.name" + }, + "examples": [ + "docker", + "containerd", + "rkt" + ], + "name": "container.runtime", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated container attributes.", + "display_name": "Deprecated Container Attributes", + "id": "registry.container.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/container/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Deprecated, use `feature_flag.provider.name` instead.", + "deprecated": { + "note": "Replaced by `feature_flag.provider.name`.", + "reason": "renamed", + "renamed_to": "feature_flag.provider.name" + }, + "examples": [ + "Flag Manager" + ], + "name": "feature_flag.provider_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `feature_flag.result.reason` instead.", + "deprecated": { + "note": "Replaced by `feature_flag.result.reason`.", + "reason": "renamed", + "renamed_to": "feature_flag.result.reason" + }, + "examples": [ + "static", + "targeting_match", + "error", + "default" + ], + "name": "feature_flag.evaluation.reason", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The resolved value is static (no dynamic evaluation).", + "id": "static", + "stability": "development", + "value": "static" + }, + { + "brief": "The resolved value fell back to a pre-configured value (no dynamic evaluation occurred or dynamic evaluation yielded no result).", + "id": "default", + "stability": "development", + "value": "default" + }, + { + "brief": "The resolved value was the result of a dynamic evaluation, such as a rule or specific user-targeting.", + "id": "targeting_match", + "stability": "development", + "value": "targeting_match" + }, + { + "brief": "The resolved value was the result of pseudorandom assignment.", + "id": "split", + "stability": "development", + "value": "split" + }, + { + "brief": "The resolved value was retrieved from cache.", + "id": "cached", + "stability": "development", + "value": "cached" + }, + { + "brief": "The resolved value was the result of the flag being disabled in the management system.", + "id": "disabled", + "stability": "development", + "value": "disabled" + }, + { + "brief": "The reason for the resolved value could not be determined.", + "id": "unknown", + "stability": "development", + "value": "unknown" + }, + { + "brief": "The resolved value is non-authoritative or possibly out of date", + "id": "stale", + "stability": "development", + "value": "stale" + }, + { + "brief": "The resolved value was the result of an error.", + "id": "error", + "stability": "development", + "value": "error" + } + ] + } + }, + { + "brief": "Deprecated, use `feature_flag.result.variant` instead.", + "deprecated": { + "note": "Replaced by `feature_flag.result.variant`.", + "reason": "renamed", + "renamed_to": "feature_flag.result.variant" + }, + "examples": [ + "red", + "true", + "on" + ], + "name": "feature_flag.variant", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `error.message` instead.", + "deprecated": { + "note": "Replaced by `error.message`.", + "reason": "renamed", + "renamed_to": "error.message" + }, + "examples": [ + "Flag `header-color` expected type `string` but found type `number`" + ], + "name": "feature_flag.evaluation.error.message", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated feature flag attributes.", + "display_name": "Deprecated Feature Flag Attributes", + "id": "registry.feature_flag.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/feature-flags/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Battery [chemistry](https://schemas.dmtf.org/wbem/cim-html/2.31.0/CIM_Battery.html), e.g. Lithium-Ion, Nickel-Cadmium, etc.\n", + "examples": [ + "Li-ion", + "NiMH" + ], + "name": "hw.battery.chemistry", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Design capacity in Watts-hours or Amper-hours\n", + "examples": [ + "9.3Ah", + "50Wh" + ], + "name": "hw.battery.capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for battery metrics\n", + "id": "metric_attributes.hw.battery", + "lineage": { + "attributes": { + "hw.battery.capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.battery.chemistry": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/battery-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Battery [chemistry](https://schemas.dmtf.org/wbem/cim-html/2.31.0/CIM_Battery.html), e.g. Lithium-Ion, Nickel-Cadmium, etc.\n", + "examples": [ + "Li-ion", + "NiMH" + ], + "name": "hw.battery.chemistry", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Design capacity in Watts-hours or Amper-hours\n", + "examples": [ + "9.3Ah", + "50Wh" + ], + "name": "hw.battery.capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Remaining fraction of battery charge.", + "id": "metric.hw.battery.charge", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.battery.capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.battery.chemistry": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/battery-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.battery.charge", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Battery [chemistry](https://schemas.dmtf.org/wbem/cim-html/2.31.0/CIM_Battery.html), e.g. Lithium-Ion, Nickel-Cadmium, etc.\n", + "examples": [ + "Li-ion", + "NiMH" + ], + "name": "hw.battery.chemistry", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Design capacity in Watts-hours or Amper-hours\n", + "examples": [ + "9.3Ah", + "50Wh" + ], + "name": "hw.battery.capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Represents battery charge level thresholds relevant to device operation and health. Each `limit_type` denotes a specific charge limit such as the minimum or maximum optimal charge, the shutdown threshold, or energy-saving thresholds. These values are typically provided by the hardware or firmware to guide safe and efficient battery usage.\n", + "examples": [ + "critical", + "throttled", + "degraded" + ], + "name": "hw.limit_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Critical", + "id": "critical", + "stability": "development", + "value": "critical" + }, + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "High Critical", + "id": "high_critical", + "stability": "development", + "value": "high.critical" + }, + { + "brief": "High Degraded", + "id": "high_degraded", + "stability": "development", + "value": "high.degraded" + }, + { + "brief": "Low Critical", + "id": "low_critical", + "stability": "development", + "value": "low.critical" + }, + { + "brief": "Low Degraded", + "id": "low_degraded", + "stability": "development", + "value": "low.degraded" + }, + { + "brief": "Maximum", + "id": "max", + "stability": "development", + "value": "max" + }, + { + "brief": "Throttled", + "id": "throttled", + "stability": "development", + "value": "throttled" + }, + { + "brief": "Turbo", + "id": "turbo", + "stability": "development", + "value": "turbo" + } + ] + } + } + ], + "brief": "Lower limit of battery charge fraction to ensure proper operation.", + "id": "metric.hw.battery.charge.limit", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.battery.capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.battery.chemistry": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.limit_type": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/battery-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.battery.charge.limit", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Battery [chemistry](https://schemas.dmtf.org/wbem/cim-html/2.31.0/CIM_Battery.html), e.g. Lithium-Ion, Nickel-Cadmium, etc.\n", + "examples": [ + "Li-ion", + "NiMH" + ], + "name": "hw.battery.chemistry", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Design capacity in Watts-hours or Amper-hours\n", + "examples": [ + "9.3Ah", + "50Wh" + ], + "name": "hw.battery.capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The current state of the battery\n", + "name": "hw.battery.state", + "note": "The `hw.state` attribute should indicate the current state of the battery. It should be one of the predefined states such as \"charging\" or \"discharging\".\n", + "requirement_level": { + "conditionally_required": "If the battery is charging or discharging" + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Charging", + "id": "charging", + "stability": "development", + "value": "charging" + }, + { + "brief": "Discharging", + "id": "discharging", + "stability": "development", + "value": "discharging" + } + ] + } + }, + { + "brief": "The current state of the component\n", + "name": "hw.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "Failed", + "id": "failed", + "stability": "development", + "value": "failed" + }, + { + "brief": "Needs Cleaning", + "id": "needs_cleaning", + "stability": "development", + "value": "needs_cleaning" + }, + { + "brief": "OK", + "id": "ok", + "stability": "development", + "value": "ok" + }, + { + "brief": "Predicted Failure", + "id": "predicted_failure", + "stability": "development", + "value": "predicted_failure" + } + ] + } + } + ], + "brief": "Time left before battery is completely charged or discharged.", + "id": "metric.hw.battery.time_left", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.battery.capacity": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.battery.chemistry": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.battery.state": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.state": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/battery-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.battery.time_left", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The time the Pod has been running.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.uptime", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.uptime", + "note": "Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available.\nThe actual accuracy would depend on the instrumentation and operating system.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The reason for the pod state. Corresponds to the `reason` field of the: [K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podstatus-v1-core)\n", + "examples": [ + "Evicted", + "NodeAffinity" + ], + "name": "k8s.pod.status.reason", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The pod is evicted.", + "id": "evicted", + "stability": "development", + "value": "Evicted" + }, + { + "brief": "The pod is in a status because of its node affinity", + "id": "node_affinity", + "stability": "development", + "value": "NodeAffinity" + }, + { + "brief": "The reason on a pod when its state cannot be confirmed as kubelet is unresponsive on the node it is (was) running.\n", + "id": "node_lost", + "stability": "development", + "value": "NodeLost" + }, + { + "brief": "The node is shutdown", + "id": "shutdown", + "stability": "development", + "value": "Shutdown" + }, + { + "brief": "The pod was rejected admission to the node because of an error during admission that could not be categorized.\n", + "id": "unexpected_admission_error", + "stability": "development", + "value": "UnexpectedAdmissionError" + } + ] + } + } + ], + "brief": "Describes the number of K8s Pods that are currently in a state for a given reason.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.status.reason", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.pod.status.reason": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.status.reason", + "note": "All possible pod status reasons will be reported at each time interval to avoid missing metrics.\nOnly the value corresponding to the current reason will be non-zero.\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The phase for the pod. Corresponds to the `phase` field of the: [K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podstatus-v1-core)\n", + "examples": [ + "Pending", + "Running" + ], + "name": "k8s.pod.status.phase", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The pod has been accepted by the system, but one or more of the containers has not been started. This includes time before being bound to a node, as well as time spent pulling images onto the host.\n", + "id": "pending", + "stability": "development", + "value": "Pending" + }, + { + "brief": "The pod has been bound to a node and all of the containers have been started. At least one container is still running or is in the process of being restarted.\n", + "id": "running", + "stability": "development", + "value": "Running" + }, + { + "brief": "All containers in the pod have voluntarily terminated with a container exit code of 0, and the system is not going to restart any of these containers.\n", + "id": "succeeded", + "stability": "development", + "value": "Succeeded" + }, + { + "brief": "All containers in the pod have terminated, and at least one container has terminated in a failure (exited with a non-zero exit code or was stopped by the system).\n", + "id": "failed", + "stability": "development", + "value": "Failed" + }, + { + "brief": "For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n", + "id": "unknown", + "stability": "development", + "value": "Unknown" + } + ] + } + } + ], + "brief": "Describes number of K8s Pods that are currently in a given phase.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.status.phase", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.pod.status.phase": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.status.phase", + "note": "All possible pod phases will be reported at each time interval to avoid missing metrics.\nOnly the value corresponding to the current phase will be non-zero.\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Total CPU time consumed.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.cpu.time", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.cpu.time", + "note": "Total CPU time consumed by the specific Pod on all available CPU cores\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Pod\u0027s CPU usage, measured in cpus. Range from 0 to the number of allocatable CPUs.", + "id": "metric.k8s.pod.cpu.usage", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.cpu.usage", + "note": "CPU usage of the specific Pod on all available CPU cores, averaged over the sample window\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Memory usage of the Pod.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.memory.usage", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.memory.usage", + "note": "Total memory usage of the Pod\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Pod memory available.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.memory.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.memory.available", + "note": "Available memory for use. This is defined as the memory limit - workingSetBytes. If memory limit is undefined, the available bytes is omitted.\nThis metric is derived from the [MemoryStats.AvailableBytes](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [PodStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#PodStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Pod memory RSS.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.memory.rss", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.memory.rss", + "note": "The amount of anonymous and swap cache memory (includes transparent hugepages).\nThis metric is derived from the [MemoryStats.RSSBytes](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [PodStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#PodStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Pod memory working set.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.memory.working_set", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.memory.working_set", + "note": "The amount of working set memory. This includes recently accessed memory, dirty memory, and kernel memory. WorkingSetBytes is \u003c= UsageBytes.\nThis metric is derived from the [MemoryStats.WorkingSetBytes](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [PodStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#PodStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The paging fault type", + "examples": [ + "minor" + ], + "name": "system.paging.fault.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "major", + "stability": "development", + "value": "major" + }, + { + "id": "minor", + "stability": "development", + "value": "minor" + } + ] + } + } + ], + "brief": "Pod memory paging faults.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.memory.paging.faults", + "instrument": "counter", + "lineage": { + "attributes": { + "system.paging.fault.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.paging" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.memory.paging.faults", + "note": "Cumulative number of major/minor page faults.\nThis metric is derived from the [MemoryStats.PageFaults](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) and [MemoryStats.MajorPageFaults](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [PodStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#PodStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "{fault}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Network bytes for the Pod.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.network.io", + "instrument": "counter", + "lineage": { + "attributes": { + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.network.io", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Pod network errors.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.network.errors", + "instrument": "counter", + "lineage": { + "attributes": { + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.network.errors", + "stability": "development", + "type": "metric", + "unit": "{error}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Pod filesystem available bytes.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.filesystem.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.filesystem.available", + "note": "This metric is derived from the\n[FsStats.AvailableBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#FsStats) field\nof the [PodStats.EphemeralStorage](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#PodStats)\nof the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Pod filesystem capacity.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.filesystem.capacity", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.filesystem.capacity", + "note": "This metric is derived from the\n[FsStats.CapacityBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#FsStats) field\nof the [PodStats.EphemeralStorage](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#PodStats)\nof the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Pod filesystem usage.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.filesystem.usage", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.filesystem.usage", + "note": "This may not equal capacity - available.\n\nThis metric is derived from the\n[FsStats.UsedBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#FsStats) field\nof the [PodStats.EphemeralStorage](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#PodStats)\nof the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of the K8s volume.\n", + "examples": [ + "emptyDir", + "persistentVolumeClaim" + ], + "name": "k8s.volume.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A [persistentVolumeClaim](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim) volume", + "id": "persistent_volume_claim", + "stability": "development", + "value": "persistentVolumeClaim" + }, + { + "brief": "A [configMap](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#configmap) volume", + "id": "config_map", + "stability": "development", + "value": "configMap" + }, + { + "brief": "A [downwardAPI](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#downwardapi) volume", + "id": "downward_api", + "stability": "development", + "value": "downwardAPI" + }, + { + "brief": "An [emptyDir](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#emptydir) volume", + "id": "empty_dir", + "stability": "development", + "value": "emptyDir" + }, + { + "brief": "A [secret](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#secret) volume", + "id": "secret", + "stability": "development", + "value": "secret" + }, + { + "brief": "A [local](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#local) volume", + "id": "local", + "stability": "development", + "value": "local" + } + ] + } + }, + { + "brief": "The name of the K8s volume.\n", + "examples": [ + "volume0" + ], + "name": "k8s.volume.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Pod volume storage space available.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.volume.available", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.volume.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.volume.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.volume.available", + "note": "This metric is derived from the\n[VolumeStats.AvailableBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#VolumeStats) field\nof the [PodStats](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#PodStats) of the\nKubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of the K8s volume.\n", + "examples": [ + "emptyDir", + "persistentVolumeClaim" + ], + "name": "k8s.volume.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A [persistentVolumeClaim](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim) volume", + "id": "persistent_volume_claim", + "stability": "development", + "value": "persistentVolumeClaim" + }, + { + "brief": "A [configMap](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#configmap) volume", + "id": "config_map", + "stability": "development", + "value": "configMap" + }, + { + "brief": "A [downwardAPI](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#downwardapi) volume", + "id": "downward_api", + "stability": "development", + "value": "downwardAPI" + }, + { + "brief": "An [emptyDir](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#emptydir) volume", + "id": "empty_dir", + "stability": "development", + "value": "emptyDir" + }, + { + "brief": "A [secret](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#secret) volume", + "id": "secret", + "stability": "development", + "value": "secret" + }, + { + "brief": "A [local](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#local) volume", + "id": "local", + "stability": "development", + "value": "local" + } + ] + } + }, + { + "brief": "The name of the K8s volume.\n", + "examples": [ + "volume0" + ], + "name": "k8s.volume.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Pod volume total capacity.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.volume.capacity", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.volume.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.volume.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.volume.capacity", + "note": "This metric is derived from the\n[VolumeStats.CapacityBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#VolumeStats) field\nof the [PodStats](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#PodStats) of the\nKubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of the K8s volume.\n", + "examples": [ + "emptyDir", + "persistentVolumeClaim" + ], + "name": "k8s.volume.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A [persistentVolumeClaim](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim) volume", + "id": "persistent_volume_claim", + "stability": "development", + "value": "persistentVolumeClaim" + }, + { + "brief": "A [configMap](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#configmap) volume", + "id": "config_map", + "stability": "development", + "value": "configMap" + }, + { + "brief": "A [downwardAPI](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#downwardapi) volume", + "id": "downward_api", + "stability": "development", + "value": "downwardAPI" + }, + { + "brief": "An [emptyDir](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#emptydir) volume", + "id": "empty_dir", + "stability": "development", + "value": "emptyDir" + }, + { + "brief": "A [secret](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#secret) volume", + "id": "secret", + "stability": "development", + "value": "secret" + }, + { + "brief": "A [local](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#local) volume", + "id": "local", + "stability": "development", + "value": "local" + } + ] + } + }, + { + "brief": "The name of the K8s volume.\n", + "examples": [ + "volume0" + ], + "name": "k8s.volume.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Pod volume usage.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.volume.usage", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.volume.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.volume.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.volume.usage", + "note": "This may not equal capacity - available.\n\nThis metric is derived from the\n[VolumeStats.UsedBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#VolumeStats) field\nof the [PodStats](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#PodStats) of the\nKubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of the K8s volume.\n", + "examples": [ + "emptyDir", + "persistentVolumeClaim" + ], + "name": "k8s.volume.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A [persistentVolumeClaim](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim) volume", + "id": "persistent_volume_claim", + "stability": "development", + "value": "persistentVolumeClaim" + }, + { + "brief": "A [configMap](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#configmap) volume", + "id": "config_map", + "stability": "development", + "value": "configMap" + }, + { + "brief": "A [downwardAPI](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#downwardapi) volume", + "id": "downward_api", + "stability": "development", + "value": "downwardAPI" + }, + { + "brief": "An [emptyDir](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#emptydir) volume", + "id": "empty_dir", + "stability": "development", + "value": "emptyDir" + }, + { + "brief": "A [secret](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#secret) volume", + "id": "secret", + "stability": "development", + "value": "secret" + }, + { + "brief": "A [local](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#local) volume", + "id": "local", + "stability": "development", + "value": "local" + } + ] + } + }, + { + "brief": "The name of the K8s volume.\n", + "examples": [ + "volume0" + ], + "name": "k8s.volume.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The total inodes in the filesystem of the Pod\u0027s volume.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.volume.inode.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.volume.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.volume.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.volume.inode.count", + "note": "This metric is derived from the\n[VolumeStats.Inodes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#VolumeStats) field\nof the [PodStats](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#PodStats) of the\nKubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "{inode}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of the K8s volume.\n", + "examples": [ + "emptyDir", + "persistentVolumeClaim" + ], + "name": "k8s.volume.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A [persistentVolumeClaim](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim) volume", + "id": "persistent_volume_claim", + "stability": "development", + "value": "persistentVolumeClaim" + }, + { + "brief": "A [configMap](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#configmap) volume", + "id": "config_map", + "stability": "development", + "value": "configMap" + }, + { + "brief": "A [downwardAPI](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#downwardapi) volume", + "id": "downward_api", + "stability": "development", + "value": "downwardAPI" + }, + { + "brief": "An [emptyDir](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#emptydir) volume", + "id": "empty_dir", + "stability": "development", + "value": "emptyDir" + }, + { + "brief": "A [secret](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#secret) volume", + "id": "secret", + "stability": "development", + "value": "secret" + }, + { + "brief": "A [local](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#local) volume", + "id": "local", + "stability": "development", + "value": "local" + } + ] + } + }, + { + "brief": "The name of the K8s volume.\n", + "examples": [ + "volume0" + ], + "name": "k8s.volume.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The inodes used by the filesystem of the Pod\u0027s volume.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.volume.inode.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.volume.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.volume.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.volume.inode.used", + "note": "This metric is derived from the\n[VolumeStats.InodesUsed](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#VolumeStats) field\nof the [PodStats](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#PodStats) of the\nKubelet\u0027s stats API.\n\nThis may not be equal to `inodes - free` because filesystem may share inodes with other filesystems.\n", + "stability": "development", + "type": "metric", + "unit": "{inode}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of the K8s volume.\n", + "examples": [ + "emptyDir", + "persistentVolumeClaim" + ], + "name": "k8s.volume.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A [persistentVolumeClaim](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#persistentvolumeclaim) volume", + "id": "persistent_volume_claim", + "stability": "development", + "value": "persistentVolumeClaim" + }, + { + "brief": "A [configMap](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#configmap) volume", + "id": "config_map", + "stability": "development", + "value": "configMap" + }, + { + "brief": "A [downwardAPI](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#downwardapi) volume", + "id": "downward_api", + "stability": "development", + "value": "downwardAPI" + }, + { + "brief": "An [emptyDir](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#emptydir) volume", + "id": "empty_dir", + "stability": "development", + "value": "emptyDir" + }, + { + "brief": "A [secret](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#secret) volume", + "id": "secret", + "stability": "development", + "value": "secret" + }, + { + "brief": "A [local](https://v1-30.docs.kubernetes.io/docs/concepts/storage/volumes/#local) volume", + "id": "local", + "stability": "development", + "value": "local" + } + ] + } + }, + { + "brief": "The name of the K8s volume.\n", + "examples": [ + "volume0" + ], + "name": "k8s.volume.name", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The free inodes in the filesystem of the Pod\u0027s volume.", + "entity_associations": [ + "k8s.pod" + ], + "id": "metric.k8s.pod.volume.inode.free", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.volume.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.volume.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.pod.volume.inode.free", + "note": "This metric is derived from the\n[VolumeStats.InodesFree](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#VolumeStats) field\nof the [PodStats](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#PodStats) of the\nKubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "{inode}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The state of the container. [K8s ContainerState](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstate-v1-core)\n", + "examples": [ + "terminated", + "running", + "waiting" + ], + "name": "k8s.container.status.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The container has terminated.", + "id": "terminated", + "stability": "development", + "value": "terminated" + }, + { + "brief": "The container is running.", + "id": "running", + "stability": "development", + "value": "running" + }, + { + "brief": "The container is waiting.", + "id": "waiting", + "stability": "development", + "value": "waiting" + } + ] + } + } + ], + "brief": "Describes the number of K8s containers that are currently in a given state.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.status.state", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.container.status.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.status.state", + "note": "All possible container states will be reported at each time interval to avoid missing metrics.\nOnly the value corresponding to the current state will be non-zero.\n", + "stability": "development", + "type": "metric", + "unit": "{container}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The reason for the container state. Corresponds to the `reason` field of the: [K8s ContainerStateWaiting](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstatewaiting-v1-core) or [K8s ContainerStateTerminated](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstateterminated-v1-core)\n", + "examples": [ + "ContainerCreating", + "CrashLoopBackOff", + "CreateContainerConfigError", + "ErrImagePull", + "ImagePullBackOff", + "OOMKilled", + "Completed", + "Error", + "ContainerCannotRun" + ], + "name": "k8s.container.status.reason", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The container is being created.", + "id": "container_creating", + "stability": "development", + "value": "ContainerCreating" + }, + { + "brief": "The container is in a crash loop back off state.", + "id": "crash_loop_back_off", + "stability": "development", + "value": "CrashLoopBackOff" + }, + { + "brief": "There was an error creating the container configuration.", + "id": "create_container_config_error", + "stability": "development", + "value": "CreateContainerConfigError" + }, + { + "brief": "There was an error pulling the container image.", + "id": "err_image_pull", + "stability": "development", + "value": "ErrImagePull" + }, + { + "brief": "The container image pull is in back off state.", + "id": "image_pull_back_off", + "stability": "development", + "value": "ImagePullBackOff" + }, + { + "brief": "The container was killed due to out of memory.", + "id": "oom_killed", + "stability": "development", + "value": "OOMKilled" + }, + { + "brief": "The container has completed execution.", + "id": "completed", + "stability": "development", + "value": "Completed" + }, + { + "brief": "There was an error with the container.", + "id": "error", + "stability": "development", + "value": "Error" + }, + { + "brief": "The container cannot run.", + "id": "container_cannot_run", + "stability": "development", + "value": "ContainerCannotRun" + } + ] + } + } + ], + "brief": "Describes the number of K8s containers that are currently in a state for a given reason.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.status.reason", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.container.status.reason": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.status.reason", + "note": "All possible container state reasons will be reported at each time interval to avoid missing metrics.\nOnly the value corresponding to the current state reason will be non-zero.\n", + "stability": "development", + "type": "metric", + "unit": "{container}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The time the Node has been running.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.uptime", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.uptime", + "note": "Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available.\nThe actual accuracy would depend on the instrumentation and operating system.\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Amount of cpu allocatable on the node.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.cpu.allocatable", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.cpu.allocatable", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Amount of ephemeral-storage allocatable on the node.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.ephemeral_storage.allocatable", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.ephemeral_storage.allocatable", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Amount of memory allocatable on the node.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.memory.allocatable", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.memory.allocatable", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Amount of pods allocatable on the node.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.pod.allocatable", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.pod.allocatable", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The condition type of a K8s Node.\n", + "examples": [ + "Ready", + "DiskPressure" + ], + "name": "k8s.node.condition.type", + "note": "K8s Node conditions as described\nby [K8s documentation](https://v1-32.docs.kubernetes.io/docs/reference/node/node-status/#condition).\n\nThis attribute aligns with the `type` field of the\n[NodeCondition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#nodecondition-v1-core)\n\nThe set of possible values is not limited to those listed here. Managed Kubernetes environments,\nor custom controllers MAY introduce additional node condition types.\nWhen this occurs, the exact value as reported by the Kubernetes API SHOULD be used.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The node is healthy and ready to accept pods", + "id": "ready", + "stability": "development", + "value": "Ready" + }, + { + "brief": "Pressure exists on the disk size—that is, if the disk capacity is low", + "id": "disk_pressure", + "stability": "development", + "value": "DiskPressure" + }, + { + "brief": "Pressure exists on the node memory—that is, if the node memory is low", + "id": "memory_pressure", + "stability": "development", + "value": "MemoryPressure" + }, + { + "brief": "Pressure exists on the processes—that is, if there are too many processes on the node", + "id": "pid_pressure", + "stability": "development", + "value": "PIDPressure" + }, + { + "brief": "The network for the node is not correctly configured", + "id": "network_unavailable", + "stability": "development", + "value": "NetworkUnavailable" + } + ] + } + }, + { + "brief": "The status of the condition, one of True, False, Unknown.\n", + "examples": [ + "true", + "false", + "unknown" + ], + "name": "k8s.node.condition.status", + "note": "This attribute aligns with the `status` field of the\n[NodeCondition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#nodecondition-v1-core)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "id": "condition_true", + "stability": "development", + "value": "true" + }, + { + "id": "condition_false", + "stability": "development", + "value": "false" + }, + { + "id": "condition_unknown", + "stability": "development", + "value": "unknown" + } + ] + } + } + ], + "brief": "Describes the condition of a particular Node.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.condition.status", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.node.condition.status": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.node.condition.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.condition.status", + "note": "All possible node condition pairs (type and status) will be reported at each time interval to avoid missing metrics. Condition pairs corresponding to the current conditions\u0027 statuses will be non-zero.\n", + "stability": "development", + "type": "metric", + "unit": "{node}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Total CPU time consumed.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.cpu.time", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.cpu.time", + "note": "Total CPU time consumed by the specific Node on all available CPU cores\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Node\u0027s CPU usage, measured in cpus. Range from 0 to the number of allocatable CPUs.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.cpu.usage", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.cpu.usage", + "note": "CPU usage of the specific Node on all available CPU cores, averaged over the sample window\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Node filesystem available bytes.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.filesystem.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.filesystem.available", + "note": "This metric is derived from the\n[FsStats.AvailableBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#FsStats) field\nof the [NodeStats.Fs](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#NodeStats)\nof the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Node filesystem capacity.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.filesystem.capacity", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.filesystem.capacity", + "note": "This metric is derived from the\n[FsStats.CapacityBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#FsStats) field\nof the [NodeStats.Fs](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#NodeStats)\nof the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Node filesystem usage.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.filesystem.usage", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.filesystem.usage", + "note": "This may not equal capacity - available.\n\nThis metric is derived from the\n[FsStats.UsedBytes](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#FsStats) field\nof the [NodeStats.Fs](https://pkg.go.dev/k8s.io/kubelet@v0.33.0/pkg/apis/stats/v1alpha1#NodeStats)\nof the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Memory usage of the Node.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.memory.usage", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.memory.usage", + "note": "Total memory usage of the Node\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Node memory available.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.memory.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.memory.available", + "note": "Available memory for use. This is defined as the memory limit - workingSetBytes. If memory limit is undefined, the available bytes is omitted.\nThis metric is derived from the [MemoryStats.AvailableBytes](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [NodeStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#NodeStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Node memory RSS.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.memory.rss", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.memory.rss", + "note": "The amount of anonymous and swap cache memory (includes transparent hugepages).\nThis metric is derived from the [MemoryStats.RSSBytes](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [NodeStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#NodeStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Node memory working set.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.memory.working_set", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.memory.working_set", + "note": "The amount of working set memory. This includes recently accessed memory, dirty memory, and kernel memory. WorkingSetBytes is \u003c= UsageBytes.\nThis metric is derived from the [MemoryStats.WorkingSetBytes](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) field of the [NodeStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#NodeStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The paging fault type", + "examples": [ + "minor" + ], + "name": "system.paging.fault.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "major", + "stability": "development", + "value": "major" + }, + { + "id": "minor", + "stability": "development", + "value": "minor" + } + ] + } + } + ], + "brief": "Node memory paging faults.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.memory.paging.faults", + "instrument": "counter", + "lineage": { + "attributes": { + "system.paging.fault.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.system.paging" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.memory.paging.faults", + "note": "Cumulative number of major/minor page faults.\nThis metric is derived from the [MemoryStats.PageFaults](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) and [MemoryStats.MajorPageFaults](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#MemoryStats) fields of the [NodeStats.Memory](https://pkg.go.dev/k8s.io/kubelet@v0.34.0/pkg/apis/stats/v1alpha1#NodeStats) of the Kubelet\u0027s stats API.\n", + "stability": "development", + "type": "metric", + "unit": "{fault}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Network bytes for the Node.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.network.io", + "instrument": "counter", + "lineage": { + "attributes": { + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.network.io", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The network IO operation direction.", + "examples": [ + "transmit" + ], + "name": "network.io.direction", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + }, + { + "brief": "The network interface name.", + "examples": [ + "lo", + "eth0" + ], + "name": "network.interface.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Node network errors.", + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.network.errors", + "instrument": "counter", + "lineage": { + "attributes": { + "network.interface.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.io.direction": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.network.errors", + "stability": "development", + "type": "metric", + "unit": "{error}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of desired replica pods in this deployment.", + "entity_associations": [ + "k8s.deployment" + ], + "id": "metric.k8s.deployment.pod.desired", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.deployment.pod.desired", + "note": "This metric aligns with the `replicas` field of the\n[K8s DeploymentSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentspec-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Total number of available replica pods (ready for at least minReadySeconds) targeted by this deployment.", + "entity_associations": [ + "k8s.deployment" + ], + "id": "metric.k8s.deployment.pod.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.deployment.pod.available", + "note": "This metric aligns with the `availableReplicas` field of the\n[K8s DeploymentStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of desired replica pods in this replicaset.", + "entity_associations": [ + "k8s.replicaset" + ], + "id": "metric.k8s.replicaset.pod.desired", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replicaset.pod.desired", + "note": "This metric aligns with the `replicas` field of the\n[K8s ReplicaSetSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#replicasetspec-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Total number of available replica pods (ready for at least minReadySeconds) targeted by this replicaset.", + "entity_associations": [ + "k8s.replicaset" + ], + "id": "metric.k8s.replicaset.pod.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replicaset.pod.available", + "note": "This metric aligns with the `availableReplicas` field of the\n[K8s ReplicaSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#replicasetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of desired replica pods in this replication controller.", + "entity_associations": [ + "k8s.replicationcontroller" + ], + "id": "metric.k8s.replicationcontroller.pod.desired", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replicationcontroller.pod.desired", + "note": "This metric aligns with the `replicas` field of the\n[K8s ReplicationControllerSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#replicationcontrollerspec-v1-core)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Total number of available replica pods (ready for at least minReadySeconds) targeted by this replication controller.", + "entity_associations": [ + "k8s.replicationcontroller" + ], + "id": "metric.k8s.replicationcontroller.pod.available", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replicationcontroller.pod.available", + "note": "This metric aligns with the `availableReplicas` field of the\n[K8s ReplicationControllerStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#replicationcontrollerstatus-v1-core)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of desired replica pods in this statefulset.", + "entity_associations": [ + "k8s.statefulset" + ], + "id": "metric.k8s.statefulset.pod.desired", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.statefulset.pod.desired", + "note": "This metric aligns with the `replicas` field of the\n[K8s StatefulSetSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetspec-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of replica pods created for this statefulset with a Ready Condition.", + "entity_associations": [ + "k8s.statefulset" + ], + "id": "metric.k8s.statefulset.pod.ready", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.statefulset.pod.ready", + "note": "This metric aligns with the `readyReplicas` field of the\n[K8s StatefulSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of replica pods created by the statefulset controller from the statefulset version indicated by currentRevision.", + "entity_associations": [ + "k8s.statefulset" + ], + "id": "metric.k8s.statefulset.pod.current", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.statefulset.pod.current", + "note": "This metric aligns with the `currentReplicas` field of the\n[K8s StatefulSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of replica pods created by the statefulset controller from the statefulset version indicated by updateRevision.", + "entity_associations": [ + "k8s.statefulset" + ], + "id": "metric.k8s.statefulset.pod.updated", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.statefulset.pod.updated", + "note": "This metric aligns with the `updatedReplicas` field of the\n[K8s StatefulSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Desired number of replica pods managed by this horizontal pod autoscaler, as last calculated by the autoscaler.", + "entity_associations": [ + "k8s.hpa" + ], + "id": "metric.k8s.hpa.pod.desired", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.pod.desired", + "note": "This metric aligns with the `desiredReplicas` field of the\n[K8s HorizontalPodAutoscalerStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerstatus-v2-autoscaling)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Current number of replica pods managed by this horizontal pod autoscaler, as last seen by the autoscaler.", + "entity_associations": [ + "k8s.hpa" + ], + "id": "metric.k8s.hpa.pod.current", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.pod.current", + "note": "This metric aligns with the `currentReplicas` field of the\n[K8s HorizontalPodAutoscalerStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerstatus-v2-autoscaling)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The upper limit for the number of replica pods to which the autoscaler can scale up.", + "entity_associations": [ + "k8s.hpa" + ], + "id": "metric.k8s.hpa.pod.max", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.pod.max", + "note": "This metric aligns with the `maxReplicas` field of the\n[K8s HorizontalPodAutoscalerSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerspec-v2-autoscaling)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The lower limit for the number of replica pods to which the autoscaler can scale down.", + "entity_associations": [ + "k8s.hpa" + ], + "id": "metric.k8s.hpa.pod.min", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.pod.min", + "note": "This metric aligns with the `minReplicas` field of the\n[K8s HorizontalPodAutoscalerSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerspec-v2-autoscaling)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "attributes": [ + { + "brief": "The type of metric source for the horizontal pod autoscaler.\n", + "examples": [ + "Resource", + "ContainerResource" + ], + "name": "k8s.hpa.metric.type", + "note": "This attribute reflects the `type` field of spec.metrics[] in the HPA.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Container from Pod specification, must be unique within a Pod. Container runtime usually uses different globally unique name (`container.name`).\n", + "examples": [ + "redis" + ], + "name": "k8s.container.name", + "requirement_level": { + "conditionally_required": "if and only if k8s.hpa.metric.type is ContainerResource" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Target value for CPU resource in HPA config.", + "entity_associations": [ + "k8s.hpa", + "k8s.namespace" + ], + "id": "metric.k8s.hpa.metric.target.cpu.value", + "instrument": "gauge", + "lineage": { + "attributes": { + "k8s.container.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.hpa.metric.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.metric.target.cpu.value", + "note": "This metric aligns with the `value` field of the\n[K8s HPA MetricTarget](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#metrictarget-v2-autoscaling).\nIf the type of the metric is [`ContainerResource`](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-metrics-apis),\nthe `k8s.container.name` attribute MUST be set to identify the specific container within the pod to which the metric applies.\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "attributes": [ + { + "brief": "The type of metric source for the horizontal pod autoscaler.\n", + "examples": [ + "Resource", + "ContainerResource" + ], + "name": "k8s.hpa.metric.type", + "note": "This attribute reflects the `type` field of spec.metrics[] in the HPA.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Container from Pod specification, must be unique within a Pod. Container runtime usually uses different globally unique name (`container.name`).\n", + "examples": [ + "redis" + ], + "name": "k8s.container.name", + "requirement_level": { + "conditionally_required": "if and only if k8s.hpa.metric.type is ContainerResource" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Target average value for CPU resource in HPA config.", + "entity_associations": [ + "k8s.hpa", + "k8s.namespace" + ], + "id": "metric.k8s.hpa.metric.target.cpu.average_value", + "instrument": "gauge", + "lineage": { + "attributes": { + "k8s.container.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.hpa.metric.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.metric.target.cpu.average_value", + "note": "This metric aligns with the `averageValue` field of the\n[K8s HPA MetricTarget](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#metrictarget-v2-autoscaling).\nIf the type of the metric is [`ContainerResource`](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-metrics-apis),\nthe `k8s.container.name` attribute MUST be set to identify the specific container within the pod to which the metric applies.\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "attributes": [ + { + "brief": "The type of metric source for the horizontal pod autoscaler.\n", + "examples": [ + "Resource", + "ContainerResource" + ], + "name": "k8s.hpa.metric.type", + "note": "This attribute reflects the `type` field of spec.metrics[] in the HPA.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The name of the Container from Pod specification, must be unique within a Pod. Container runtime usually uses different globally unique name (`container.name`).\n", + "examples": [ + "redis" + ], + "name": "k8s.container.name", + "requirement_level": { + "conditionally_required": "if and only if k8s.hpa.metric.type is ContainerResource." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Target average utilization, in percentage, for CPU resource in HPA config.", + "entity_associations": [ + "k8s.hpa", + "k8s.namespace" + ], + "id": "metric.k8s.hpa.metric.target.cpu.average_utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "k8s.container.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + }, + "k8s.hpa.metric.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.metric.target.cpu.average_utilization", + "note": "This metric aligns with the `averageUtilization` field of the\n[K8s HPA MetricTarget](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#metrictarget-v2-autoscaling).\nIf the type of the metric is [`ContainerResource`](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/#support-for-metrics-apis),\nthe `k8s.container.name` attribute MUST be set to identify the specific container within the pod to which the metric applies.\n", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod.", + "entity_associations": [ + "k8s.daemonset" + ], + "id": "metric.k8s.daemonset.node.current_scheduled", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.daemonset.node.current_scheduled", + "note": "This metric aligns with the `currentNumberScheduled` field of the\n[K8s DaemonSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#daemonsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{node}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of nodes that should be running the daemon pod (including nodes currently running the daemon pod).", + "entity_associations": [ + "k8s.daemonset" + ], + "id": "metric.k8s.daemonset.node.desired_scheduled", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.daemonset.node.desired_scheduled", + "note": "This metric aligns with the `desiredNumberScheduled` field of the\n[K8s DaemonSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#daemonsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{node}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of nodes that are running the daemon pod, but are not supposed to run the daemon pod.", + "entity_associations": [ + "k8s.daemonset" + ], + "id": "metric.k8s.daemonset.node.misscheduled", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.daemonset.node.misscheduled", + "note": "This metric aligns with the `numberMisscheduled` field of the\n[K8s DaemonSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#daemonsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{node}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", + "entity_associations": [ + "k8s.daemonset" + ], + "id": "metric.k8s.daemonset.node.ready", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.daemonset.node.ready", + "note": "This metric aligns with the `numberReady` field of the\n[K8s DaemonSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#daemonsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{node}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of pending and actively running pods for a job.", + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.pod.active", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.pod.active", + "note": "This metric aligns with the `active` field of the\n[K8s JobStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobstatus-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of pods which reached phase Failed for a job.", + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.pod.failed", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.pod.failed", + "note": "This metric aligns with the `failed` field of the\n[K8s JobStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobstatus-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of pods which reached phase Succeeded for a job.", + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.pod.successful", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.pod.successful", + "note": "This metric aligns with the `succeeded` field of the\n[K8s JobStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobstatus-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The desired number of successfully finished pods the job should be run with.", + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.pod.desired_successful", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.pod.desired_successful", + "note": "This metric aligns with the `completions` field of the\n[K8s JobSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobspec-v1-batch)..\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The max desired number of pods the job should run at any given time.", + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.pod.max_parallel", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.pod.max_parallel", + "note": "This metric aligns with the `parallelism` field of the\n[K8s JobSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobspec-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of actively running jobs for a cronjob.", + "entity_associations": [ + "k8s.cronjob" + ], + "id": "metric.k8s.cronjob.job.active", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.cronjob.job.active", + "note": "This metric aligns with the `active` field of the\n[K8s CronJobStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#cronjobstatus-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{job}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The phase of the K8s namespace.\n", + "examples": [ + "active", + "terminating" + ], + "name": "k8s.namespace.phase", + "note": "This attribute aligns with the `phase` field of the\n[K8s NamespaceStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#namespacestatus-v1-core)\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Active namespace phase as described by [K8s API](https://pkg.go.dev/k8s.io/api@v0.31.3/core/v1#NamespacePhase)", + "id": "active", + "stability": "development", + "value": "active" + }, + { + "brief": "Terminating namespace phase as described by [K8s API](https://pkg.go.dev/k8s.io/api@v0.31.3/core/v1#NamespacePhase)", + "id": "terminating", + "stability": "development", + "value": "terminating" + } + ] + } + } + ], + "brief": "Describes number of K8s namespaces that are currently in a given phase.", + "entity_associations": [ + "k8s.namespace" + ], + "id": "metric.k8s.namespace.phase", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.namespace.phase": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.namespace.phase", + "stability": "development", + "type": "metric", + "unit": "{namespace}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Maximum CPU resource limit set for the container.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.cpu.limit", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.cpu.limit", + "note": "See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "CPU resource requested for the container.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.cpu.request", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.cpu.request", + "note": "See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Maximum memory resource limit set for the container.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.memory.limit", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.memory.limit", + "note": "See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Memory resource requested for the container.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.memory.request", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.memory.request", + "note": "See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Maximum storage resource limit set for the container.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.storage.limit", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.storage.limit", + "note": "See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Storage resource requested for the container.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.storage.request", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.storage.request", + "note": "See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Maximum ephemeral storage resource limit set for the container.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.ephemeral_storage.limit", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.ephemeral_storage.limit", + "note": "See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Ephemeral storage resource requested for the container.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.ephemeral_storage.request", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.ephemeral_storage.request", + "note": "See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#resourcerequirements-v1-core for details.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Describes how many times the container has restarted (since the last counter reset).", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.restart.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.restart.count", + "note": "This value is pulled directly from the K8s API and the value can go indefinitely high and be reset to 0\nat any time depending on how your kubelet is configured to prune dead containers.\nIt is best to not depend too much on the exact value but rather look at it as\neither == 0, in which case you can conclude there were no restarts in the recent past, or \u003e 0, in which case\nyou can conclude there were restarts in the recent past, and not try and analyze the value beyond that.\n", + "stability": "development", + "type": "metric", + "unit": "{restart}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Indicates whether the container is currently marked as ready to accept traffic, based on its readiness probe (1 = ready, 0 = not ready).\n", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.ready", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.ready", + "note": "This metric SHOULD reflect the value of the `ready` field in the\n[K8s ContainerStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#containerstatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "{container}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The ratio of container CPU usage to its CPU limit.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.cpu.limit_utilization", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.cpu.limit_utilization", + "note": "The value range is [0.0,1.0]. A value of 1.0 means the container is using 100% of its CPU limit. If the CPU limit is not set, this metric SHOULD NOT be emitted for that container.\n", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The ratio of container CPU usage to its CPU request.", + "entity_associations": [ + "k8s.container" + ], + "id": "metric.k8s.container.cpu.request_utilization", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.container.cpu.request_utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The CPU limits in a specific namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.cpu.limit.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.cpu.limit.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The CPU limits in a specific namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.cpu.limit.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.cpu.limit.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The CPU requests in a specific namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.cpu.request.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.cpu.request.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The CPU requests in a specific namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.cpu.request.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.cpu.request.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The memory limits in a specific namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.memory.limit.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.memory.limit.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The memory limits in a specific namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.memory.limit.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.memory.limit.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The memory requests in a specific namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.memory.request.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.memory.request.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The memory requests in a specific namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.memory.request.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.memory.request.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The size (identifier) of the K8s huge page.\n", + "examples": [ + "2Mi" + ], + "name": "k8s.hugepage.size", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The huge page requests in a specific namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.hugepage_count.request.hard", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.hugepage.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.hugepage_count.request.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "{hugepage}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The size (identifier) of the K8s huge page.\n", + "examples": [ + "2Mi" + ], + "name": "k8s.hugepage.size", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The huge page requests in a specific namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.hugepage_count.request.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.hugepage.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.hugepage_count.request.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "{hugepage}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object.\n", + "examples": [ + "gold.storageclass.storage.k8s.io" + ], + "name": "k8s.storageclass.name", + "requirement_level": { + "conditionally_required": "The `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "The storage requests in a specific namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.storage.request.hard", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.storageclass.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.storage.request.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n\nThe `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object.\n", + "examples": [ + "gold.storageclass.storage.k8s.io" + ], + "name": "k8s.storageclass.name", + "requirement_level": { + "conditionally_required": "The `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "The storage requests in a specific namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.storage.request.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.storageclass.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.storage.request.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n\nThe `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object.\n", + "examples": [ + "gold.storageclass.storage.k8s.io" + ], + "name": "k8s.storageclass.name", + "requirement_level": { + "conditionally_required": "The `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "The total number of PersistentVolumeClaims that can exist in the namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "id": "metric.k8s.resourcequota.persistentvolumeclaim_count.hard", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.storageclass.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.persistentvolumeclaim_count.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n\nThe `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n", + "stability": "development", + "type": "metric", + "unit": "{persistentvolumeclaim}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object.\n", + "examples": [ + "gold.storageclass.storage.k8s.io" + ], + "name": "k8s.storageclass.name", + "requirement_level": { + "conditionally_required": "The `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "The total number of PersistentVolumeClaims that can exist in the namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "id": "metric.k8s.resourcequota.persistentvolumeclaim_count.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.storageclass.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.persistentvolumeclaim_count.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n\nThe `k8s.storageclass.name` should be required when a resource quota is defined for a specific\nstorage class.\n", + "stability": "development", + "type": "metric", + "unit": "{persistentvolumeclaim}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The sum of local ephemeral storage requests in the namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.ephemeral_storage.request.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.ephemeral_storage.request.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The sum of local ephemeral storage requests in the namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.ephemeral_storage.request.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.ephemeral_storage.request.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The sum of local ephemeral storage limits in the namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.ephemeral_storage.limit.hard", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.ephemeral_storage.limit.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The sum of local ephemeral storage limits in the namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.ephemeral_storage.limit.used", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.ephemeral_storage.limit.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the K8s resource a resource quota defines.\n", + "examples": [ + "count/replicationcontrollers" + ], + "name": "k8s.resourcequota.resource_name", + "note": "The value for this attribute can be either the full `count/\u003cresource\u003e[.\u003cgroup\u003e]` string (e.g., count/deployments.apps, count/pods), or, for certain core Kubernetes resources, just the resource name (e.g., pods, services, configmaps). Both forms are supported by Kubernetes for object count quotas. See [Kubernetes Resource Quotas documentation](https://kubernetes.io/docs/concepts/policy/resource-quotas/#quota-on-object-count) for more details.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The object count limits in a specific namespace.\nThe value represents the configured quota limit of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.object_count.hard", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.resourcequota.resource_name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.object_count.hard", + "note": "This metric is retrieved from the `hard` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "{object}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the K8s resource a resource quota defines.\n", + "examples": [ + "count/replicationcontrollers" + ], + "name": "k8s.resourcequota.resource_name", + "note": "The value for this attribute can be either the full `count/\u003cresource\u003e[.\u003cgroup\u003e]` string (e.g., count/deployments.apps, count/pods), or, for certain core Kubernetes resources, just the resource name (e.g., pods, services, configmaps). Both forms are supported by Kubernetes for object count quotas. See [Kubernetes Resource Quotas documentation](https://kubernetes.io/docs/concepts/policy/resource-quotas/#quota-on-object-count) for more details.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The object count limits in a specific namespace.\nThe value represents the current observed total usage of the resource in the namespace.\n", + "entity_associations": [ + "k8s.resourcequota" + ], + "id": "metric.k8s.resourcequota.object_count.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "k8s.resourcequota.resource_name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.k8s" + } + }, + "provenance": { + "path": "/home/weaver/source/k8s/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.resourcequota.object_count.used", + "note": "This metric is retrieved from the `used` field of the\n[K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcequotastatus-v1-core).\n", + "stability": "development", + "type": "metric", + "unit": "{object}" + }, + { + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + } + ], + "brief": "These attributes may be used to describe the server in a connection-based network interaction where there is one side that initiates the connection (the client is the side that initiates the connection). This covers all TCP network interactions since TCP is connection-based and one side initiates the connection (an exception is made for peer-to-peer communication over TCP where the \"user-facing\" surface of the protocol / API doesn\u0027t expose a clear notion of client and server). This also covers UDP network interactions where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS.\n", + "display_name": "Server Attributes", + "id": "registry.server", + "lineage": { + "provenance": { + "path": "/home/weaver/source/server/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Current \"managed\" thread ID (as opposed to OS thread ID).\n", + "examples": 42, + "name": "thread.id", + "note": "\nExamples of where the value can be extracted from:\n\n| Language or platform | Source |\n| --- | --- |\n| JVM | `Thread.currentThread().threadId()` |\n| .NET | `Thread.CurrentThread.ManagedThreadId` |\n| Python | `threading.current_thread().ident` |\n| Ruby | `Thread.current.object_id` |\n| C++ | `std::this_thread::get_id()` |\n| Erlang | `erlang:self()` |\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Current thread name.\n", + "examples": "main", + "name": "thread.name", + "note": "\nExamples of where the value can be extracted from:\n\n| Language or platform | Source |\n| --- | --- |\n| JVM | `Thread.currentThread().getName()` |\n| .NET | `Thread.CurrentThread.Name` |\n| Python | `threading.current_thread().name` |\n| Ruby | `Thread.current.name` |\n| Erlang | `erlang:process_info(self(), registered_name)` |\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "These attributes may be used for any operation to store information about a thread that started a span.\n", + "id": "thread", + "lineage": { + "attributes": { + "thread.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.thread" + }, + "thread.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.thread" + } + }, + "provenance": { + "path": "/home/weaver/source/thread/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + } + ], + "brief": "These attributes may be used to describe the client in a connection-based network interaction where there is one side that initiates the connection (the client is the side that initiates the connection). This covers all TCP network interactions since TCP is connection-based and one side initiates the connection (an exception is made for peer-to-peer communication over TCP where the \"user-facing\" surface of the protocol / API doesn\u0027t expose a clear notion of client and server). This also covers UDP network interactions where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS.\n", + "display_name": "Client Attributes", + "id": "registry.client", + "lineage": { + "provenance": { + "path": "/home/weaver/source/client/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the Cloud Run [execution](https://cloud.google.com/run/docs/managing/job-executions) being run for the Job, as set by the [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) environment variable.\n", + "examples": [ + "job-name-xxxx", + "sample-job-mdw84" + ], + "name": "gcp.cloud_run.job.execution", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The index for a task within an execution as provided by the [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) environment variable.\n", + "examples": [ + 0, + 1 + ], + "name": "gcp.cloud_run.job.task_index", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "Resource used by Google Cloud Run.\n", + "id": "entity.gcp.cloud_run", + "lineage": { + "attributes": { + "gcp.cloud_run.job.execution": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.cloud_run" + }, + "gcp.cloud_run.job.task_index": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gcp.cloud_run" + } + }, + "provenance": { + "path": "/home/weaver/source/gcp/cloud-run-entities.yaml", + "registry_id": "main" + } + }, + "name": "gcp.cloud_run", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "BIOS version of the hardware component\n", + "examples": [ + "1.2.3" + ], + "name": "hw.bios_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Driver version for the hardware component\n", + "examples": [ + "10.2.1-3" + ], + "name": "hw.driver_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for disk controller metrics\n", + "id": "metric_attributes.hw.disk_controller", + "lineage": { + "attributes": { + "hw.bios_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.driver_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/disk-controller-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Specifies the category of synthetic traffic, such as tests or bots.\n", + "name": "user_agent.synthetic.type", + "note": "This attribute MAY be derived from the contents of the `user_agent.original` attribute. Components that populate the attribute are responsible for determining what they consider to be synthetic bot or test traffic. This attribute can either be set for self-identification purposes, or on telemetry detected to be generated as a result of a synthetic request. This attribute is useful for distinguishing between genuine client traffic and synthetic traffic generated by bots or tests.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "Bot source.", + "id": "bot", + "stability": "development", + "value": "bot" + }, + { + "brief": "Synthetic test source.", + "id": "test", + "stability": "development", + "value": "test" + } + ] + } + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "HTTP server attributes", + "id": "metric_attributes.http.server", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.url" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n", + "examples": [ + "/users/{id}", + "/users/:id", + "/users?id={id}" + ], + "name": "url.template", + "note": "The `url.template` MUST have low cardinality. It is not usually available on HTTP clients, but may be known by the application or specialized HTTP instrumentation.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "HTTP client attributes", + "id": "metric_attributes.http.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n", + "examples": [ + "/users/{id}", + "/users/:id", + "/users?id={id}" + ], + "name": "url.template", + "note": "The `url.template` MUST have low cardinality. It is not usually available on HTTP clients, but may be known by the application or specialized HTTP instrumentation.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "HTTP client experimental attributes", + "id": "metric_attributes.http.client.experimental", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Specifies the category of synthetic traffic, such as tests or bots.\n", + "name": "user_agent.synthetic.type", + "note": "This attribute MAY be derived from the contents of the `user_agent.original` attribute. Components that populate the attribute are responsible for determining what they consider to be synthetic bot or test traffic. This attribute can either be set for self-identification purposes, or on telemetry detected to be generated as a result of a synthetic request. This attribute is useful for distinguishing between genuine client traffic and synthetic traffic generated by bots or tests.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "Bot source.", + "id": "bot", + "stability": "development", + "value": "bot" + }, + { + "brief": "Synthetic test source.", + "id": "test", + "stability": "development", + "value": "test" + } + ] + } + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "Duration of HTTP server requests.", + "id": "metric.http.server.request.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.url" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.server.request.duration", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "Number of active HTTP server requests.", + "id": "metric.http.server.active_requests", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.server.active_requests", + "stability": "development", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Specifies the category of synthetic traffic, such as tests or bots.\n", + "name": "user_agent.synthetic.type", + "note": "This attribute MAY be derived from the contents of the `user_agent.original` attribute. Components that populate the attribute are responsible for determining what they consider to be synthetic bot or test traffic. This attribute can either be set for self-identification purposes, or on telemetry detected to be generated as a result of a synthetic request. This attribute is useful for distinguishing between genuine client traffic and synthetic traffic generated by bots or tests.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "Bot source.", + "id": "bot", + "stability": "development", + "value": "bot" + }, + { + "brief": "Synthetic test source.", + "id": "test", + "stability": "development", + "value": "test" + } + ] + } + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "Size of HTTP server request bodies.", + "id": "metric.http.server.request.body.size", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.url" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.server.request.body.size", + "note": "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", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Specifies the category of synthetic traffic, such as tests or bots.\n", + "name": "user_agent.synthetic.type", + "note": "This attribute MAY be derived from the contents of the `user_agent.original` attribute. Components that populate the attribute are responsible for determining what they consider to be synthetic bot or test traffic. This attribute can either be set for self-identification purposes, or on telemetry detected to be generated as a result of a synthetic request. This attribute is useful for distinguishing between genuine client traffic and synthetic traffic generated by bots or tests.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": { + "members": [ + { + "brief": "Bot source.", + "id": "bot", + "stability": "development", + "value": "bot" + }, + { + "brief": "Synthetic test source.", + "id": "test", + "stability": "development", + "value": "test" + } + ] + } + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "Size of HTTP server response bodies.", + "id": "metric.http.server.response.body.size", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.url" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.server.response.body.size", + "note": "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", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n", + "examples": [ + "/users/{id}", + "/users/:id", + "/users?id={id}" + ], + "name": "url.template", + "note": "The `url.template` MUST have low cardinality. It is not usually available on HTTP clients, but may be known by the application or specialized HTTP instrumentation.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Duration of HTTP client requests.", + "id": "metric.http.client.request.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.client.request.duration", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n", + "examples": [ + "/users/{id}", + "/users/:id", + "/users?id={id}" + ], + "name": "url.template", + "note": "The `url.template` MUST have low cardinality. It is not usually available on HTTP clients, but may be known by the application or specialized HTTP instrumentation.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Size of HTTP client request bodies.", + "id": "metric.http.client.request.body.size", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.client.request.body.size", + "note": "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", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n", + "examples": [ + "/users/{id}", + "/users/:id", + "/users?id={id}" + ], + "name": "url.template", + "note": "The `url.template` MUST have low cardinality. It is not usually available on HTTP clients, but may be known by the application or specialized HTTP instrumentation.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Size of HTTP client response bodies.", + "id": "metric.http.client.response.body.size", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.client.response.body.size", + "note": "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", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "State of the HTTP connection in the HTTP connection pool.", + "examples": [ + "active", + "idle" + ], + "name": "http.connection.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "active state.", + "id": "active", + "stability": "development", + "value": "active" + }, + { + "brief": "idle state.", + "id": "idle", + "stability": "development", + "value": "idle" + } + ] + } + } + ], + "brief": "Number of outbound HTTP connections that are currently active or idle on the client.", + "id": "metric.http.client.open_connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "http.connection.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.client.open_connections", + "stability": "development", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + } + ], + "brief": "The duration of the successfully established outbound HTTP connections.", + "id": "metric.http.client.connection.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.client.connection.duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n", + "examples": [ + "/users/{id}", + "/users/:id", + "/users?id={id}" + ], + "name": "url.template", + "note": "The `url.template` MUST have low cardinality. It is not usually available on HTTP clients, but may be known by the application or specialized HTTP instrumentation.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Number of active HTTP requests.", + "id": "metric.http.client.active_requests", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.client.active_requests", + "stability": "development", + "type": "metric", + "unit": "{request}" + }, + { + "attributes": [ + { + "brief": "The digest of the OCI image manifest. For container images specifically is the digest by which the container image is known.\n", + "examples": [ + "sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4" + ], + "name": "oci.manifest.digest", + "note": "Follows [OCI Image Manifest Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md), and specifically the [Digest property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).\nAn example can be found in [Example Image Manifest](https://github.com/opencontainers/image-spec/blob/main/manifest.md#example-image-manifest).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "An OCI image manifest.\n", + "display_name": "Open Container Initiative (OCI) Attributes", + "id": "registry.oci.manifest", + "lineage": { + "provenance": { + "path": "/home/weaver/source/oci/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `otel.sdk.span.live` instead.", + "deprecated": { + "note": "Replaced by `otel.sdk.span.live`.", + "reason": "renamed", + "renamed_to": "otel.sdk.span.live" + }, + "id": "metric.otel.sdk.span.live.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.span.live.count", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Use `otel.sdk.span.started` minus `otel.sdk.span.live` to derive this value.", + "deprecated": { + "note": "Obsoleted.", + "reason": "obsoleted" + }, + "id": "metric.otel.sdk.span.ended.count", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.span.ended.count", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `otel.sdk.processor.span.processed` instead.", + "deprecated": { + "note": "Replaced by `otel.sdk.processor.span.processed`.", + "reason": "renamed", + "renamed_to": "otel.sdk.processor.span.processed" + }, + "id": "metric.otel.sdk.processor.span.processed.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.processor.span.processed.count", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `otel.sdk.exporter.span.inflight` instead.", + "deprecated": { + "note": "Replaced by `otel.sdk.exporter.span.inflight`.", + "reason": "renamed", + "renamed_to": "otel.sdk.exporter.span.inflight" + }, + "id": "metric.otel.sdk.exporter.span.inflight.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.exporter.span.inflight.count", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `otel.sdk.exporter.span.exported` instead.", + "deprecated": { + "note": "Replaced by `otel.sdk.exporter.span.exported`.", + "reason": "renamed", + "renamed_to": "otel.sdk.exporter.span.exported" + }, + "id": "metric.otel.sdk.exporter.span.exported.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.exporter.span.exported.count", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "brief": "Use `otel.sdk.span.started` minus `otel.sdk.span.live` to derive this value.", + "deprecated": { + "note": "Obsoleted.", + "reason": "obsoleted" + }, + "id": "metric.otel.sdk.span.ended", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "otel.sdk.span.ended", + "stability": "development", + "type": "metric", + "unit": "{span}" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "note": "This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This span represents an outgoing Remote Procedure Call (RPC).", + "events": [ + "rpc.message" + ], + "id": "span.rpc.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/spans.yaml", + "registry_id": "main" + } + }, + "note": "**Span name:** refer to the [Span Name](/docs/rpc/rpc-spans.md#span-name) section.\n\n**Span kind** MUST be `CLIENT`.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "note": "This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This span represents an incoming Remote Procedure Call (RPC).", + "events": [ + "rpc.message" + ], + "id": "span.rpc.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/spans.yaml", + "registry_id": "main" + } + }, + "note": "**Span name:** refer to the [Span Name](/docs/rpc/rpc-spans.md#span-name) section.\n\n**Span kind** MUST be `SERVER`.\n", + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "note": "This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [error codes](https://connectrpc.com//docs/protocol/#error-codes) of the Connect request. Error codes are always string values.", + "name": "rpc.connect_rpc.error_code", + "requirement_level": { + "conditionally_required": "if available." + }, + "stability": "development", + "type": { + "members": [ + { + "id": "cancelled", + "stability": "development", + "value": "cancelled" + }, + { + "id": "unknown", + "stability": "development", + "value": "unknown" + }, + { + "id": "invalid_argument", + "stability": "development", + "value": "invalid_argument" + }, + { + "id": "deadline_exceeded", + "stability": "development", + "value": "deadline_exceeded" + }, + { + "id": "not_found", + "stability": "development", + "value": "not_found" + }, + { + "id": "already_exists", + "stability": "development", + "value": "already_exists" + }, + { + "id": "permission_denied", + "stability": "development", + "value": "permission_denied" + }, + { + "id": "resource_exhausted", + "stability": "development", + "value": "resource_exhausted" + }, + { + "id": "failed_precondition", + "stability": "development", + "value": "failed_precondition" + }, + { + "id": "aborted", + "stability": "development", + "value": "aborted" + }, + { + "id": "out_of_range", + "stability": "development", + "value": "out_of_range" + }, + { + "id": "unimplemented", + "stability": "development", + "value": "unimplemented" + }, + { + "id": "internal", + "stability": "development", + "value": "internal" + }, + { + "id": "unavailable", + "stability": "development", + "value": "unavailable" + }, + { + "id": "data_loss", + "stability": "development", + "value": "data_loss" + }, + { + "id": "unauthenticated", + "stability": "development", + "value": "unauthenticated" + } + ] + } + }, + { + "brief": "Connect request metadata, `\u003ckey\u003e` being the normalized Connect Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "1.2.3.4", + "1.2.3.5" + ] + ], + "name": "rpc.connect_rpc.request.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all request metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `[\"1.2.3.4\", \"1.2.3.5\"]` SHOULD be recorded as\nthe `rpc.connect_rpc.request.metadata.my-custom-key` attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]`\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "Connect response metadata, `\u003ckey\u003e` being the normalized Connect Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "attribute_value" + ] + ], + "name": "rpc.connect_rpc.response.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all response metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `\"attribute_value\"` SHOULD be recorded as\nthe `rpc.connect_rpc.response.metadata.my-custom-key` attribute with value `[\"attribute_value\"]`\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string[]]" + } + ], + "brief": "This span represents an outgoing Remote Procedure Call (RPC).", + "id": "span.rpc.connect_rpc.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.connect_rpc.error_code": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.connect_rpc.request.metadata": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.connect_rpc.response.metadata": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/spans.yaml", + "registry_id": "main" + } + }, + "note": "`rpc.system` MUST be set to `\"connect_rpc\"` and SHOULD be provided **at span creation time.**\n\n**Span name:** refer to the [Span Name](/docs/rpc/rpc-spans.md#span-name) section.\n\n**Span kind** MUST be `CLIENT`.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "note": "This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [error codes](https://connectrpc.com//docs/protocol/#error-codes) of the Connect request. Error codes are always string values.", + "name": "rpc.connect_rpc.error_code", + "requirement_level": { + "conditionally_required": "if available." + }, + "stability": "development", + "type": { + "members": [ + { + "id": "cancelled", + "stability": "development", + "value": "cancelled" + }, + { + "id": "unknown", + "stability": "development", + "value": "unknown" + }, + { + "id": "invalid_argument", + "stability": "development", + "value": "invalid_argument" + }, + { + "id": "deadline_exceeded", + "stability": "development", + "value": "deadline_exceeded" + }, + { + "id": "not_found", + "stability": "development", + "value": "not_found" + }, + { + "id": "already_exists", + "stability": "development", + "value": "already_exists" + }, + { + "id": "permission_denied", + "stability": "development", + "value": "permission_denied" + }, + { + "id": "resource_exhausted", + "stability": "development", + "value": "resource_exhausted" + }, + { + "id": "failed_precondition", + "stability": "development", + "value": "failed_precondition" + }, + { + "id": "aborted", + "stability": "development", + "value": "aborted" + }, + { + "id": "out_of_range", + "stability": "development", + "value": "out_of_range" + }, + { + "id": "unimplemented", + "stability": "development", + "value": "unimplemented" + }, + { + "id": "internal", + "stability": "development", + "value": "internal" + }, + { + "id": "unavailable", + "stability": "development", + "value": "unavailable" + }, + { + "id": "data_loss", + "stability": "development", + "value": "data_loss" + }, + { + "id": "unauthenticated", + "stability": "development", + "value": "unauthenticated" + } + ] + } + }, + { + "brief": "Connect request metadata, `\u003ckey\u003e` being the normalized Connect Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "1.2.3.4", + "1.2.3.5" + ] + ], + "name": "rpc.connect_rpc.request.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all request metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `[\"1.2.3.4\", \"1.2.3.5\"]` SHOULD be recorded as\nthe `rpc.connect_rpc.request.metadata.my-custom-key` attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]`\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "Connect response metadata, `\u003ckey\u003e` being the normalized Connect Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "attribute_value" + ] + ], + "name": "rpc.connect_rpc.response.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all response metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `\"attribute_value\"` SHOULD be recorded as\nthe `rpc.connect_rpc.response.metadata.my-custom-key` attribute with value `[\"attribute_value\"]`\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string[]]" + } + ], + "brief": "This span represents an incoming Remote Procedure Call (RPC).", + "id": "span.rpc.connect_rpc.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.connect_rpc.error_code": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.connect_rpc.request.metadata": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.connect_rpc.response.metadata": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/spans.yaml", + "registry_id": "main" + } + }, + "note": "`rpc.system` MUST be set to `\"connect_rpc\"` and SHOULD be provided **at span creation time.**\n\n**Span name:** refer to the [Span Name](/docs/rpc/rpc-spans.md#span-name) section.\n\n**Span kind** MUST be `SERVER`.\n", + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "gRPC request metadata, `\u003ckey\u003e` being the normalized gRPC Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "1.2.3.4", + "1.2.3.5" + ] + ], + "name": "rpc.grpc.request.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all request metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `[\"1.2.3.4\", \"1.2.3.5\"]` SHOULD be recorded as\n`rpc.grpc.request.metadata.my-custom-key` attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]`\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "gRPC response metadata, `\u003ckey\u003e` being the normalized gRPC Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "attribute_value" + ] + ], + "name": "rpc.grpc.response.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all response metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `[\"attribute_value\"]` SHOULD be recorded as\nthe `rpc.grpc.response.metadata.my-custom-key` attribute with value `[\"attribute_value\"]`\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.", + "name": "rpc.grpc.status_code", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "OK", + "id": "ok", + "stability": "development", + "value": 0 + }, + { + "brief": "CANCELLED", + "id": "cancelled", + "stability": "development", + "value": 1 + }, + { + "brief": "UNKNOWN", + "id": "unknown", + "stability": "development", + "value": 2 + }, + { + "brief": "INVALID_ARGUMENT", + "id": "invalid_argument", + "stability": "development", + "value": 3 + }, + { + "brief": "DEADLINE_EXCEEDED", + "id": "deadline_exceeded", + "stability": "development", + "value": 4 + }, + { + "brief": "NOT_FOUND", + "id": "not_found", + "stability": "development", + "value": 5 + }, + { + "brief": "ALREADY_EXISTS", + "id": "already_exists", + "stability": "development", + "value": 6 + }, + { + "brief": "PERMISSION_DENIED", + "id": "permission_denied", + "stability": "development", + "value": 7 + }, + { + "brief": "RESOURCE_EXHAUSTED", + "id": "resource_exhausted", + "stability": "development", + "value": 8 + }, + { + "brief": "FAILED_PRECONDITION", + "id": "failed_precondition", + "stability": "development", + "value": 9 + }, + { + "brief": "ABORTED", + "id": "aborted", + "stability": "development", + "value": 10 + }, + { + "brief": "OUT_OF_RANGE", + "id": "out_of_range", + "stability": "development", + "value": 11 + }, + { + "brief": "UNIMPLEMENTED", + "id": "unimplemented", + "stability": "development", + "value": 12 + }, + { + "brief": "INTERNAL", + "id": "internal", + "stability": "development", + "value": 13 + }, + { + "brief": "UNAVAILABLE", + "id": "unavailable", + "stability": "development", + "value": 14 + }, + { + "brief": "DATA_LOSS", + "id": "data_loss", + "stability": "development", + "value": 15 + }, + { + "brief": "UNAUTHENTICATED", + "id": "unauthenticated", + "stability": "development", + "value": 16 + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "note": "This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents an outgoing Remote Procedure Call (RPC).", + "id": "span.rpc.grpc.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.grpc.request.metadata": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.grpc.response.metadata": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.grpc.status_code": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/spans.yaml", + "registry_id": "main" + } + }, + "note": "`rpc.system` MUST be set to `\"grpc\"` and SHOULD be provided **at span creation time.**\n\n**Span name:** refer to the [Span Name](/docs/rpc/rpc-spans.md#span-name) section.\n\n**Span kind** MUST be `CLIENT`.\n\n**Span status** Should be set based on the grpc status code. A mapping is defined in the [grpc status](/docs/rpc/grpc.md#grpc-status) section.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "note": "This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "gRPC request metadata, `\u003ckey\u003e` being the normalized gRPC Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "1.2.3.4", + "1.2.3.5" + ] + ], + "name": "rpc.grpc.request.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all request metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `[\"1.2.3.4\", \"1.2.3.5\"]` SHOULD be recorded as\n`rpc.grpc.request.metadata.my-custom-key` attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]`\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "gRPC response metadata, `\u003ckey\u003e` being the normalized gRPC Metadata key (lowercase), the value being the metadata values.\n", + "examples": [ + [ + "attribute_value" + ] + ], + "name": "rpc.grpc.response.metadata", + "note": "Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured.\nIncluding all response metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nFor example, a property `my-custom-key` with value `[\"attribute_value\"]` SHOULD be recorded as\nthe `rpc.grpc.response.metadata.my-custom-key` attribute with value `[\"attribute_value\"]`\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string[]]" + }, + { + "brief": "The [numeric status code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of the gRPC request.", + "name": "rpc.grpc.status_code", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "OK", + "id": "ok", + "stability": "development", + "value": 0 + }, + { + "brief": "CANCELLED", + "id": "cancelled", + "stability": "development", + "value": 1 + }, + { + "brief": "UNKNOWN", + "id": "unknown", + "stability": "development", + "value": 2 + }, + { + "brief": "INVALID_ARGUMENT", + "id": "invalid_argument", + "stability": "development", + "value": 3 + }, + { + "brief": "DEADLINE_EXCEEDED", + "id": "deadline_exceeded", + "stability": "development", + "value": 4 + }, + { + "brief": "NOT_FOUND", + "id": "not_found", + "stability": "development", + "value": 5 + }, + { + "brief": "ALREADY_EXISTS", + "id": "already_exists", + "stability": "development", + "value": 6 + }, + { + "brief": "PERMISSION_DENIED", + "id": "permission_denied", + "stability": "development", + "value": 7 + }, + { + "brief": "RESOURCE_EXHAUSTED", + "id": "resource_exhausted", + "stability": "development", + "value": 8 + }, + { + "brief": "FAILED_PRECONDITION", + "id": "failed_precondition", + "stability": "development", + "value": 9 + }, + { + "brief": "ABORTED", + "id": "aborted", + "stability": "development", + "value": 10 + }, + { + "brief": "OUT_OF_RANGE", + "id": "out_of_range", + "stability": "development", + "value": 11 + }, + { + "brief": "UNIMPLEMENTED", + "id": "unimplemented", + "stability": "development", + "value": 12 + }, + { + "brief": "INTERNAL", + "id": "internal", + "stability": "development", + "value": 13 + }, + { + "brief": "UNAVAILABLE", + "id": "unavailable", + "stability": "development", + "value": 14 + }, + { + "brief": "DATA_LOSS", + "id": "data_loss", + "stability": "development", + "value": 15 + }, + { + "brief": "UNAUTHENTICATED", + "id": "unauthenticated", + "stability": "development", + "value": 16 + } + ] + } + } + ], + "brief": "This span represents an incoming Remote Procedure Call (RPC).", + "id": "span.rpc.grpc.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.grpc.request.metadata": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.grpc.response.metadata": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.grpc.status_code": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/spans.yaml", + "registry_id": "main" + } + }, + "note": "`rpc.system` MUST be set to `\"grpc\"` and SHOULD be provided **at span creation time.**\n\n**Span name:** refer to the [Span Name](/docs/rpc/rpc-spans.md#span-name) section.\n\n**Span kind** MUST be `SERVER`.\n\n**Span status** Should be set based on the grpc status code. A mapping is defined in the [grpc status](/docs/rpc/grpc.md#grpc-status) section.\n", + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "`error.message` property of response if it is an error response.", + "examples": [ + "Parse error", + "User already exists" + ], + "name": "rpc.jsonrpc.error_message", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "`id` property of request or response. Since protocol allows id to be int, string, `null` or missing (for notifications), value is expected to be cast to string for simplicity. Use empty string in case of `null` value. Omit entirely if this is a notification.\n", + "examples": [ + "10", + "request-7", + "" + ], + "name": "rpc.jsonrpc.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "`error.code` property of response if it is an error response.", + "examples": [ + -32700, + 100 + ], + "name": "rpc.jsonrpc.error_code", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Protocol version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 doesn\u0027t specify this, the value can be omitted.", + "examples": [ + "2.0", + "1.0" + ], + "name": "rpc.jsonrpc.version", + "requirement_level": { + "conditionally_required": "If other than the default version (`1.0`)" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents an outgoing Remote Procedure Call (RPC).", + "id": "span.rpc.jsonrpc.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.jsonrpc.error_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.jsonrpc.error_message": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.jsonrpc.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.jsonrpc.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/spans.yaml", + "registry_id": "main" + } + }, + "note": "`rpc.system` MUST be set to `\"jsonrpc\"` and SHOULD be provided **at span creation time.**\n\n**Span name:** refer to the [Span Name](/docs/rpc/rpc-spans.md#span-name) section.\n\n**Span kind** MUST be `CLIENT`.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "`error.message` property of response if it is an error response.", + "examples": [ + "Parse error", + "User already exists" + ], + "name": "rpc.jsonrpc.error_message", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "`id` property of request or response. Since protocol allows id to be int, string, `null` or missing (for notifications), value is expected to be cast to string for simplicity. Use empty string in case of `null` value. Omit entirely if this is a notification.\n", + "examples": [ + "10", + "request-7", + "" + ], + "name": "rpc.jsonrpc.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "`error.code` property of response if it is an error response.", + "examples": [ + -32700, + 100 + ], + "name": "rpc.jsonrpc.error_code", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Protocol version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 doesn\u0027t specify this, the value can be omitted.", + "examples": [ + "2.0", + "1.0" + ], + "name": "rpc.jsonrpc.version", + "requirement_level": { + "conditionally_required": "If other than the default version (`1.0`)" + }, + "stability": "development", + "type": "string" + } + ], + "brief": "This span represents an incoming Remote Procedure Call (RPC).", + "id": "span.rpc.jsonrpc.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.jsonrpc.error_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.jsonrpc.error_message": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.jsonrpc.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.jsonrpc.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/spans.yaml", + "registry_id": "main" + } + }, + "note": "`rpc.system` MUST be set to `\"jsonrpc\"` and SHOULD be provided **at span creation time.**\n\n**Span name:** refer to the [Span Name](/docs/rpc/rpc-spans.md#span-name) section.\n\n**Span kind** MUST be `SERVER`.\n", + "span_kind": "server", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "Whether this is a received or sent message.", + "name": "rpc.message.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "sent", + "stability": "development", + "value": "SENT" + }, + { + "id": "received", + "stability": "development", + "value": "RECEIVED" + } + ] + } + }, + { + "brief": "MUST be calculated as two different counters starting from `1` one for sent messages and one for received message.", + "name": "rpc.message.id", + "note": "This way we guarantee that the values will be consistent between different implementations.", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Compressed size of the message in bytes.", + "name": "rpc.message.compressed_size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Uncompressed size of the message in bytes.", + "name": "rpc.message.uncompressed_size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "Describes a message sent or received within the context of an RPC call.", + "id": "event.rpc.message", + "lineage": { + "attributes": { + "rpc.message.compressed_size": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.message.id": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.message.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.message.uncompressed_size": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/spans.yaml", + "registry_id": "main" + } + }, + "name": "rpc.message", + "note": "In the lifetime of an RPC stream, an event for each message sent/received on client and server spans SHOULD be created. In case of unary calls only one sent and one received message will be recorded for both client and server spans.\n", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "The name of the telemetry SDK as defined above.\n", + "examples": [ + "opentelemetry" + ], + "name": "telemetry.sdk.name", + "note": "The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute to `opentelemetry`.\nIf another SDK, like a fork or a vendor-provided implementation, is used, this SDK MUST set the\n`telemetry.sdk.name` attribute to the fully-qualified class or module name of this SDK\u0027s main entry point\nor another suitable identifier depending on the language.\nThe identifier `opentelemetry` is reserved and MUST NOT be used in this case.\nAll custom identifiers SHOULD be stable across different versions of an implementation.\n", + "requirement_level": "required", + "role": "identifying", + "stability": "stable", + "type": "string" + }, + { + "brief": "The language of the telemetry SDK.\n", + "name": "telemetry.sdk.language", + "requirement_level": "required", + "role": "identifying", + "stability": "stable", + "type": { + "members": [ + { + "id": "cpp", + "stability": "stable", + "value": "cpp" + }, + { + "id": "dotnet", + "stability": "stable", + "value": "dotnet" + }, + { + "id": "erlang", + "stability": "stable", + "value": "erlang" + }, + { + "id": "go", + "stability": "stable", + "value": "go" + }, + { + "id": "java", + "stability": "stable", + "value": "java" + }, + { + "id": "nodejs", + "stability": "stable", + "value": "nodejs" + }, + { + "id": "php", + "stability": "stable", + "value": "php" + }, + { + "id": "python", + "stability": "stable", + "value": "python" + }, + { + "id": "ruby", + "stability": "stable", + "value": "ruby" + }, + { + "id": "rust", + "stability": "stable", + "value": "rust" + }, + { + "id": "swift", + "stability": "stable", + "value": "swift" + }, + { + "id": "webjs", + "stability": "stable", + "value": "webjs" + } + ] + } + }, + { + "brief": "The version string of the telemetry SDK.\n", + "examples": [ + "1.2.3" + ], + "name": "telemetry.sdk.version", + "requirement_level": "required", + "role": "descriptive", + "stability": "stable", + "type": "string" + } + ], + "brief": "The telemetry SDK used to capture data recorded by the instrumentation libraries.\n", + "id": "entity.telemetry.sdk", + "lineage": { + "attributes": { + "telemetry.sdk.language": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.telemetry" + }, + "telemetry.sdk.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.telemetry" + }, + "telemetry.sdk.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.telemetry" + } + }, + "provenance": { + "path": "/home/weaver/source/telemetry/entities.yaml", + "registry_id": "main" + } + }, + "name": "telemetry.sdk", + "stability": "stable", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the auto instrumentation agent or distribution, if used.\n", + "examples": [ + "parts-unlimited-java" + ], + "name": "telemetry.distro.name", + "note": "Official auto instrumentation agents and distributions SHOULD set the `telemetry.distro.name` attribute to\na string starting with `opentelemetry-`, e.g. `opentelemetry-java-instrumentation`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version string of the auto instrumentation agent or distribution, if used.\n", + "examples": [ + "1.2.3" + ], + "name": "telemetry.distro.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The distribution of telemetry SDK used to capture data recorded by the instrumentation libraries.\n", + "id": "entity.telemetry.distro", + "lineage": { + "attributes": { + "telemetry.distro.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.telemetry" + }, + "telemetry.distro.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.telemetry" + } + }, + "provenance": { + "path": "/home/weaver/source/telemetry/entities.yaml", + "registry_id": "main" + } + }, + "name": "telemetry.distro", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `code.function.name` instead\n", + "deprecated": { + "note": "Value should be included in `code.function.name` which is expected to be a fully-qualified name.\n", + "reason": "uncategorized" + }, + "examples": "serveRequest", + "name": "code.function", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `code.file.path` instead\n", + "deprecated": { + "note": "Replaced by `code.file.path`.", + "reason": "renamed", + "renamed_to": "code.file.path" + }, + "examples": "/usr/local/MyApplication/content_root/app/index.php", + "name": "code.filepath", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `code.line.number` instead\n", + "deprecated": { + "note": "Replaced by `code.line.number`.", + "reason": "renamed", + "renamed_to": "code.line.number" + }, + "examples": 42, + "name": "code.lineno", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `code.column.number`\n", + "deprecated": { + "note": "Replaced by `code.column.number`.", + "reason": "renamed", + "renamed_to": "code.column.number" + }, + "examples": 16, + "name": "code.column", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, namespace is now included into `code.function.name`\n", + "deprecated": { + "note": "Value should be included in `code.function.name` which is expected to be a fully-qualified name.\n", + "reason": "uncategorized" + }, + "examples": "com.example.MyHttpService", + "name": "code.namespace", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "These deprecated attributes provide context about source code\n", + "display_name": "Deprecated Code Attributes", + "id": "registry.code.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/code/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the deployment.\n", + "examples": [ + "deploy my app", + "deploy-frontend" + ], + "name": "deployment.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The id of the deployment.\n", + "examples": [ + "1208" + ], + "name": "deployment.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The status of the deployment.\n", + "name": "deployment.status", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "failed", + "id": "failed", + "stability": "development", + "value": "failed" + }, + { + "brief": "succeeded", + "id": "succeeded", + "stability": "development", + "value": "succeeded" + } + ] + } + }, + { + "brief": "Name of the [deployment environment](https://wikipedia.org/wiki/Deployment_environment) (aka deployment tier).\n", + "examples": [ + "staging", + "production" + ], + "name": "deployment.environment.name", + "note": "`deployment.environment.name` does not affect the uniqueness constraints defined through\nthe `service.namespace`, `service.name` and `service.instance.id` resource attributes.\nThis implies that resources carrying the following attribute combinations MUST be\nconsidered to be identifying the same service:\n\n- `service.name=frontend`, `deployment.environment.name=production`\n- `service.name=frontend`, `deployment.environment.name=staging`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for software deployments.\n", + "display_name": "Deployment Attributes", + "id": "registry.deployment", + "lineage": { + "provenance": { + "path": "/home/weaver/source/deployment/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the physical disk\n", + "examples": [ + "HDD", + "SSD", + "10K" + ], + "name": "hw.physical_disk.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for physical disk metrics\n", + "id": "metric_attributes.hw.physical_disk", + "lineage": { + "attributes": { + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.physical_disk.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/physical-disk-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the physical disk\n", + "examples": [ + "HDD", + "SSD", + "10K" + ], + "name": "hw.physical_disk.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "State of the physical disk endurance utilization\n", + "examples": [ + "remaining" + ], + "name": "hw.physical_disk.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Remaining", + "id": "remaining", + "stability": "development", + "value": "remaining" + } + ] + } + } + ], + "brief": "Endurance remaining for this SSD disk.", + "id": "metric.hw.physical_disk.endurance_utilization", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.physical_disk.state": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.physical_disk.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/physical-disk-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.physical_disk.endurance_utilization", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the physical disk\n", + "examples": [ + "HDD", + "SSD", + "10K" + ], + "name": "hw.physical_disk.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Size of the disk.", + "id": "metric.hw.physical_disk.size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.physical_disk.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/physical-disk-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.physical_disk.size", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Firmware version of the hardware component\n", + "examples": [ + "2.0.1" + ], + "name": "hw.firmware_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Descriptive model name of the hardware component\n", + "examples": [ + "PERC H740P", + "Intel(R) Core(TM) i7-10700K", + "Dell XPS 15 Battery" + ], + "name": "hw.model", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Serial number of the hardware component\n", + "examples": [ + "CNFCP0123456789" + ], + "name": "hw.serial_number", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Vendor name of the hardware component\n", + "examples": [ + "Dell", + "HP", + "Intel", + "AMD", + "LSI", + "Lenovo" + ], + "name": "hw.vendor", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the physical disk\n", + "examples": [ + "HDD", + "SSD", + "10K" + ], + "name": "hw.physical_disk.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "[S.M.A.R.T.](https://wikipedia.org/wiki/S.M.A.R.T.) (Self-Monitoring, Analysis, and Reporting Technology) attribute of the physical disk\n", + "examples": [ + "Spin Retry Count", + "Seek Error Rate" + ], + "name": "hw.physical_disk.smart_attribute", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Value of the corresponding [S.M.A.R.T.](https://wikipedia.org/wiki/S.M.A.R.T.) (Self-Monitoring, Analysis, and Reporting Technology) attribute.", + "id": "metric.hw.physical_disk.smart", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.firmware_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.physical_disk.smart_attribute": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.physical_disk.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.serial_number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.vendor": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/physical-disk-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.physical_disk.smart", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.replicationcontroller.pod.desired` instead.", + "deprecated": { + "note": "Replaced by `k8s.replicationcontroller.pod.desired`.", + "reason": "renamed", + "renamed_to": "k8s.replicationcontroller.pod.desired" + }, + "id": "metric.k8s.replication_controller.desired_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replication_controller.desired_pods", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.replicationcontroller.pod.available` instead.", + "deprecated": { + "note": "Replaced by `k8s.replicationcontroller.pod.available`.", + "reason": "renamed", + "renamed_to": "k8s.replicationcontroller.pod.available" + }, + "id": "metric.k8s.replication_controller.available_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replication_controller.available_pods", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.replicationcontroller.pod.desired` instead.", + "deprecated": { + "note": "Replaced by `k8s.replicationcontroller.pod.desired`.", + "reason": "renamed", + "renamed_to": "k8s.replicationcontroller.pod.desired" + }, + "id": "metric.k8s.replicationcontroller.desired_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replicationcontroller.desired_pods", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.daemonset.node.current_scheduled` instead.", + "deprecated": { + "note": "Replaced by `k8s.daemonset.node.current_scheduled`.", + "reason": "renamed", + "renamed_to": "k8s.daemonset.node.current_scheduled" + }, + "entity_associations": [ + "k8s.daemonset" + ], + "id": "metric.k8s.daemonset.current_scheduled_nodes", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.daemonset.current_scheduled_nodes", + "note": "This metric aligns with the `currentNumberScheduled` field of the\n[K8s DaemonSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#daemonsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{node}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.daemonset.node.desired_scheduled` instead.", + "deprecated": { + "note": "Replaced by `k8s.daemonset.node.desired_scheduled`.", + "reason": "renamed", + "renamed_to": "k8s.daemonset.node.desired_scheduled" + }, + "entity_associations": [ + "k8s.daemonset" + ], + "id": "metric.k8s.daemonset.desired_scheduled_nodes", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.daemonset.desired_scheduled_nodes", + "note": "This metric aligns with the `desiredNumberScheduled` field of the\n[K8s DaemonSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#daemonsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{node}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.daemonset.node.misscheduled` instead.", + "deprecated": { + "note": "Replaced by `k8s.daemonset.node.misscheduled`.", + "reason": "renamed", + "renamed_to": "k8s.daemonset.node.misscheduled" + }, + "entity_associations": [ + "k8s.daemonset" + ], + "id": "metric.k8s.daemonset.misscheduled_nodes", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.daemonset.misscheduled_nodes", + "note": "This metric aligns with the `numberMisscheduled` field of the\n[K8s DaemonSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#daemonsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{node}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.daemonset.node.ready` instead.", + "deprecated": { + "note": "Replaced by `k8s.daemonset.node.ready`.", + "reason": "renamed", + "renamed_to": "k8s.daemonset.node.ready" + }, + "entity_associations": [ + "k8s.daemonset" + ], + "id": "metric.k8s.daemonset.ready_nodes", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.daemonset.ready_nodes", + "note": "This metric aligns with the `numberReady` field of the\n[K8s DaemonSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#daemonsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{node}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.job.pod.active` instead.", + "deprecated": { + "note": "Replaced by `k8s.job.pod.active`.", + "reason": "renamed", + "renamed_to": "k8s.job.pod.active" + }, + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.active_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.active_pods", + "note": "This metric aligns with the `active` field of the\n[K8s JobStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobstatus-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.job.pod.failed` instead.", + "deprecated": { + "note": "Replaced by `k8s.job.pod.failed`.", + "reason": "renamed", + "renamed_to": "k8s.job.pod.failed" + }, + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.failed_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.failed_pods", + "note": "This metric aligns with the `failed` field of the\n[K8s JobStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobstatus-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.job.pod.successful` instead.", + "deprecated": { + "note": "Replaced by `k8s.job.pod.successful`.", + "reason": "renamed", + "renamed_to": "k8s.job.pod.successful" + }, + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.successful_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.successful_pods", + "note": "This metric aligns with the `succeeded` field of the\n[K8s JobStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobstatus-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.job.pod.desired_successful` instead.", + "deprecated": { + "note": "Replaced by `k8s.job.pod.desired_successful`.", + "reason": "renamed", + "renamed_to": "k8s.job.pod.desired_successful" + }, + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.desired_successful_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.desired_successful_pods", + "note": "This metric aligns with the `completions` field of the\n[K8s JobSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobspec-v1-batch)..\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.job.pod.max_parallel` instead.", + "deprecated": { + "note": "Replaced by `k8s.job.pod.max_parallel`.", + "reason": "renamed", + "renamed_to": "k8s.job.pod.max_parallel" + }, + "entity_associations": [ + "k8s.job" + ], + "id": "metric.k8s.job.max_parallel_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.job.max_parallel_pods", + "note": "This metric aligns with the `parallelism` field of the\n[K8s JobSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#jobspec-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.cronjob.job.active` instead.", + "deprecated": { + "note": "Replaced by `k8s.cronjob.job.active`.", + "reason": "renamed", + "renamed_to": "k8s.cronjob.job.active" + }, + "entity_associations": [ + "k8s.cronjob" + ], + "id": "metric.k8s.cronjob.active_jobs", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.cronjob.active_jobs", + "note": "This metric aligns with the `active` field of the\n[K8s CronJobStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#cronjobstatus-v1-batch).\n", + "stability": "development", + "type": "metric", + "unit": "{job}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.replicationcontroller.pod.available` instead.", + "deprecated": { + "note": "Replaced by `k8s.replicationcontroller.pod.available`.", + "reason": "renamed", + "renamed_to": "k8s.replicationcontroller.pod.available" + }, + "id": "metric.k8s.replicationcontroller.available_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replicationcontroller.available_pods", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.node.pod.allocatable` instead.", + "deprecated": { + "note": "Replaced by `k8s.node.pod.allocatable`.", + "reason": "renamed", + "renamed_to": "k8s.node.pod.allocatable" + }, + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.allocatable.pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.allocatable.pods", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.deployment.pod.desired` instead.", + "deprecated": { + "note": "Replaced by `k8s.deployment.pod.desired`.", + "reason": "renamed", + "renamed_to": "k8s.deployment.pod.desired" + }, + "entity_associations": [ + "k8s.deployment" + ], + "id": "metric.k8s.deployment.desired_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.deployment.desired_pods", + "note": "This metric aligns with the `replicas` field of the\n[K8s DeploymentSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentspec-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.deployment.pod.available` instead.", + "deprecated": { + "note": "Replaced by `k8s.deployment.pod.available`.", + "reason": "renamed", + "renamed_to": "k8s.deployment.pod.available" + }, + "entity_associations": [ + "k8s.deployment" + ], + "id": "metric.k8s.deployment.available_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.deployment.available_pods", + "note": "This metric aligns with the `availableReplicas` field of the\n[K8s DeploymentStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#deploymentstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.replicaset.pod.desired` instead.", + "deprecated": { + "note": "Replaced by `k8s.replicaset.pod.desired`.", + "reason": "renamed", + "renamed_to": "k8s.replicaset.pod.desired" + }, + "entity_associations": [ + "k8s.replicaset" + ], + "id": "metric.k8s.replicaset.desired_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replicaset.desired_pods", + "note": "This metric aligns with the `replicas` field of the\n[K8s ReplicaSetSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#replicasetspec-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.replicaset.pod.available` instead.", + "deprecated": { + "note": "Replaced by `k8s.replicaset.pod.available`.", + "reason": "renamed", + "renamed_to": "k8s.replicaset.pod.available" + }, + "entity_associations": [ + "k8s.replicaset" + ], + "id": "metric.k8s.replicaset.available_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.replicaset.available_pods", + "note": "This metric aligns with the `availableReplicas` field of the\n[K8s ReplicaSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#replicasetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.statefulset.pod.desired` instead.", + "deprecated": { + "note": "Replaced by `k8s.statefulset.pod.desired`.", + "reason": "renamed", + "renamed_to": "k8s.statefulset.pod.desired" + }, + "entity_associations": [ + "k8s.statefulset" + ], + "id": "metric.k8s.statefulset.desired_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.statefulset.desired_pods", + "note": "This metric aligns with the `replicas` field of the\n[K8s StatefulSetSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetspec-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.statefulset.pod.ready` instead.", + "deprecated": { + "note": "Replaced by `k8s.statefulset.pod.ready`.", + "reason": "renamed", + "renamed_to": "k8s.statefulset.pod.ready" + }, + "entity_associations": [ + "k8s.statefulset" + ], + "id": "metric.k8s.statefulset.ready_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.statefulset.ready_pods", + "note": "This metric aligns with the `readyReplicas` field of the\n[K8s StatefulSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.statefulset.pod.current` instead.", + "deprecated": { + "note": "Replaced by `k8s.statefulset.pod.current`.", + "reason": "renamed", + "renamed_to": "k8s.statefulset.pod.current" + }, + "entity_associations": [ + "k8s.statefulset" + ], + "id": "metric.k8s.statefulset.current_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.statefulset.current_pods", + "note": "This metric aligns with the `currentReplicas` field of the\n[K8s StatefulSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.statefulset.pod.updated` instead.", + "deprecated": { + "note": "Replaced by `k8s.statefulset.pod.updated`.", + "reason": "renamed", + "renamed_to": "k8s.statefulset.pod.updated" + }, + "entity_associations": [ + "k8s.statefulset" + ], + "id": "metric.k8s.statefulset.updated_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.statefulset.updated_pods", + "note": "This metric aligns with the `updatedReplicas` field of the\n[K8s StatefulSetStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#statefulsetstatus-v1-apps).\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.hpa.pod.desired` instead.", + "deprecated": { + "note": "Replaced by `k8s.hpa.pod.desired`.", + "reason": "renamed", + "renamed_to": "k8s.hpa.pod.desired" + }, + "entity_associations": [ + "k8s.hpa" + ], + "id": "metric.k8s.hpa.desired_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.desired_pods", + "note": "This metric aligns with the `desiredReplicas` field of the\n[K8s HorizontalPodAutoscalerStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerstatus-v2-autoscaling)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.hpa.pod.current` instead.", + "deprecated": { + "note": "Replaced by `k8s.hpa.pod.current`.", + "reason": "renamed", + "renamed_to": "k8s.hpa.pod.current" + }, + "entity_associations": [ + "k8s.hpa" + ], + "id": "metric.k8s.hpa.current_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.current_pods", + "note": "This metric aligns with the `currentReplicas` field of the\n[K8s HorizontalPodAutoscalerStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerstatus-v2-autoscaling)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.hpa.pod.max` instead.", + "deprecated": { + "note": "Replaced by `k8s.hpa.pod.max`.", + "reason": "renamed", + "renamed_to": "k8s.hpa.pod.max" + }, + "entity_associations": [ + "k8s.hpa" + ], + "id": "metric.k8s.hpa.max_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.max_pods", + "note": "This metric aligns with the `maxReplicas` field of the\n[K8s HorizontalPodAutoscalerSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerspec-v2-autoscaling)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.hpa.pod.min` instead.", + "deprecated": { + "note": "Replaced by `k8s.hpa.pod.min`.", + "reason": "renamed", + "renamed_to": "k8s.hpa.pod.min" + }, + "entity_associations": [ + "k8s.hpa" + ], + "id": "metric.k8s.hpa.min_pods", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.hpa.min_pods", + "note": "This metric aligns with the `minReplicas` field of the\n[K8s HorizontalPodAutoscalerSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#horizontalpodautoscalerspec-v2-autoscaling)\n", + "stability": "development", + "type": "metric", + "unit": "{pod}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Deprecated, use `k8s.node.cpu.allocatable` instead.", + "deprecated": { + "note": "Replaced by `k8s.node.cpu.allocatable`.", + "reason": "renamed", + "renamed_to": "k8s.node.cpu.allocatable" + }, + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.allocatable.cpu", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.allocatable.cpu", + "stability": "development", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.node.ephemeral_storage.allocatable` instead.", + "deprecated": { + "note": "Replaced by `k8s.node.ephemeral_storage.allocatable`.", + "reason": "renamed", + "renamed_to": "k8s.node.ephemeral_storage.allocatable" + }, + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.allocatable.ephemeral_storage", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.allocatable.ephemeral_storage", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Deprecated, use `k8s.node.memory.allocatable` instead.", + "deprecated": { + "note": "Replaced by `k8s.node.memory.allocatable`.", + "reason": "renamed", + "renamed_to": "k8s.node.memory.allocatable" + }, + "entity_associations": [ + "k8s.node" + ], + "id": "metric.k8s.node.allocatable.memory", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/k8s/deprecated/metrics-deprecated.yaml", + "registry_id": "main" + } + }, + "metric_name": "k8s.node.allocatable.memory", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "attributes": [ + { + "brief": "The operating system type.\n", + "name": "os.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Microsoft Windows", + "id": "windows", + "stability": "development", + "value": "windows" + }, + { + "brief": "Linux", + "id": "linux", + "stability": "development", + "value": "linux" + }, + { + "brief": "Apple Darwin", + "id": "darwin", + "stability": "development", + "value": "darwin" + }, + { + "brief": "FreeBSD", + "id": "freebsd", + "stability": "development", + "value": "freebsd" + }, + { + "brief": "NetBSD", + "id": "netbsd", + "stability": "development", + "value": "netbsd" + }, + { + "brief": "OpenBSD", + "id": "openbsd", + "stability": "development", + "value": "openbsd" + }, + { + "brief": "DragonFly BSD", + "id": "dragonflybsd", + "stability": "development", + "value": "dragonflybsd" + }, + { + "brief": "HP-UX (Hewlett Packard Unix)", + "id": "hpux", + "stability": "development", + "value": "hpux" + }, + { + "brief": "AIX (Advanced Interactive eXecutive)", + "id": "aix", + "stability": "development", + "value": "aix" + }, + { + "brief": "SunOS, Oracle Solaris", + "id": "solaris", + "stability": "development", + "value": "solaris" + }, + { + "brief": "Deprecated. Use `zos` instead.", + "deprecated": { + "note": "Replaced by `zos`.", + "reason": "renamed", + "renamed_to": "zos" + }, + "id": "z_os", + "stability": "development", + "value": "z_os" + }, + { + "brief": "IBM z/OS", + "id": "zos", + "stability": "development", + "value": "zos" + } + ] + } + }, + { + "brief": "Human readable (not intended to be parsed) OS version information, like e.g. reported by `ver` or `lsb_release -a` commands.\n", + "examples": [ + "Microsoft Windows [Version 10.0.18363.778]", + "Ubuntu 18.04.1 LTS" + ], + "name": "os.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Human readable operating system name.", + "examples": [ + "iOS", + "Android", + "Ubuntu" + ], + "name": "os.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version string of the operating system as defined in [Version Attributes](/docs/resource/README.md#version-attributes).\n", + "examples": [ + "14.2.1", + "18.04.1" + ], + "name": "os.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier for a particular build or compilation of the operating system.", + "examples": [ + "TQ3C.230805.001.B2", + "20E247", + "22621" + ], + "name": "os.build_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The operating system (OS) on which the process represented by this resource is running.\n", + "display_name": "Operating System Attributes", + "id": "registry.os", + "lineage": { + "provenance": { + "path": "/home/weaver/source/os/registry.yaml", + "registry_id": "main" + } + }, + "note": "In case of virtualized environments, this is the operating system as it is observed by the process, i.e., the virtualized guest rather than the underlying host.\n", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Describes RPC metric attributes.", + "id": "attributes.metrics.rpc.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "A string identifying the remoting system. See below for a list of well-known identifiers.", + "name": "rpc.system", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "gRPC", + "id": "grpc", + "stability": "development", + "value": "grpc" + }, + { + "brief": "Java RMI", + "id": "java_rmi", + "stability": "development", + "value": "java_rmi" + }, + { + "brief": ".NET WCF", + "id": "dotnet_wcf", + "stability": "development", + "value": "dotnet_wcf" + }, + { + "brief": "Apache Dubbo", + "id": "apache_dubbo", + "stability": "development", + "value": "apache_dubbo" + }, + { + "brief": "Connect RPC", + "id": "connect_rpc", + "stability": "development", + "value": "connect_rpc" + }, + { + "brief": "[ONC RPC (Sun RPC)](https://datatracker.ietf.org/doc/html/rfc5531)", + "id": "onc_rpc", + "stability": "development", + "value": "onc_rpc" + }, + { + "brief": "JSON-RPC", + "id": "jsonrpc", + "stability": "development", + "value": "jsonrpc" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + } + ], + "brief": "Describes RPC metric attributes.", + "id": "attributes.metrics.rpc.server", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This document defines semantic conventions for remote procedure calls.", + "id": "rpc", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "note": "This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This document defines semantic conventions for remote procedure calls.", + "id": "rpc_service", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This document defines semantic conventions for remote procedure calls.", + "id": "rpc.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "This is the logical name of the method from the RPC interface perspective.", + "examples": "exampleMethod", + "name": "rpc.method", + "note": "This is the logical name of the method from the RPC interface perspective, which can be different from the name of any implementing method/function. The `code.function.name` attribute may be used to store the latter (e.g., method actually executing the call on the server side, RPC client stub method on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The full (logical) name of the service being called, including its package name, if applicable.", + "examples": "myservice.EchoService", + "name": "rpc.service", + "note": "This is the logical name of the service from the RPC interface perspective, which can be different from the name of any implementing class. The `code.namespace` attribute may be used to store the latter (despite the attribute name, it may include a class name; e.g., class with method actually executing the call on the server side, RPC client stub class on the client side).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This document defines semantic conventions for remote procedure calls.", + "id": "rpc_service.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Common ASP.NET Core rate-limiting metrics attributes", + "id": "aspnetcore.common.rate_limiting.metrics.attributes", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": { + "conditionally_required": "if a scheme is specified during authentication." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Common ASP.NET Core authentication metrics attributes", + "id": "aspnetcore.common.authentication.metrics.attributes", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common ASP.NET Core Identity metrics attributes", + "id": "aspnetcore.common.identity.metrics.attributes", + "lineage": { + "attributes": { + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the library or subsystem using the memory pool instance.", + "examples": [ + "kestrel", + "iis" + ], + "name": "aspnetcore.memory_pool.owner", + "requirement_level": { + "conditionally_required": "if owner is specified when the memory pool is created." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Common ASP.NET Core memory pool metrics attributes", + "id": "aspnetcore.common.memory_pool.metrics.attributes", + "lineage": { + "attributes": { + "aspnetcore.memory_pool.owner": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A value that indicates whether the matched route is a fallback route.", + "examples": [ + true + ], + "name": "aspnetcore.routing.is_fallback", + "requirement_level": { + "conditionally_required": "if and only if a route was successfully matched." + }, + "stability": "stable", + "type": "boolean" + }, + { + "brief": "Match result - success or failure", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.routing.match_status", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Match succeeded", + "id": "success", + "stability": "stable", + "value": "success" + }, + { + "brief": "Match failed", + "id": "failure", + "stability": "stable", + "value": "failure" + } + ] + } + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "if and only if a route was successfully matched." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Number of requests that were attempted to be matched to an endpoint.", + "id": "metric.aspnetcore.routing.match_attempts", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.routing.is_fallback": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.routing.match_status": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.routing.match_attempts", + "note": "Meter name: `Microsoft.AspNetCore.Routing`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{match_attempt}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException", + "Contoso.MyException" + ], + "name": "error.type", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Full type name of the [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) implementation that handled the exception.", + "examples": [ + "Contoso.MyHandler" + ], + "name": "aspnetcore.diagnostics.handler.type", + "requirement_level": { + "conditionally_required": "if and only if the exception was handled by this handler." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "ASP.NET Core exception middleware handling result.", + "examples": [ + "handled", + "unhandled" + ], + "name": "aspnetcore.diagnostics.exception.result", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Exception was handled by the exception handling middleware.", + "id": "handled", + "stability": "stable", + "value": "handled" + }, + { + "brief": "Exception was not handled by the exception handling middleware.", + "id": "unhandled", + "stability": "stable", + "value": "unhandled" + }, + { + "brief": "Exception handling was skipped because the response had started.", + "id": "skipped", + "stability": "stable", + "value": "skipped" + }, + { + "brief": "Exception handling didn\u0027t run because the request was aborted.", + "id": "aborted", + "stability": "stable", + "value": "aborted" + } + ] + } + } + ], + "brief": "Number of exceptions caught by exception handling middleware.", + "id": "metric.aspnetcore.diagnostics.exceptions", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.diagnostics.exception.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.diagnostics.handler.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.diagnostics.exceptions", + "note": "Meter name: `Microsoft.AspNetCore.Diagnostics`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{exception}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Number of requests that are currently active on the server that hold a rate limiting lease.", + "id": "metric.aspnetcore.rate_limiting.active_request_leases", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.active_request_leases", + "note": "Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "The duration of rate limiting lease held by requests on the server.", + "id": "metric.aspnetcore.rate_limiting.request_lease.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.request_lease.duration", + "note": "Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Rate-limiting result, shows whether the lease was acquired or contains a rejection reason", + "examples": [ + "acquired", + "request_canceled" + ], + "name": "aspnetcore.rate_limiting.result", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Lease was acquired", + "id": "acquired", + "stability": "stable", + "value": "acquired" + }, + { + "brief": "Lease request was rejected by the endpoint limiter", + "id": "endpoint_limiter", + "stability": "stable", + "value": "endpoint_limiter" + }, + { + "brief": "Lease request was rejected by the global limiter", + "id": "global_limiter", + "stability": "stable", + "value": "global_limiter" + }, + { + "brief": "Lease request was canceled", + "id": "request_canceled", + "stability": "stable", + "value": "request_canceled" + } + ] + } + } + ], + "brief": "The time the request spent in a queue waiting to acquire a rate limiting lease.", + "id": "metric.aspnetcore.rate_limiting.request.time_in_queue", + "instrument": "histogram", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.rate_limiting.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.request.time_in_queue", + "note": "Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Number of requests that are currently queued, waiting to acquire a rate limiting lease.", + "id": "metric.aspnetcore.rate_limiting.queued_requests", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.queued_requests", + "note": "Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Rate-limiting result, shows whether the lease was acquired or contains a rejection reason", + "examples": [ + "acquired", + "request_canceled" + ], + "name": "aspnetcore.rate_limiting.result", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Lease was acquired", + "id": "acquired", + "stability": "stable", + "value": "acquired" + }, + { + "brief": "Lease request was rejected by the endpoint limiter", + "id": "endpoint_limiter", + "stability": "stable", + "value": "endpoint_limiter" + }, + { + "brief": "Lease request was rejected by the global limiter", + "id": "global_limiter", + "stability": "stable", + "value": "global_limiter" + }, + { + "brief": "Lease request was canceled", + "id": "request_canceled", + "stability": "stable", + "value": "request_canceled" + } + ] + } + } + ], + "brief": "Number of requests that tried to acquire a rate limiting lease.", + "id": "metric.aspnetcore.rate_limiting.requests", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.rate_limiting.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.requests", + "note": "Requests could be:\n\n* Rejected by global or endpoint rate limiting policies\n* Canceled while waiting for the lease.\n\nMeter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the library or subsystem using the memory pool instance.", + "examples": [ + "kestrel", + "iis" + ], + "name": "aspnetcore.memory_pool.owner", + "requirement_level": { + "conditionally_required": "if owner is specified when the memory pool is created." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Number of bytes currently pooled and available for reuse.", + "id": "metric.aspnetcore.memory_pool.pooled", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "aspnetcore.memory_pool.owner": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.memory_pool.pooled", + "note": "Meter name: `Microsoft.AspNetCore.MemoryPool`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the library or subsystem using the memory pool instance.", + "examples": [ + "kestrel", + "iis" + ], + "name": "aspnetcore.memory_pool.owner", + "requirement_level": { + "conditionally_required": "if owner is specified when the memory pool is created." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Total number of bytes allocated by the memory pool. Allocation occurs when a memory rental request exceeds the available pooled memory.", + "id": "metric.aspnetcore.memory_pool.allocated", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.memory_pool.owner": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.memory_pool.allocated", + "note": "Meter name: `Microsoft.AspNetCore.MemoryPool`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the library or subsystem using the memory pool instance.", + "examples": [ + "kestrel", + "iis" + ], + "name": "aspnetcore.memory_pool.owner", + "requirement_level": { + "conditionally_required": "if owner is specified when the memory pool is created." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Total number of bytes evicted from the memory pool. Eviction occurs when idle pooled memory is reclaimed.", + "id": "metric.aspnetcore.memory_pool.evicted", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.memory_pool.owner": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.memory_pool.evicted", + "note": "Meter name: `Microsoft.AspNetCore.MemoryPool`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The name of the library or subsystem using the memory pool instance.", + "examples": [ + "kestrel", + "iis" + ], + "name": "aspnetcore.memory_pool.owner", + "requirement_level": { + "conditionally_required": "if owner is specified when the memory pool is created." + }, + "stability": "development", + "type": "string" + } + ], + "brief": "Total number of bytes rented from the memory pool.", + "id": "metric.aspnetcore.memory_pool.rented", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.memory_pool.owner": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.memory_pool.rented", + "note": "Meter name: `Microsoft.AspNetCore.MemoryPool`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": { + "conditionally_required": "if a scheme is specified during authentication." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The result of the authentication operation.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.authentication.result", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Authentication was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Authentication failed.", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "No authentication information returned.", + "id": "none", + "stability": "development", + "value": "none" + } + ] + } + } + ], + "brief": "The authentication duration for a request.", + "id": "metric.aspnetcore.authentication.authenticate.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "aspnetcore.authentication.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.authentication.authenticate.duration", + "note": "Meter name: `Microsoft.AspNetCore.Authentication`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": { + "conditionally_required": "if a scheme is specified during authentication." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The total number of times a scheme is challenged.", + "id": "metric.aspnetcore.authentication.challenges", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.authentication.challenges", + "note": "Meter name: `Microsoft.AspNetCore.Authentication`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{challenge}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": { + "conditionally_required": "if a scheme is specified during authentication." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The total number of times an authenticated user attempts to access a resource they are not permitted to access.", + "id": "metric.aspnetcore.authentication.forbids", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.authentication.forbids", + "note": "Meter name: `Microsoft.AspNetCore.Authentication`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{forbid}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": { + "conditionally_required": "if a scheme is specified during authentication." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The total number of times a principal is signed in with a scheme.", + "id": "metric.aspnetcore.authentication.sign_ins", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.authentication.sign_ins", + "note": "Meter name: `Microsoft.AspNetCore.Authentication`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{sign_in}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": { + "conditionally_required": "if a scheme is specified during authentication." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The total number of times a principal is signed out with a scheme.", + "id": "metric.aspnetcore.authentication.sign_outs", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.authentication.sign_outs", + "note": "Meter name: `Microsoft.AspNetCore.Authentication`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{sign_out}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "A value that indicates whether the user is authenticated.", + "examples": [ + true + ], + "name": "aspnetcore.user.is_authenticated", + "requirement_level": "required", + "stability": "stable", + "type": "boolean" + }, + { + "brief": "The name of the authorization policy.", + "examples": [ + "RequireAdminRole" + ], + "name": "aspnetcore.authorization.policy", + "requirement_level": { + "conditionally_required": "if a policy is specified." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The result of calling the authorization service.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.authorization.result", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Authorization was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Authorization failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + } + ], + "brief": "The total number of authorization attempts.", + "id": "metric.aspnetcore.authorization.attempts", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.authorization.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.authorization.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.user.is_authenticated": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.authorization.attempts", + "note": "Meter name: `Microsoft.AspNetCore.Authorization`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{attempt}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The error code for a failed identity operation.", + "examples": [ + "DefaultError", + "PasswordMismatch" + ], + "name": "aspnetcore.identity.error_code", + "requirement_level": { + "conditionally_required": "if an error was set on a failed identity result." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The result of the identity operation.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.result", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Identity operation was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Identity operation failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + }, + { + "brief": "The full name of exception type or the identity error code.", + "examples": [ + "System.OperationCanceledException", + "PasswordMismatch" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The duration of user creation operations.", + "id": "metric.aspnetcore.identity.user.create.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "aspnetcore.identity.error_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.user.create.duration", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The error code for a failed identity operation.", + "examples": [ + "DefaultError", + "PasswordMismatch" + ], + "name": "aspnetcore.identity.error_code", + "requirement_level": { + "conditionally_required": "if an error was set on a failed identity result." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The result of the identity operation.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.result", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Identity operation was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Identity operation failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + }, + { + "brief": "The full name of exception type or the identity error code.", + "examples": [ + "System.OperationCanceledException", + "PasswordMismatch" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The user update type.", + "examples": [ + "update", + "user_name", + "reset_password" + ], + "name": "aspnetcore.identity.user.update_type", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Identity user updated.", + "id": "update", + "stability": "development", + "value": "update" + }, + { + "brief": "Identity user name updated.", + "id": "user_name", + "stability": "development", + "value": "user_name" + }, + { + "brief": "Identity user password added.", + "id": "add_password", + "stability": "development", + "value": "add_password" + }, + { + "brief": "Identity user password changed.", + "id": "change_password", + "stability": "development", + "value": "change_password" + }, + { + "brief": "Identity user security stamp updated.", + "id": "security_stamp", + "stability": "development", + "value": "security_stamp" + }, + { + "brief": "Identity user password reset.", + "id": "reset_password", + "stability": "development", + "value": "reset_password" + }, + { + "brief": "Identity user login removed.", + "id": "remove_login", + "stability": "development", + "value": "remove_login" + }, + { + "brief": "Identity user login added.", + "id": "add_login", + "stability": "development", + "value": "add_login" + }, + { + "brief": "Identity user claims added.", + "id": "add_claims", + "stability": "development", + "value": "add_claims" + }, + { + "brief": "Identity user claim replaced.", + "id": "replace_claim", + "stability": "development", + "value": "replace_claim" + }, + { + "brief": "Identity user claims removed.", + "id": "remove_claims", + "stability": "development", + "value": "remove_claims" + }, + { + "brief": "Identity user added to roles.", + "id": "add_to_roles", + "stability": "development", + "value": "add_to_roles" + }, + { + "brief": "Identity user removed from roles.", + "id": "remove_from_roles", + "stability": "development", + "value": "remove_from_roles" + }, + { + "brief": "Identity user email set.", + "id": "set_email", + "stability": "development", + "value": "set_email" + }, + { + "brief": "Identity user email confirmed.", + "id": "confirm_email", + "stability": "development", + "value": "confirm_email" + }, + { + "brief": "Identity user password rehashed.", + "id": "password_rehash", + "stability": "development", + "value": "password_rehash" + }, + { + "brief": "Identity user password removed.", + "id": "remove_password", + "stability": "development", + "value": "remove_password" + }, + { + "brief": "Identity user email changed.", + "id": "change_email", + "stability": "development", + "value": "change_email" + }, + { + "brief": "Identity user phone number set.", + "id": "set_phone_number", + "stability": "development", + "value": "set_phone_number" + }, + { + "brief": "Identity user phone number changed.", + "id": "change_phone_number", + "stability": "development", + "value": "change_phone_number" + }, + { + "brief": "Identity user two-factor authentication enabled or disabled.", + "id": "set_two_factor_enabled", + "stability": "development", + "value": "set_two_factor_enabled" + }, + { + "brief": "Identity user lockout enabled or disabled.", + "id": "set_lockout_enabled", + "stability": "development", + "value": "set_lockout_enabled" + }, + { + "brief": "Identity user lockout end date set.", + "id": "set_lockout_end_date", + "stability": "development", + "value": "set_lockout_end_date" + }, + { + "brief": "Identity user access failure recorded.", + "id": "access_failed", + "stability": "development", + "value": "access_failed" + }, + { + "brief": "Identity user access failure count reset.", + "id": "reset_access_failed_count", + "stability": "development", + "value": "reset_access_failed_count" + }, + { + "brief": "Identity user authentication token set.", + "id": "set_authentication_token", + "stability": "development", + "value": "set_authentication_token" + }, + { + "brief": "Identity user authentication token removed.", + "id": "remove_authentication_token", + "stability": "development", + "value": "remove_authentication_token" + }, + { + "brief": "Identity user authenticator key reset.", + "id": "reset_authenticator_key", + "stability": "development", + "value": "reset_authenticator_key" + }, + { + "brief": "Identity user new two-factor recovery codes generated.", + "id": "generate_new_two_factor_recovery_codes", + "stability": "development", + "value": "generate_new_two_factor_recovery_codes" + }, + { + "brief": "Identity user two-factor recovery code redeemed.", + "id": "redeem_two_factor_recovery_code", + "stability": "development", + "value": "redeem_two_factor_recovery_code" + }, + { + "brief": "Identity user passkey set.", + "id": "set_passkey", + "stability": "development", + "value": "set_passkey" + }, + { + "brief": "Identity user passkey removed.", + "id": "remove_passkey", + "stability": "development", + "value": "remove_passkey" + }, + { + "brief": "Any update type that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "development", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The duration of user update operations.", + "id": "metric.aspnetcore.identity.user.update.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "aspnetcore.identity.error_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user.update_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.user.update.duration", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The error code for a failed identity operation.", + "examples": [ + "DefaultError", + "PasswordMismatch" + ], + "name": "aspnetcore.identity.error_code", + "requirement_level": { + "conditionally_required": "if an error was set on a failed identity result." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The result of the identity operation.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.result", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Identity operation was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Identity operation failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + }, + { + "brief": "The full name of exception type or the identity error code.", + "examples": [ + "System.OperationCanceledException", + "PasswordMismatch" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The duration of user deletion operations.", + "id": "metric.aspnetcore.identity.user.delete.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "aspnetcore.identity.error_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.user.delete.duration", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The result from checking the password.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.password_check_result", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Password check was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Password check was successful however the password was encoded using a deprecated algorithm and should be rehashed and updated.", + "id": "success_rehash_needed", + "stability": "development", + "value": "success_rehash_needed" + }, + { + "brief": "Password check failed.", + "id": "failure", + "stability": "development", + "value": "failure" + }, + { + "brief": "Password check couldn\u0027t proceed because the password was missing from the user.", + "id": "password_missing", + "stability": "development", + "value": "password_missing" + }, + { + "brief": "Password check couldn\u0027t proceed because the user was missing.", + "id": "user_missing", + "stability": "development", + "value": "user_missing" + } + ] + } + } + ], + "brief": "The number of check password attempts. Only checks whether the password is valid and not whether the user account is in a state that can log in.", + "id": "metric.aspnetcore.identity.user.check_password_attempts", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.identity.password_check_result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.user.check_password_attempts", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{attempt}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "What the token will be used for.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.token_purpose", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The token is for resetting a user password.", + "id": "reset_password", + "stability": "development", + "value": "reset_password" + }, + { + "brief": "The token is for changing a user phone number.", + "id": "change_phone_number", + "stability": "development", + "value": "change_phone_number" + }, + { + "brief": "The token is for confirming user email address.", + "id": "email_confirmation", + "stability": "development", + "value": "email_confirmation" + }, + { + "brief": "The token is for changing the user email address.", + "id": "change_email", + "stability": "development", + "value": "change_email" + }, + { + "brief": "The token is for changing user two factor settings.", + "id": "two_factor", + "stability": "development", + "value": "two_factor" + }, + { + "brief": "Any token purpose that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "development", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The result of token verification.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.token_verified", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Token verification was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "Token verification failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + } + ], + "brief": "The total number of token verification attempts.", + "id": "metric.aspnetcore.identity.user.verify_token_attempts", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.identity.token_purpose": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.token_verified": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.user.verify_token_attempts", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{attempt}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "What the token will be used for.", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.identity.token_purpose", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "The token is for resetting a user password.", + "id": "reset_password", + "stability": "development", + "value": "reset_password" + }, + { + "brief": "The token is for changing a user phone number.", + "id": "change_phone_number", + "stability": "development", + "value": "change_phone_number" + }, + { + "brief": "The token is for confirming user email address.", + "id": "email_confirmation", + "stability": "development", + "value": "email_confirmation" + }, + { + "brief": "The token is for changing the user email address.", + "id": "change_email", + "stability": "development", + "value": "change_email" + }, + { + "brief": "The token is for changing user two factor settings.", + "id": "two_factor", + "stability": "development", + "value": "two_factor" + }, + { + "brief": "Any token purpose that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "development", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The total number of token generations.", + "id": "metric.aspnetcore.identity.user.generated_tokens", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.identity.token_purpose": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.user.generated_tokens", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{count}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Whether the sign in result was success or failure.", + "examples": [ + "password", + "two_factor" + ], + "name": "aspnetcore.identity.sign_in.result", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Sign in was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "User is locked out.", + "id": "locked_out", + "stability": "development", + "value": "locked_out" + }, + { + "brief": "User is not allowed to sign in.", + "id": "not_allowed", + "stability": "development", + "value": "not_allowed" + }, + { + "brief": "User requires two factory authentication to sign in.", + "id": "requires_two_factor", + "stability": "development", + "value": "requires_two_factor" + }, + { + "brief": "Sign in failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + }, + { + "brief": "The authentication type.", + "examples": [ + "password", + "two_factor" + ], + "name": "aspnetcore.identity.sign_in.type", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Sign in with password.", + "id": "password", + "stability": "development", + "value": "password" + }, + { + "brief": "Sign in with two factory recovery code.", + "id": "two_factor_recovery_code", + "stability": "development", + "value": "two_factor_recovery_code" + }, + { + "brief": "Sign in with two factor authenticator app.", + "id": "two_factor_authenticator", + "stability": "development", + "value": "two_factor_authenticator" + }, + { + "brief": "Sign in with a two factor provider.", + "id": "two_factor", + "stability": "development", + "value": "two_factor" + }, + { + "brief": "Sign in with a previously registered third-party login.", + "id": "external", + "stability": "development", + "value": "external" + }, + { + "brief": "Sign in with passkey.", + "id": "passkey", + "stability": "development", + "value": "passkey" + } + ] + } + }, + { + "brief": "A flag indicating whether the sign in is persistent.", + "name": "aspnetcore.sign_in.is_persistent", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": "boolean" + } + ], + "brief": "The duration of authenticate attempts. The authenticate metrics is recorded by sign in methods such as PasswordSignInAsync and TwoFactorSignInAsync.", + "id": "metric.aspnetcore.identity.sign_in.authenticate.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.sign_in.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.sign_in.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.sign_in.is_persistent": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.sign_in.authenticate.duration", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The total number of two factor clients remembered.", + "id": "metric.aspnetcore.identity.sign_in.two_factor_clients_remembered", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.sign_in.two_factor_clients_remembered", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{client}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The total number of two factor clients forgotten.", + "id": "metric.aspnetcore.identity.sign_in.two_factor_clients_forgotten", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.sign_in.two_factor_clients_forgotten", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{client}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Whether the sign in result was success or failure.", + "examples": [ + "password", + "two_factor" + ], + "name": "aspnetcore.identity.sign_in.result", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Sign in was successful.", + "id": "success", + "stability": "development", + "value": "success" + }, + { + "brief": "User is locked out.", + "id": "locked_out", + "stability": "development", + "value": "locked_out" + }, + { + "brief": "User is not allowed to sign in.", + "id": "not_allowed", + "stability": "development", + "value": "not_allowed" + }, + { + "brief": "User requires two factory authentication to sign in.", + "id": "requires_two_factor", + "stability": "development", + "value": "requires_two_factor" + }, + { + "brief": "Sign in failed.", + "id": "failure", + "stability": "development", + "value": "failure" + } + ] + } + } + ], + "brief": "The total number of check password attempts. Checks that the account is in a state that can log in and that the password is valid using the UserManager.CheckPasswordAsync method.", + "id": "metric.aspnetcore.identity.sign_in.check_password_attempts", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.identity.sign_in.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.sign_in.check_password_attempts", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{attempt}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "A flag indicating whether the sign in is persistent.", + "name": "aspnetcore.sign_in.is_persistent", + "requirement_level": { + "conditionally_required": "if no exception was thrown." + }, + "stability": "development", + "type": "boolean" + } + ], + "brief": "The total number of calls to sign in user principals.", + "id": "metric.aspnetcore.identity.sign_in.sign_ins", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.sign_in.is_persistent": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.sign_in.sign_ins", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{sign_in}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The full name of the identity user type.", + "examples": [ + "Contoso.ContosoUser" + ], + "name": "aspnetcore.identity.user_type", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The identifier that names a particular authentication handler.", + "examples": [ + "Cookies", + "Bearer", + "Identity.Application" + ], + "name": "aspnetcore.authentication.scheme", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "The total number of calls to sign out user principals.", + "id": "metric.aspnetcore.identity.sign_in.sign_outs", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.identity.user_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.identity.sign_in.sign_outs", + "note": "Meter name: `Microsoft.AspNetCore.Identity`; Added in: ASP.NET Core 10.0\n", + "stability": "development", + "type": "metric", + "unit": "{sign_out}" + }, + { + "attributes": [ + { + "brief": "The [version of the CloudEvents specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) which the event uses.\n", + "examples": "1.0", + "name": "cloudevents.event_spec_version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) contains a value describing the type of event related to the originating occurrence.\n", + "examples": [ + "com.github.pull_request.opened", + "com.example.object.deleted.v2" + ], + "name": "cloudevents.event_type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) of the event in the context of the event producer (identified by source).\n", + "examples": "mynewfile.jpg", + "name": "cloudevents.event_subject", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) uniquely identifies the event.\n", + "examples": [ + "123e4567-e89b-12d3-a456-426614174000", + "0001" + ], + "name": "cloudevents.event_id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) identifies the context in which an event happened.\n", + "examples": [ + "https://github.com/cloudevents", + "/cloudevents/spec/pull/123", + "my-service" + ], + "name": "cloudevents.event_source", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for CloudEvents. CloudEvents is a specification on how to define event data in a standard way. These attributes can be attached to spans when performing operations with CloudEvents, regardless of the protocol being used.\n", + "id": "cloudevents", + "lineage": { + "attributes": { + "cloudevents.event_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cloudevents" + }, + "cloudevents.event_source": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cloudevents" + }, + "cloudevents.event_spec_version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cloudevents" + }, + "cloudevents.event_subject": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cloudevents" + }, + "cloudevents.event_type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cloudevents" + } + }, + "provenance": { + "path": "/home/weaver/source/cloudevents/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `server.address`, `server.port` attributes instead.", + "deprecated": { + "note": "Replaced by `server.address` and `server.port`.\n", + "reason": "uncategorized" + }, + "examples": "Server=(localdb)\\v11.0;Integrated Security=true;", + "name": "db.connection_string", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Removed, no replacement at this time.", + "deprecated": { + "note": "Removed, no replacement at this time.\n", + "reason": "obsoleted" + }, + "examples": [ + "org.postgresql.Driver", + "com.microsoft.sqlserver.jdbc.SQLServerDriver" + ], + "name": "db.jdbc.driver_classname", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.operation.name` instead.", + "deprecated": { + "note": "Replaced by `db.operation.name`.", + "reason": "renamed", + "renamed_to": "db.operation.name" + }, + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, no replacement at this time.", + "deprecated": { + "note": "Removed, no replacement at this time.", + "reason": "obsoleted" + }, + "examples": [ + "readonly_user", + "reporting_user" + ], + "name": "db.user", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The database statement being executed.", + "deprecated": { + "note": "Replaced by `db.query.text`.", + "reason": "renamed", + "renamed_to": "db.query.text" + }, + "examples": [ + "SELECT * FROM wuser_table", + "SET mykey \"WuValue\"" + ], + "name": "db.statement", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.collection.name` instead.", + "deprecated": { + "note": "Replaced by `db.collection.name`.", + "reason": "renamed", + "renamed_to": "db.collection.name" + }, + "examples": "mytable", + "name": "db.cassandra.table", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.collection.name` instead.", + "deprecated": { + "note": "Replaced by `db.collection.name`.", + "reason": "renamed", + "renamed_to": "db.collection.name" + }, + "examples": "mytable", + "name": "db.cosmosdb.container", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.collection.name` instead.", + "deprecated": { + "note": "Replaced by `db.collection.name`.", + "reason": "renamed", + "renamed_to": "db.collection.name" + }, + "examples": "mytable", + "name": "db.mongodb.collection", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.collection.name` instead.", + "deprecated": { + "note": "Replaced by `db.collection.name`, but only if not extracting the value from `db.query.text`.", + "reason": "uncategorized" + }, + "examples": "mytable", + "name": "db.sql.table", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.namespace` instead.", + "deprecated": { + "note": "Uncategorized.", + "reason": "uncategorized" + }, + "examples": [ + 0, + 1, + 15 + ], + "name": "db.redis.database_index", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `db.namespace` instead.", + "deprecated": { + "note": "Replaced by `db.namespace`.", + "reason": "renamed", + "renamed_to": "db.namespace" + }, + "examples": [ + "customers", + "main" + ], + "name": "db.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, SQL Server instance is now populated as a part of `db.namespace` attribute.", + "deprecated": { + "note": "Removed, no replacement at this time.", + "reason": "obsoleted" + }, + "examples": "MSSQLSERVER", + "name": "db.mssql.instance_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, no general replacement at this time. For Elasticsearch, use `db.elasticsearch.node.name` instead.", + "deprecated": { + "note": "Removed, no general replacement at this time. For Elasticsearch, use `db.elasticsearch.node.name` instead.\n", + "reason": "obsoleted" + }, + "examples": "mysql-e26b99z.example.com", + "name": "db.instance.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.namespace` instead.\n", + "deprecated": { + "note": "Replaced by `db.namespace`.", + "reason": "renamed", + "renamed_to": "db.namespace" + }, + "examples": [ + "e9106fc68e3044f0b1475b04bf4ffd5f" + ], + "name": "db.elasticsearch.cluster.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.response.status_code` instead.", + "deprecated": { + "note": "Use `db.response.status_code` instead.", + "reason": "uncategorized" + }, + "examples": [ + 200, + 201 + ], + "name": "db.cosmosdb.status_code", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, no replacement at this time.", + "deprecated": { + "note": "Removed, no replacement at this time.\n", + "reason": "obsoleted" + }, + "name": "db.cosmosdb.operation_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "batch", + "stability": "development", + "value": "batch" + }, + { + "id": "create", + "stability": "development", + "value": "create" + }, + { + "id": "delete", + "stability": "development", + "value": "delete" + }, + { + "id": "execute", + "stability": "development", + "value": "execute" + }, + { + "id": "execute_javascript", + "stability": "development", + "value": "execute_javascript" + }, + { + "id": "invalid", + "stability": "development", + "value": "invalid" + }, + { + "id": "head", + "stability": "development", + "value": "head" + }, + { + "id": "head_feed", + "stability": "development", + "value": "head_feed" + }, + { + "id": "patch", + "stability": "development", + "value": "patch" + }, + { + "id": "query", + "stability": "development", + "value": "query" + }, + { + "id": "query_plan", + "stability": "development", + "value": "query_plan" + }, + { + "id": "read", + "stability": "development", + "value": "read" + }, + { + "id": "read_feed", + "stability": "development", + "value": "read_feed" + }, + { + "id": "replace", + "stability": "development", + "value": "replace" + }, + { + "id": "upsert", + "stability": "development", + "value": "upsert" + } + ] + } + }, + { + "brief": "Deprecated, use `cassandra.coordinator.dc` instead.", + "deprecated": { + "note": "Replaced by `cassandra.coordinator.dc`.", + "reason": "renamed", + "renamed_to": "cassandra.coordinator.dc" + }, + "examples": "us-west-2", + "name": "db.cassandra.coordinator.dc", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `cassandra.coordinator.id` instead.", + "deprecated": { + "note": "Replaced by `cassandra.coordinator.id`.", + "reason": "renamed", + "renamed_to": "cassandra.coordinator.id" + }, + "examples": "be13faa2-8574-4d71-926d-27f16cf8a7af", + "name": "db.cassandra.coordinator.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `cassandra.consistency.level` instead.", + "deprecated": { + "note": "Replaced by `cassandra.consistency.level`.", + "reason": "renamed", + "renamed_to": "cassandra.consistency.level" + }, + "name": "db.cassandra.consistency_level", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "all", + "stability": "development", + "value": "all" + }, + { + "id": "each_quorum", + "stability": "development", + "value": "each_quorum" + }, + { + "id": "quorum", + "stability": "development", + "value": "quorum" + }, + { + "id": "local_quorum", + "stability": "development", + "value": "local_quorum" + }, + { + "id": "one", + "stability": "development", + "value": "one" + }, + { + "id": "two", + "stability": "development", + "value": "two" + }, + { + "id": "three", + "stability": "development", + "value": "three" + }, + { + "id": "local_one", + "stability": "development", + "value": "local_one" + }, + { + "id": "any", + "stability": "development", + "value": "any" + }, + { + "id": "serial", + "stability": "development", + "value": "serial" + }, + { + "id": "local_serial", + "stability": "development", + "value": "local_serial" + } + ] + } + }, + { + "brief": "Deprecated, use `cassandra.query.idempotent` instead.", + "deprecated": { + "note": "Replaced by `cassandra.query.idempotent`.", + "reason": "renamed", + "renamed_to": "cassandra.query.idempotent" + }, + "name": "db.cassandra.idempotence", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Deprecated, use `cassandra.page.size` instead.", + "deprecated": { + "note": "Replaced by `cassandra.page.size`.", + "reason": "renamed", + "renamed_to": "cassandra.page.size" + }, + "examples": [ + 5000 + ], + "name": "db.cassandra.page_size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `cassandra.speculative_execution.count` instead.", + "deprecated": { + "note": "Replaced by `cassandra.speculative_execution.count`.", + "reason": "renamed", + "renamed_to": "cassandra.speculative_execution.count" + }, + "examples": [ + 0, + 2 + ], + "name": "db.cassandra.speculative_execution_count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `azure.client.id` instead.", + "deprecated": { + "note": "Replaced by `azure.client.id`.", + "reason": "renamed", + "renamed_to": "azure.client.id" + }, + "examples": "3ba4827d-4422-483f-b59f-85b74211c11d", + "name": "db.cosmosdb.client_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `azure.cosmosdb.connection.mode` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.connection.mode`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.connection.mode" + }, + "name": "db.cosmosdb.connection_mode", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Gateway (HTTP) connection.", + "id": "gateway", + "stability": "development", + "value": "gateway" + }, + { + "brief": "Direct connection.", + "id": "direct", + "stability": "development", + "value": "direct" + } + ] + } + }, + { + "brief": "Deprecated, use `azure.cosmosdb.operation.request_charge` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.operation.request_charge`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.operation.request_charge" + }, + "examples": [ + 46.18, + 1.0 + ], + "name": "db.cosmosdb.request_charge", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "Deprecated, use `azure.cosmosdb.request.body.size` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.request.body.size`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.request.body.size" + }, + "name": "db.cosmosdb.request_content_length", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `azure.cosmosdb.response.sub_status_code` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.response.sub_status_code`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.response.sub_status_code" + }, + "examples": [ + 1000, + 1002 + ], + "name": "db.cosmosdb.sub_status_code", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `cosmosdb.consistency.level` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.consistency.level`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.consistency.level" + }, + "examples": [ + "Eventual", + "ConsistentPrefix", + "BoundedStaleness", + "Strong", + "Session" + ], + "name": "db.cosmosdb.consistency_level", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "strong", + "stability": "development", + "value": "Strong" + }, + { + "id": "bounded_staleness", + "stability": "development", + "value": "BoundedStaleness" + }, + { + "id": "session", + "stability": "development", + "value": "Session" + }, + { + "id": "eventual", + "stability": "development", + "value": "Eventual" + }, + { + "id": "consistent_prefix", + "stability": "development", + "value": "ConsistentPrefix" + } + ] + } + }, + { + "brief": "Deprecated, use `azure.cosmosdb.operation.contacted_regions` instead.", + "deprecated": { + "note": "Replaced by `azure.cosmosdb.operation.contacted_regions`.", + "reason": "renamed", + "renamed_to": "azure.cosmosdb.operation.contacted_regions" + }, + "examples": [ + [ + "North Central US", + "Australia East", + "Australia Southeast" + ] + ], + "name": "db.cosmosdb.regions_contacted", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Deprecated, use `elasticsearch.node.name` instead.\n", + "deprecated": { + "note": "Replaced by `elasticsearch.node.name`.", + "reason": "renamed", + "renamed_to": "elasticsearch.node.name" + }, + "examples": [ + "instance-0000000001" + ], + "name": "db.elasticsearch.node.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.operation.parameter` instead.\n", + "deprecated": { + "note": "Replaced by `db.operation.parameter`.", + "reason": "renamed", + "renamed_to": "db.operation.parameter" + }, + "examples": [ + "test-index", + "123" + ], + "name": "db.elasticsearch.path_parts", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Deprecated, use `db.system.name` instead.", + "deprecated": { + "note": "Replaced by `db.system.name`.", + "reason": "renamed", + "renamed_to": "db.system.name" + }, + "name": "db.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Some other SQL database. Fallback only. See notes.", + "id": "other_sql", + "stability": "development", + "value": "other_sql" + }, + { + "brief": "Adabas (Adaptable Database System)", + "id": "adabas", + "stability": "development", + "value": "adabas" + }, + { + "brief": "Deprecated, use `intersystems_cache` instead.", + "deprecated": { + "note": "Replaced by `intersystems_cache`.", + "reason": "renamed", + "renamed_to": "intersystems_cache" + }, + "id": "cache", + "stability": "development", + "value": "cache" + }, + { + "brief": "InterSystems Caché", + "id": "intersystems_cache", + "stability": "development", + "value": "intersystems_cache" + }, + { + "brief": "Apache Cassandra", + "id": "cassandra", + "stability": "development", + "value": "cassandra" + }, + { + "brief": "ClickHouse", + "id": "clickhouse", + "stability": "development", + "value": "clickhouse" + }, + { + "brief": "Deprecated, use `other_sql` instead.", + "deprecated": { + "note": "Replaced by `other_sql`.", + "reason": "renamed", + "renamed_to": "other_sql" + }, + "id": "cloudscape", + "stability": "development", + "value": "cloudscape" + }, + { + "brief": "CockroachDB", + "id": "cockroachdb", + "stability": "development", + "value": "cockroachdb" + }, + { + "brief": "Deprecated, no replacement at this time.", + "deprecated": { + "note": "Obsoleted.", + "reason": "obsoleted" + }, + "id": "coldfusion", + "stability": "development", + "value": "coldfusion" + }, + { + "brief": "Microsoft Azure Cosmos DB", + "id": "cosmosdb", + "stability": "development", + "value": "cosmosdb" + }, + { + "brief": "Couchbase", + "id": "couchbase", + "stability": "development", + "value": "couchbase" + }, + { + "brief": "CouchDB", + "id": "couchdb", + "stability": "development", + "value": "couchdb" + }, + { + "brief": "IBM Db2", + "id": "db2", + "stability": "development", + "value": "db2" + }, + { + "brief": "Apache Derby", + "id": "derby", + "stability": "development", + "value": "derby" + }, + { + "brief": "Amazon DynamoDB", + "id": "dynamodb", + "stability": "development", + "value": "dynamodb" + }, + { + "brief": "EnterpriseDB", + "id": "edb", + "stability": "development", + "value": "edb" + }, + { + "brief": "Elasticsearch", + "id": "elasticsearch", + "stability": "development", + "value": "elasticsearch" + }, + { + "brief": "FileMaker", + "id": "filemaker", + "stability": "development", + "value": "filemaker" + }, + { + "brief": "Firebird", + "id": "firebird", + "stability": "development", + "value": "firebird" + }, + { + "brief": "Deprecated, use `other_sql` instead.", + "deprecated": { + "note": "Replaced by `other_sql`.", + "reason": "renamed", + "renamed_to": "other_sql" + }, + "id": "firstsql", + "stability": "development", + "value": "firstsql" + }, + { + "brief": "Apache Geode", + "id": "geode", + "stability": "development", + "value": "geode" + }, + { + "brief": "H2", + "id": "h2", + "stability": "development", + "value": "h2" + }, + { + "brief": "SAP HANA", + "id": "hanadb", + "stability": "development", + "value": "hanadb" + }, + { + "brief": "Apache HBase", + "id": "hbase", + "stability": "development", + "value": "hbase" + }, + { + "brief": "Apache Hive", + "id": "hive", + "stability": "development", + "value": "hive" + }, + { + "brief": "HyperSQL DataBase", + "id": "hsqldb", + "stability": "development", + "value": "hsqldb" + }, + { + "brief": "InfluxDB", + "id": "influxdb", + "stability": "development", + "value": "influxdb" + }, + { + "brief": "Informix", + "id": "informix", + "stability": "development", + "value": "informix" + }, + { + "brief": "Ingres", + "id": "ingres", + "stability": "development", + "value": "ingres" + }, + { + "brief": "InstantDB", + "id": "instantdb", + "stability": "development", + "value": "instantdb" + }, + { + "brief": "InterBase", + "id": "interbase", + "stability": "development", + "value": "interbase" + }, + { + "brief": "MariaDB", + "id": "mariadb", + "stability": "development", + "value": "mariadb" + }, + { + "brief": "SAP MaxDB", + "id": "maxdb", + "stability": "development", + "value": "maxdb" + }, + { + "brief": "Memcached", + "id": "memcached", + "stability": "development", + "value": "memcached" + }, + { + "brief": "MongoDB", + "id": "mongodb", + "stability": "development", + "value": "mongodb" + }, + { + "brief": "Microsoft SQL Server", + "id": "mssql", + "stability": "development", + "value": "mssql" + }, + { + "brief": "Deprecated, Microsoft SQL Server Compact is discontinued.", + "deprecated": { + "note": "Replaced by `other_sql`.", + "reason": "renamed", + "renamed_to": "other_sql" + }, + "id": "mssqlcompact", + "stability": "development", + "value": "mssqlcompact" + }, + { + "brief": "MySQL", + "id": "mysql", + "stability": "development", + "value": "mysql" + }, + { + "brief": "Neo4j", + "id": "neo4j", + "stability": "development", + "value": "neo4j" + }, + { + "brief": "Netezza", + "id": "netezza", + "stability": "development", + "value": "netezza" + }, + { + "brief": "OpenSearch", + "id": "opensearch", + "stability": "development", + "value": "opensearch" + }, + { + "brief": "Oracle Database", + "id": "oracle", + "stability": "development", + "value": "oracle" + }, + { + "brief": "Pervasive PSQL", + "id": "pervasive", + "stability": "development", + "value": "pervasive" + }, + { + "brief": "PointBase", + "id": "pointbase", + "stability": "development", + "value": "pointbase" + }, + { + "brief": "PostgreSQL", + "id": "postgresql", + "stability": "development", + "value": "postgresql" + }, + { + "brief": "Progress Database", + "id": "progress", + "stability": "development", + "value": "progress" + }, + { + "brief": "Redis", + "id": "redis", + "stability": "development", + "value": "redis" + }, + { + "brief": "Amazon Redshift", + "id": "redshift", + "stability": "development", + "value": "redshift" + }, + { + "brief": "Cloud Spanner", + "id": "spanner", + "stability": "development", + "value": "spanner" + }, + { + "brief": "SQLite", + "id": "sqlite", + "stability": "development", + "value": "sqlite" + }, + { + "brief": "Sybase", + "id": "sybase", + "stability": "development", + "value": "sybase" + }, + { + "brief": "Teradata", + "id": "teradata", + "stability": "development", + "value": "teradata" + }, + { + "brief": "Trino", + "id": "trino", + "stability": "development", + "value": "trino" + }, + { + "brief": "Vertica", + "id": "vertica", + "stability": "development", + "value": "vertica" + } + ] + } + } + ], + "brief": "Describes deprecated database attributes.\n", + "display_name": "Deprecated Database Attributes", + "id": "registry.db.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/database/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `db.client.connection.state` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.state`.", + "reason": "renamed", + "renamed_to": "db.client.connection.state" + }, + "examples": [ + "idle" + ], + "name": "state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "id": "used", + "stability": "development", + "value": "used" + } + ] + } + }, + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "pool.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `db.client.connection.state` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.state`.", + "reason": "renamed", + "renamed_to": "db.client.connection.state" + }, + "examples": [ + "idle" + ], + "name": "db.client.connections.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "idle", + "stability": "development", + "value": "idle" + }, + { + "id": "used", + "stability": "development", + "value": "used" + } + ] + } + }, + { + "brief": "Deprecated, use `db.client.connection.pool.name` instead.", + "deprecated": { + "note": "Replaced by `db.client.connection.pool.name`.", + "reason": "renamed", + "renamed_to": "db.client.connection.pool.name" + }, + "examples": [ + "myDataSource" + ], + "name": "db.client.connections.pool.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated db metrics attributes.\n", + "display_name": "Deprecated Database Metrics", + "id": "registry.db.metrics.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/database/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The exception message.", + "examples": [ + "Division by zero", + "Can\u0027t convert \u0027int\u0027 object to str implicitly" + ], + "name": "exception.message", + "requirement_level": "recommended", + "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)\n", + "name": "exception.stacktrace", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "This document defines the shared attributes used to report a single exception associated with a span or log.\n", + "display_name": "Exception Attributes", + "id": "registry.exception", + "lineage": { + "provenance": { + "path": "/home/weaver/source/exceptions/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `gen_ai.provider.name` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.provider.name`.", + "reason": "renamed", + "renamed_to": "gen_ai.provider.name" + }, + "name": "gen_ai.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "OpenAI", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "Vertex AI", + "id": "gcp.vertex_ai", + "note": "This refers to the \u0027aiplatform.googleapis.com\u0027 endpoint. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "Gemini", + "id": "gcp.gemini", + "note": "This refers to the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "Vertex AI", + "deprecated": { + "note": "Replaced by `gcp.vertex_ai`.", + "reason": "renamed", + "renamed_to": "gcp.vertex_ai" + }, + "id": "vertex_ai", + "stability": "development", + "value": "vertex_ai" + }, + { + "brief": "Gemini", + "deprecated": { + "note": "Replaced by `gcp.gemini`.", + "reason": "renamed", + "renamed_to": "gcp.gemini" + }, + "id": "gemini", + "stability": "development", + "value": "gemini" + }, + { + "brief": "Anthropic", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "Cohere", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "deprecated": { + "note": "Replaced by `azure.ai.inference`.", + "reason": "renamed", + "renamed_to": "azure.ai.inference" + }, + "id": "az.ai.inference", + "stability": "development", + "value": "az.ai.inference" + }, + { + "brief": "Azure OpenAI", + "deprecated": { + "note": "Replaced by `azure.ai.openai`.", + "reason": "renamed", + "renamed_to": "azure.ai.openai" + }, + "id": "az.ai.openai", + "stability": "development", + "value": "az.ai.openai" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "Azure OpenAI", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "IBM Watsonx AI", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "AWS Bedrock", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "Perplexity", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "xAI", + "id": "xai", + "stability": "development", + "value": "xai" + }, + { + "brief": "DeepSeek", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "Groq", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "Mistral AI", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "Describes common Gen AI event attributes.\n", + "id": "gen_ai.deprecated.event.attributes", + "lineage": { + "attributes": { + "gen_ai.system": { + "inherited_fields": [ + "brief", + "deprecated", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.gen_ai.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/deprecated/events-deprecated.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `gen_ai.provider.name` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.provider.name`.", + "reason": "renamed", + "renamed_to": "gen_ai.provider.name" + }, + "name": "gen_ai.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "OpenAI", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "Vertex AI", + "id": "gcp.vertex_ai", + "note": "This refers to the \u0027aiplatform.googleapis.com\u0027 endpoint. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "Gemini", + "id": "gcp.gemini", + "note": "This refers to the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "Vertex AI", + "deprecated": { + "note": "Replaced by `gcp.vertex_ai`.", + "reason": "renamed", + "renamed_to": "gcp.vertex_ai" + }, + "id": "vertex_ai", + "stability": "development", + "value": "vertex_ai" + }, + { + "brief": "Gemini", + "deprecated": { + "note": "Replaced by `gcp.gemini`.", + "reason": "renamed", + "renamed_to": "gcp.gemini" + }, + "id": "gemini", + "stability": "development", + "value": "gemini" + }, + { + "brief": "Anthropic", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "Cohere", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "deprecated": { + "note": "Replaced by `azure.ai.inference`.", + "reason": "renamed", + "renamed_to": "azure.ai.inference" + }, + "id": "az.ai.inference", + "stability": "development", + "value": "az.ai.inference" + }, + { + "brief": "Azure OpenAI", + "deprecated": { + "note": "Replaced by `azure.ai.openai`.", + "reason": "renamed", + "renamed_to": "azure.ai.openai" + }, + "id": "az.ai.openai", + "stability": "development", + "value": "az.ai.openai" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "Azure OpenAI", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "IBM Watsonx AI", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "AWS Bedrock", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "Perplexity", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "xAI", + "id": "xai", + "stability": "development", + "value": "xai" + }, + { + "brief": "DeepSeek", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "Groq", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "Mistral AI", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "body": { + "fields": [ + { + "brief": "The contents of the system message.\n", + "examples": [ + "You\u0027re a helpful bot" + ], + "id": "content", + "requirement_level": "opt_in", + "stability": "development", + "type": "undefined" + }, + { + "brief": "The actual role of the message author as passed in the message.\n", + "examples": [ + "system", + "instruction" + ], + "id": "role", + "requirement_level": { + "conditionally_required": "if available and not equal to `system`." + }, + "stability": "development", + "type": "string" + } + ], + "id": "gen_ai.system.message", + "requirement_level": "opt_in", + "stability": "development", + "type": "map" + }, + "brief": "This event describes the system instructions passed to the GenAI model.\n", + "deprecated": { + "note": "Chat history is reported on `gen_ai.system_instructions` attribute on spans or `gen_ai.client.inference.operation.details` event.\n", + "reason": "uncategorized" + }, + "id": "event.gen_ai.system.message", + "lineage": { + "attributes": { + "gen_ai.system": { + "inherited_fields": [ + "brief", + "deprecated", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.gen_ai.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/deprecated/events-deprecated.yaml", + "registry_id": "main" + } + }, + "name": "gen_ai.system.message", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `gen_ai.provider.name` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.provider.name`.", + "reason": "renamed", + "renamed_to": "gen_ai.provider.name" + }, + "name": "gen_ai.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "OpenAI", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "Vertex AI", + "id": "gcp.vertex_ai", + "note": "This refers to the \u0027aiplatform.googleapis.com\u0027 endpoint. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "Gemini", + "id": "gcp.gemini", + "note": "This refers to the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "Vertex AI", + "deprecated": { + "note": "Replaced by `gcp.vertex_ai`.", + "reason": "renamed", + "renamed_to": "gcp.vertex_ai" + }, + "id": "vertex_ai", + "stability": "development", + "value": "vertex_ai" + }, + { + "brief": "Gemini", + "deprecated": { + "note": "Replaced by `gcp.gemini`.", + "reason": "renamed", + "renamed_to": "gcp.gemini" + }, + "id": "gemini", + "stability": "development", + "value": "gemini" + }, + { + "brief": "Anthropic", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "Cohere", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "deprecated": { + "note": "Replaced by `azure.ai.inference`.", + "reason": "renamed", + "renamed_to": "azure.ai.inference" + }, + "id": "az.ai.inference", + "stability": "development", + "value": "az.ai.inference" + }, + { + "brief": "Azure OpenAI", + "deprecated": { + "note": "Replaced by `azure.ai.openai`.", + "reason": "renamed", + "renamed_to": "azure.ai.openai" + }, + "id": "az.ai.openai", + "stability": "development", + "value": "az.ai.openai" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "Azure OpenAI", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "IBM Watsonx AI", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "AWS Bedrock", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "Perplexity", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "xAI", + "id": "xai", + "stability": "development", + "value": "xai" + }, + { + "brief": "DeepSeek", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "Groq", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "Mistral AI", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "body": { + "fields": [ + { + "brief": "The contents of the user message.\n", + "examples": [ + "What\u0027s the weather in Paris?" + ], + "id": "content", + "requirement_level": "opt_in", + "stability": "development", + "type": "undefined" + }, + { + "brief": "The actual role of the message author as passed in the message.\n", + "examples": [ + "user", + "customer" + ], + "id": "role", + "requirement_level": { + "conditionally_required": "if available and not equal to `user`." + }, + "stability": "development", + "type": "string" + } + ], + "id": "gen_ai.user.message", + "requirement_level": "opt_in", + "stability": "development", + "type": "map" + }, + "brief": "This event describes the user message passed to the GenAI model.\n", + "deprecated": { + "note": "Chat history is reported on `gen_ai.input.messages` attribute on spans or `gen_ai.client.inference.operation.details` event.\n", + "reason": "uncategorized" + }, + "id": "event.gen_ai.user.message", + "lineage": { + "attributes": { + "gen_ai.system": { + "inherited_fields": [ + "brief", + "deprecated", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.gen_ai.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/deprecated/events-deprecated.yaml", + "registry_id": "main" + } + }, + "name": "gen_ai.user.message", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `gen_ai.provider.name` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.provider.name`.", + "reason": "renamed", + "renamed_to": "gen_ai.provider.name" + }, + "name": "gen_ai.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "OpenAI", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "Vertex AI", + "id": "gcp.vertex_ai", + "note": "This refers to the \u0027aiplatform.googleapis.com\u0027 endpoint. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "Gemini", + "id": "gcp.gemini", + "note": "This refers to the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "Vertex AI", + "deprecated": { + "note": "Replaced by `gcp.vertex_ai`.", + "reason": "renamed", + "renamed_to": "gcp.vertex_ai" + }, + "id": "vertex_ai", + "stability": "development", + "value": "vertex_ai" + }, + { + "brief": "Gemini", + "deprecated": { + "note": "Replaced by `gcp.gemini`.", + "reason": "renamed", + "renamed_to": "gcp.gemini" + }, + "id": "gemini", + "stability": "development", + "value": "gemini" + }, + { + "brief": "Anthropic", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "Cohere", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "deprecated": { + "note": "Replaced by `azure.ai.inference`.", + "reason": "renamed", + "renamed_to": "azure.ai.inference" + }, + "id": "az.ai.inference", + "stability": "development", + "value": "az.ai.inference" + }, + { + "brief": "Azure OpenAI", + "deprecated": { + "note": "Replaced by `azure.ai.openai`.", + "reason": "renamed", + "renamed_to": "azure.ai.openai" + }, + "id": "az.ai.openai", + "stability": "development", + "value": "az.ai.openai" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "Azure OpenAI", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "IBM Watsonx AI", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "AWS Bedrock", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "Perplexity", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "xAI", + "id": "xai", + "stability": "development", + "value": "xai" + }, + { + "brief": "DeepSeek", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "Groq", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "Mistral AI", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "body": { + "fields": [ + { + "brief": "The contents of the tool message.\n", + "examples": [ + "The weather in Paris is rainy and overcast, with temperatures around 57°F" + ], + "id": "content", + "requirement_level": "opt_in", + "stability": "development", + "type": "undefined" + }, + { + "brief": "The actual role of the message author as passed in the message.\n", + "examples": [ + "assistant", + "bot" + ], + "id": "role", + "requirement_level": { + "conditionally_required": "if available and not equal to `assistant`." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "The tool calls generated by the model, such as function calls.\n", + "fields": [ + { + "brief": "The id of the tool call.\n", + "examples": [ + "call_mszuSIzqtI65i1wAUOE8w5H4" + ], + "id": "id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the tool.\n", + "examples": [ + "function" + ], + "id": "type", + "members": [ + { + "brief": "Function", + "id": "function", + "stability": "development", + "value": "function" + } + ], + "requirement_level": "required", + "stability": "development", + "type": "enum" + }, + { + "brief": "The function call.\n", + "fields": [ + { + "brief": "The name of the function.\n", + "examples": [ + "get_weather" + ], + "id": "name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The arguments of the function as provided in the LLM response.\n", + "examples": [ + "{\\\"location\\\": \\\"Paris\\\"}" + ], + "id": "arguments", + "note": "Models usually return arguments as a JSON string. In this case, it\u0027s RECOMMENDED to provide arguments as is without attempting to deserialize them.\nSemantic conventions for individual systems MAY specify a different type for arguments field.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "undefined" + } + ], + "id": "function", + "requirement_level": "required", + "stability": "development", + "type": "map" + } + ], + "id": "tool_calls", + "requirement_level": { + "conditionally_required": "if available" + }, + "stability": "development", + "type": "map[]" + } + ], + "id": "gen_ai.assistant.message", + "requirement_level": "opt_in", + "stability": "development", + "type": "map" + }, + "brief": "This event describes the assistant message passed to GenAI system.\n", + "deprecated": { + "note": "Chat history is reported on `gen_ai.input.messages` attribute on spans or `gen_ai.client.inference.operation.details` event.\n", + "reason": "uncategorized" + }, + "id": "event.gen_ai.assistant.message", + "lineage": { + "attributes": { + "gen_ai.system": { + "inherited_fields": [ + "brief", + "deprecated", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.gen_ai.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/deprecated/events-deprecated.yaml", + "registry_id": "main" + } + }, + "name": "gen_ai.assistant.message", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `gen_ai.provider.name` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.provider.name`.", + "reason": "renamed", + "renamed_to": "gen_ai.provider.name" + }, + "name": "gen_ai.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "OpenAI", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "Vertex AI", + "id": "gcp.vertex_ai", + "note": "This refers to the \u0027aiplatform.googleapis.com\u0027 endpoint. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "Gemini", + "id": "gcp.gemini", + "note": "This refers to the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "Vertex AI", + "deprecated": { + "note": "Replaced by `gcp.vertex_ai`.", + "reason": "renamed", + "renamed_to": "gcp.vertex_ai" + }, + "id": "vertex_ai", + "stability": "development", + "value": "vertex_ai" + }, + { + "brief": "Gemini", + "deprecated": { + "note": "Replaced by `gcp.gemini`.", + "reason": "renamed", + "renamed_to": "gcp.gemini" + }, + "id": "gemini", + "stability": "development", + "value": "gemini" + }, + { + "brief": "Anthropic", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "Cohere", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "deprecated": { + "note": "Replaced by `azure.ai.inference`.", + "reason": "renamed", + "renamed_to": "azure.ai.inference" + }, + "id": "az.ai.inference", + "stability": "development", + "value": "az.ai.inference" + }, + { + "brief": "Azure OpenAI", + "deprecated": { + "note": "Replaced by `azure.ai.openai`.", + "reason": "renamed", + "renamed_to": "azure.ai.openai" + }, + "id": "az.ai.openai", + "stability": "development", + "value": "az.ai.openai" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "Azure OpenAI", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "IBM Watsonx AI", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "AWS Bedrock", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "Perplexity", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "xAI", + "id": "xai", + "stability": "development", + "value": "xai" + }, + { + "brief": "DeepSeek", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "Groq", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "Mistral AI", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "body": { + "fields": [ + { + "brief": "The contents of the tool message.\n", + "examples": [ + "rainy, 57°F" + ], + "id": "content", + "requirement_level": "opt_in", + "stability": "development", + "type": "undefined" + }, + { + "brief": "The actual role of the message author as passed in the message.\n", + "examples": [ + "tool", + "function" + ], + "id": "role", + "requirement_level": { + "conditionally_required": "if available and not equal to `tool`." + }, + "stability": "development", + "type": "string" + }, + { + "brief": "Tool call id that this message is responding to.\n", + "examples": [ + "call_mszuSIzqtI65i1wAUOE8w5H4" + ], + "id": "id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "id": "gen_ai.tool.message", + "requirement_level": "opt_in", + "stability": "development", + "type": "map" + }, + "brief": "This event describes the response from a tool or function call passed to the GenAI model.\n", + "deprecated": { + "note": "Chat history is reported on `gen_ai.input.messages` attribute on spans or `gen_ai.client.inference.operation.details` event.\n", + "reason": "uncategorized" + }, + "id": "event.gen_ai.tool.message", + "lineage": { + "attributes": { + "gen_ai.system": { + "inherited_fields": [ + "brief", + "deprecated", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.gen_ai.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/deprecated/events-deprecated.yaml", + "registry_id": "main" + } + }, + "name": "gen_ai.tool.message", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `gen_ai.provider.name` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.provider.name`.", + "reason": "renamed", + "renamed_to": "gen_ai.provider.name" + }, + "name": "gen_ai.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "OpenAI", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "Vertex AI", + "id": "gcp.vertex_ai", + "note": "This refers to the \u0027aiplatform.googleapis.com\u0027 endpoint. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "Gemini", + "id": "gcp.gemini", + "note": "This refers to the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "Vertex AI", + "deprecated": { + "note": "Replaced by `gcp.vertex_ai`.", + "reason": "renamed", + "renamed_to": "gcp.vertex_ai" + }, + "id": "vertex_ai", + "stability": "development", + "value": "vertex_ai" + }, + { + "brief": "Gemini", + "deprecated": { + "note": "Replaced by `gcp.gemini`.", + "reason": "renamed", + "renamed_to": "gcp.gemini" + }, + "id": "gemini", + "stability": "development", + "value": "gemini" + }, + { + "brief": "Anthropic", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "Cohere", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "deprecated": { + "note": "Replaced by `azure.ai.inference`.", + "reason": "renamed", + "renamed_to": "azure.ai.inference" + }, + "id": "az.ai.inference", + "stability": "development", + "value": "az.ai.inference" + }, + { + "brief": "Azure OpenAI", + "deprecated": { + "note": "Replaced by `azure.ai.openai`.", + "reason": "renamed", + "renamed_to": "azure.ai.openai" + }, + "id": "az.ai.openai", + "stability": "development", + "value": "az.ai.openai" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "Azure OpenAI", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "IBM Watsonx AI", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "AWS Bedrock", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "Perplexity", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "xAI", + "id": "xai", + "stability": "development", + "value": "xai" + }, + { + "brief": "DeepSeek", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "Groq", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "Mistral AI", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "body": { + "fields": [ + { + "brief": "The index of the choice in the list of choices.\n", + "examples": [ + 0, + 1 + ], + "id": "index", + "requirement_level": "required", + "stability": "development", + "type": "int" + }, + { + "brief": "The reason the model stopped generating tokens.\n", + "id": "finish_reason", + "members": [ + { + "brief": "Stop", + "id": "stop", + "stability": "development", + "value": "stop" + }, + { + "brief": "Tool Calls", + "id": "tool_calls", + "stability": "development", + "value": "tool_calls" + }, + { + "brief": "Content Filter", + "id": "content_filter", + "stability": "development", + "value": "content_filter" + }, + { + "brief": "Length", + "id": "length", + "stability": "development", + "value": "length" + }, + { + "brief": "Error", + "id": "error", + "stability": "development", + "value": "error" + } + ], + "requirement_level": "required", + "stability": "development", + "type": "enum" + }, + { + "brief": "GenAI response message.\n", + "fields": [ + { + "brief": "The contents of the assistant message.\n", + "examples": [ + "The weather in Paris is rainy and overcast, with temperatures around 57°F" + ], + "id": "content", + "requirement_level": "opt_in", + "stability": "development", + "type": "undefined" + }, + { + "brief": "The actual role of the message author as passed in the message.\n", + "examples": [ + "assistant", + "bot" + ], + "id": "role", + "requirement_level": { + "conditionally_required": "if available and not equal to `assistant`." + }, + "stability": "development", + "type": "string" + } + ], + "id": "message", + "requirement_level": "recommended", + "stability": "development", + "type": "map" + }, + { + "brief": "The tool calls generated by the model, such as function calls.\n", + "fields": [ + { + "brief": "The id of the tool call.\n", + "examples": [ + "call_mszuSIzqtI65i1wAUOE8w5H4" + ], + "id": "id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of the tool.\n", + "id": "type", + "members": [ + { + "brief": "Function", + "id": "function", + "stability": "development", + "value": "function" + } + ], + "requirement_level": "required", + "stability": "development", + "type": "enum" + }, + { + "brief": "The function that the model called.\n", + "fields": [ + { + "brief": "The name of the function.\n", + "examples": [ + "get_weather" + ], + "id": "name", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The arguments of the function as provided in the LLM response.\n", + "examples": [ + "{\\\"location\\\": \\\"Paris\\\"}" + ], + "id": "arguments", + "note": "Models usually return arguments as a JSON string. In this case, it\u0027s RECOMMENDED to provide arguments as is without attempting to deserialize them.\nSemantic conventions for individual systems MAY specify a different type for arguments field.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "undefined" + } + ], + "id": "function", + "requirement_level": "required", + "stability": "development", + "type": "map" + } + ], + "id": "tool_calls", + "requirement_level": { + "conditionally_required": "if available" + }, + "stability": "development", + "type": "map[]" + } + ], + "id": "gen_ai.choice", + "note": "If GenAI model returns multiple choices, each choice SHOULD be recorded as an individual event. When response is streamed, instrumentations that report response events MUST reconstruct and report the full message and MUST NOT report individual chunks as events. If the request to GenAI model fails with an error before content is received, instrumentation SHOULD report an event with truncated content (if enabled). If `finish_reason` was not received, it MUST be set to `error`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "map" + }, + "brief": "This event describes the Gen AI response message.\n", + "deprecated": { + "note": "Chat history is reported on `gen_ai.output.messages` attribute on spans or `gen_ai.client.inference.operation.details` event.\n", + "reason": "uncategorized" + }, + "id": "event.gen_ai.choice", + "lineage": { + "attributes": { + "gen_ai.system": { + "inherited_fields": [ + "brief", + "deprecated", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.gen_ai.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/deprecated/events-deprecated.yaml", + "registry_id": "main" + } + }, + "name": "gen_ai.choice", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Describes HTTP attributes.", + "id": "attributes.http.common", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/http/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n", + "examples": [ + "/users/{id}", + "/users/:id", + "/users?id={id}" + ], + "name": "url.template", + "note": "The `url.template` MUST have low cardinality. It is not usually available on HTTP clients, but may be known by the application or specialized HTTP instrumentation.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "HTTP Client attributes", + "id": "attributes.http.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n", + "requirement_level": { + "conditionally_required": "If available and `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "HTTP Server attributes", + "id": "attributes.http.server", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Common kestrel attributes", + "id": "common.kestrel.attributes", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of connections that are currently active on the server.", + "id": "metric.kestrel.active_connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.active_connections", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "The full name of exception type.", + "examples": [ + "connection_reset", + "invalid_handshake" + ], + "name": "error.type", + "note": "Starting from .NET 9, Kestrel `kestrel.connection.duration` metric reports\nthe following errors types when a corresponding error occurs:\n\n| Value | Description | Stability |\n|---|---|---|\n| `aborted_by_app` | The HTTP/1.1 connection was aborted when app code aborted an HTTP request with `HttpContext.Abort()`. |\n| `app_shutdown_timeout` | The connection was aborted during app shutdown. During shutdown, the server stops accepting new connections and HTTP requests, and it is given time for active requests to complete. If the app shutdown timeout is exceeded, all remaining connections are aborted. |\n| `closed_critical_stream` | A critical control stream for an HTTP/3 connection was closed. |\n| `connection_reset` | The connection was reset while there were active HTTP/2 or HTTP/3 streams on the connection. |\n| `error_after_starting_response` | An error such as an unhandled application exception or invalid request body occurred after the response was started, causing an abort of the HTTP/1.1 connection. |\n| `error_reading_headers` | An error occurred when decoding HPACK headers in an HTTP/2 `HEADERS` frame. |\n| `error_writing_headers` | An error occurred when encoding HPACK headers in an HTTP/2 `HEADERS` frame. |\n| `flow_control_queue_size_exceeded` | The connection exceeded the outgoing flow control maximum queue size and was closed with `INTERNAL_ERROR`. This can be caused by an excessive number of HTTP/2 stream resets. For more information, see [Microsoft Security Advisory CVE-2023-44487](https://github.com/dotnet/runtime/issues/93303). |\n| `flow_control_window_exceeded` | The client sent more data than allowed by the current flow-control window. |\n| `frame_after_stream_close` | An HTTP/2 frame was received on a closed stream. |\n| `insufficient_tls_version` | The connection doesn\u0027t have TLS 1.2 or greater, as required by HTTP/2. |\n| `invalid_body_reader_state` | An error occurred when draining the request body, aborting the HTTP/1.1 connection. This could be caused by app code reading the request body and missing a call to `PipeReader.AdvanceTo` in a finally block. |\n| `invalid_data_padding` | An HTTP/2 `HEADER` or `DATA` frame has an invalid amount of padding. |\n| `invalid_frame_length` | An HTTP/2 frame was received with an invalid frame payload length. The frame could contain a payload that is not valid for the type, or a `DATA` frame payload does not match the length specified in the frame header. |\n| `invalid_handshake` | An invalid HTTP/2 handshake was received. |\n| `invalid_http_version` | The connection received an HTTP request with the wrong version. For example, a browser sends an HTTP/1.1 request to a plain-text HTTP/2 connection. |\n| `invalid_request_headers` | The HTTP request contains invalid headers. This error can occur in a number of scenarios: a header might not be allowed by the HTTP protocol, such as a pseudo-header in the `HEADERS` frame of an HTTP/2 request. A header could also have an invalid value, such as a non-integer `content-length`, or a header name or value might contain invalid characters. |\n| `invalid_request_line` | The first line of an HTTP/1.1 request was invalid, potentially due to invalid content or exceeding the allowed limit. Configured by `KestrelServerLimits.MaxRequestLineSize`. |\n| `invalid_settings` | The connection received an HTTP/2 or HTTP/3 `SETTINGS` frame with invalid settings. |\n| `invalid_stream_id` | An HTTP/2 stream with an invalid stream ID was received. |\n| `invalid_window_update_size` | The server received an HTTP/2 `WINDOW_UPDATE` frame with a zero increment, or an increment that caused a flow-control window to exceed the maximum size. |\n| `io_error` | An `IOException` occurred while reading or writing HTTP/2 or HTTP/3 connection data. |\n| `keep_alive_timeout` | There was no activity on the connection, and the keep-alive timeout configured by `KestrelServerLimits.KeepAliveTimeout` was exceeded. |\n| `max_concurrent_connections_exceeded` | The connection exceeded the maximum concurrent connection limit. Configured by `KestrelServerLimits.MaxConcurrentConnections`. |\n| `max_frame_length_exceeded` | The connection received an HTTP/2 frame that exceeded the size limit specified by `Http2Limits.MaxFrameSize`. |\n| `max_request_body_size_exceeded` | The HTTP request body exceeded the maximum request body size limit. Configured by `KestrelServerLimits.MaxRequestBodySize`. |\n| `max_request_header_count_exceeded` | The HTTP request headers exceeded the maximum count limit. Configured by `KestrelServerLimits.MaxRequestHeaderCount`. |\n| `max_request_headers_total_size_exceeded` | The HTTP request headers exceeded the maximum total size limit. Configured by `KestrelServerLimits.MaxRequestHeadersTotalSize`. |\n| `min_request_body_data_rate` | Reading the request body timed out due to data arriving too slowly. Configured by `KestrelServerLimits.MinRequestBodyDataRate`. |\n| `min_response_data_rate` | Writing the response timed out because the client did not read it at the specified minimum data rate. Configured by `KestrelServerLimits.MinResponseDataRate`. |\n| `missing_stream_end` | The connection received an HTTP/2 `HEADERS` frame for trailers without a stream end flag. |\n| `output_queue_size_exceeded` | The connection exceeded the output queue size and was closed with `INTERNAL_ERROR`. This can be caused by an excessive number of HTTP/2 stream resets. For more information, see [Microsoft Security Advisory CVE-2023-44487](https://github.com/dotnet/runtime/issues/93303). |\n| `request_headers_timeout` | Request headers timed out while waiting for headers to be received after the request started. Configured by `KestrelServerLimits.RequestHeadersTimeout`. |\n| `response_content_length_mismatch` | The HTTP response body sent data that didn\u0027t match the response\u0027s `content-length` header. |\n| `server_timeout` | The connection timed out with the `IConnectionTimeoutFeature`. |\n| `stream_creation_error` | The HTTP/3 connection received a stream that it wouldn\u0027t accept. For example, the client created duplicate control streams. |\n| `stream_reset_limit_exceeded` | The connection received an excessive number of HTTP/2 stream resets and was closed with `ENHANCE_YOUR_CALM`. For more information, see [Microsoft Security Advisory CVE-2023-44487](https://github.com/dotnet/runtime/issues/93303). |\n| `stream_self_dependency` | The connection received an HTTP/2 frame that caused a frame to depend on itself. |\n| `tls_handshake_failed` | An error occurred during the TLS handshake for a connection. Only reported for HTTP/1.1 and HTTP/2 connections. The TLS handshake for HTTP/3 is internal to QUIC transport. ![Development](https://img.shields.io/badge/-development-blue) |\n| `tls_not_supported` | A TLS handshake was received by an endpoint that isn\u0027t configured to support TLS. |\n| `unexpected_end_of_request_content` | The HTTP/1.1 request body ended before the data specified by the `content-length` header or chunked transfer encoding mechanism was received. |\n| `unexpected_frame` | An unexpected HTTP/2 or HTTP/3 frame type was received. The frame type is either unknown, unsupported, or invalid for the current stream state. |\n| `unknown_stream` | An HTTP/2 frame was received on an unknown stream. |\n| `write_canceled` | The cancellation of a response body write aborted the HTTP/1.1 connection. |\n\nIn other cases, `error.type` contains the fully qualified type name of the exception.\n", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "web_sockets" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Numeric part of the version parsed from the original string of the negotiated [SSL/TLS protocol version](https://docs.openssl.org/1.1.1/man3/SSL_get_version/#return-values)\n", + "examples": [ + "1.2", + "3" + ], + "name": "tls.protocol.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The duration of connections on the server.", + "id": "metric.kestrel.connection.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "tls.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.tls" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.connection.duration", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of connections rejected by the server.", + "id": "metric.kestrel.rejected_connections", + "instrument": "counter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.rejected_connections", + "note": "Connections are rejected when the currently active count exceeds the value configured with `MaxConcurrentConnections`.\nMeter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of connections that are currently queued and are waiting to start.", + "id": "metric.kestrel.queued_connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.queued_connections", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "web_sockets" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Number of HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are currently queued and are waiting to start.", + "id": "metric.kestrel.queued_requests", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.queued_requests", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of connections that are currently upgraded (WebSockets). .", + "id": "metric.kestrel.upgraded_connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.upgraded_connections", + "note": "The counter only tracks HTTP/1.1 connections.\n\nMeter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException", + "Contoso.MyException" + ], + "name": "error.type", + "note": "Captures the exception type when a TLS handshake fails.", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Numeric part of the version parsed from the original string of the negotiated [SSL/TLS protocol version](https://docs.openssl.org/1.1.1/man3/SSL_get_version/#return-values)\n", + "examples": [ + "1.2", + "3" + ], + "name": "tls.protocol.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The duration of TLS handshakes on the server.", + "id": "metric.kestrel.tls_handshake.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "tls.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.tls" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.tls_handshake.duration", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of TLS handshakes that are currently in progress on the server.", + "id": "metric.kestrel.active_tls_handshakes", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.active_tls_handshakes", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{handshake}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Event loop minimum delay.", + "id": "metric.nodejs.eventloop.delay.min", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nodejs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nodejs.eventloop.delay.min", + "note": "Value can be retrieved from value `histogram.min` of [`perf_hooks.monitorEventLoopDelay([options])`](https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Event loop maximum delay.", + "id": "metric.nodejs.eventloop.delay.max", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nodejs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nodejs.eventloop.delay.max", + "note": "Value can be retrieved from value `histogram.max` of [`perf_hooks.monitorEventLoopDelay([options])`](https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Event loop mean delay.", + "id": "metric.nodejs.eventloop.delay.mean", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nodejs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nodejs.eventloop.delay.mean", + "note": "Value can be retrieved from value `histogram.mean` of [`perf_hooks.monitorEventLoopDelay([options])`](https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Event loop standard deviation delay.", + "id": "metric.nodejs.eventloop.delay.stddev", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nodejs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nodejs.eventloop.delay.stddev", + "note": "Value can be retrieved from value `histogram.stddev` of [`perf_hooks.monitorEventLoopDelay([options])`](https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Event loop 50 percentile delay.", + "id": "metric.nodejs.eventloop.delay.p50", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nodejs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nodejs.eventloop.delay.p50", + "note": "Value can be retrieved from value `histogram.percentile(50)` of [`perf_hooks.monitorEventLoopDelay([options])`](https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Event loop 90 percentile delay.", + "id": "metric.nodejs.eventloop.delay.p90", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nodejs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nodejs.eventloop.delay.p90", + "note": "Value can be retrieved from value `histogram.percentile(90)` of [`perf_hooks.monitorEventLoopDelay([options])`](https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Event loop 99 percentile delay.", + "id": "metric.nodejs.eventloop.delay.p99", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nodejs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nodejs.eventloop.delay.p99", + "note": "Value can be retrieved from value `histogram.percentile(99)` of [`perf_hooks.monitorEventLoopDelay([options])`](https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Event loop utilization.", + "id": "metric.nodejs.eventloop.utilization", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nodejs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nodejs.eventloop.utilization", + "note": "The value range is [0.0, 1.0] and can be retrieved from [`performance.eventLoopUtilization([utilization1[, utilization2]])`](https://nodejs.org/api/perf_hooks.html#performanceeventlooputilizationutilization1-utilization2)\n", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The state of event loop time.", + "name": "nodejs.eventloop.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Active time.", + "id": "active", + "stability": "development", + "value": "active" + }, + { + "brief": "Idle time.", + "id": "idle", + "stability": "development", + "value": "idle" + } + ] + } + } + ], + "brief": "Cumulative duration of time the event loop has been in each state.", + "id": "metric.nodejs.eventloop.time", + "instrument": "counter", + "lineage": { + "attributes": { + "nodejs.eventloop.state": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.nodejs" + } + }, + "provenance": { + "path": "/home/weaver/source/nodejs/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "nodejs.eventloop.time", + "note": "Value can be retrieved from [`performance.eventLoopUtilization([utilization1[, utilization2]])`](https://nodejs.org/api/perf_hooks.html#performanceeventlooputilizationutilization1-utilization2)\n", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "attributes": [ + { + "brief": "Name of the code, either \"OK\" or \"ERROR\". MUST NOT be set if the status code is UNSET.", + "name": "otel.status_code", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The operation has been validated by an Application developer or Operator to have completed successfully.", + "id": "ok", + "stability": "stable", + "value": "OK" + }, + { + "brief": "The operation contains an error.", + "id": "error", + "stability": "stable", + "value": "ERROR" + } + ] + } + }, + { + "brief": "Description of the Status if it has a value, otherwise not set.", + "examples": [ + "resource not found" + ], + "name": "otel.status_description", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The result value of the sampler for this span", + "name": "otel.span.sampling_result", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The span is not sampled and not recording", + "id": "drop", + "stability": "development", + "value": "DROP" + }, + { + "brief": "The span is not sampled, but recording", + "id": "record_only", + "stability": "development", + "value": "RECORD_ONLY" + }, + { + "brief": "The span is sampled and recording", + "id": "record_and_sample", + "stability": "development", + "value": "RECORD_AND_SAMPLE" + } + ] + } + }, + { + "brief": "Determines whether the span has a parent span, and if so, [whether it is a remote parent](https://opentelemetry.io/docs/specs/otel/trace/api/#isremote)", + "name": "otel.span.parent.origin", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The span does not have a parent, it is a root span", + "id": "none", + "stability": "development", + "value": "none" + }, + { + "brief": "The span has a parent and the parent\u0027s span context [isRemote()](https://opentelemetry.io/docs/specs/otel/trace/api/#isremote) is false", + "id": "local", + "stability": "development", + "value": "local" + }, + { + "brief": "The span has a parent and the parent\u0027s span context [isRemote()](https://opentelemetry.io/docs/specs/otel/trace/api/#isremote) is true", + "id": "remote", + "stability": "development", + "value": "remote" + } + ] + } + } + ], + "brief": "Attributes reserved for OpenTelemetry", + "display_name": "OTel Attributes", + "id": "registry.otel", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the instrumentation scope - (`InstrumentationScope.Name` in OTLP).", + "examples": [ + "io.opentelemetry.contrib.mongodb" + ], + "name": "otel.scope.name", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The version of the instrumentation scope - (`InstrumentationScope.Version` in OTLP).", + "examples": [ + "1.0.0" + ], + "name": "otel.scope.version", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The schema URL of the instrumentation scope.", + "examples": [ + "https://opentelemetry.io/schemas/1.31.0" + ], + "name": "otel.scope.schema_url", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes used by non-OTLP exporters to represent OpenTelemetry Scope\u0027s concepts.", + "display_name": "OTel Scope Attributes", + "id": "registry.otel.scope", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "A name identifying the type of the OpenTelemetry component.\n", + "examples": [ + "batching_span_processor", + "com.example.MySpanExporter" + ], + "name": "otel.component.type", + "note": "If none of the standardized values apply, implementations SHOULD use the language-defined name of the type.\nE.g. for Java the fully qualified classname SHOULD be used in this case.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The builtin SDK batching span processor\n", + "id": "batching_span_processor", + "stability": "development", + "value": "batching_span_processor" + }, + { + "brief": "The builtin SDK simple span processor\n", + "id": "simple_span_processor", + "stability": "development", + "value": "simple_span_processor" + }, + { + "brief": "The builtin SDK batching log record processor\n", + "id": "batching_log_processor", + "stability": "development", + "value": "batching_log_processor" + }, + { + "brief": "The builtin SDK simple log record processor\n", + "id": "simple_log_processor", + "stability": "development", + "value": "simple_log_processor" + }, + { + "brief": "OTLP span exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_span_exporter", + "stability": "development", + "value": "otlp_grpc_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_span_exporter", + "stability": "development", + "value": "otlp_http_span_exporter" + }, + { + "brief": "OTLP span exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_span_exporter", + "stability": "development", + "value": "otlp_http_json_span_exporter" + }, + { + "brief": "Zipkin span exporter over HTTP\n", + "id": "zipkin_http_span_exporter", + "stability": "development", + "value": "zipkin_http_span_exporter" + }, + { + "brief": "OTLP log record exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_log_exporter", + "stability": "development", + "value": "otlp_grpc_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_log_exporter", + "stability": "development", + "value": "otlp_http_log_exporter" + }, + { + "brief": "OTLP log record exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_log_exporter", + "stability": "development", + "value": "otlp_http_json_log_exporter" + }, + { + "brief": "The builtin SDK periodically exporting metric reader\n", + "id": "periodic_metric_reader", + "stability": "development", + "value": "periodic_metric_reader" + }, + { + "brief": "OTLP metric exporter over gRPC with protobuf serialization\n", + "id": "otlp_grpc_metric_exporter", + "stability": "development", + "value": "otlp_grpc_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with protobuf serialization\n", + "id": "otlp_http_metric_exporter", + "stability": "development", + "value": "otlp_http_metric_exporter" + }, + { + "brief": "OTLP metric exporter over HTTP with JSON serialization\n", + "id": "otlp_http_json_metric_exporter", + "stability": "development", + "value": "otlp_http_json_metric_exporter" + }, + { + "brief": "Prometheus metric exporter over HTTP with the default text-based format\n", + "id": "prometheus_http_text_metric_exporter", + "stability": "development", + "value": "prometheus_http_text_metric_exporter" + } + ] + } + }, + { + "brief": "A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.\n", + "examples": [ + "otlp_grpc_span_exporter/0", + "custom-name" + ], + "name": "otel.component.name", + "note": "Implementations SHOULD ensure a low cardinality for this attribute, even across application or SDK restarts.\nE.g. implementations MUST NOT use UUIDs as values for this attribute.\n\nImplementations MAY achieve these goals by following a `\u003cotel.component.type\u003e/\u003cinstance-counter\u003e` pattern, e.g. `batching_span_processor/0`.\nHereby `otel.component.type` refers to the corresponding attribute value of the component.\n\nThe value of `instance-counter` MAY be automatically assigned by the component and uniqueness within the enclosing SDK instance MUST be guaranteed.\nFor example, `\u003cinstance-counter\u003e` MAY be implemented by using a monotonically increasing counter (starting with `0`), which is incremented every time an\ninstance of the given component type is started.\n\nWith this implementation, for example the first Batching Span Processor would have `batching_span_processor/0`\nas `otel.component.name`, the second one `batching_span_processor/1` and so on.\nThese values will therefore be reused in the case of an application restart.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes used for OpenTelemetry component self-monitoring", + "display_name": "OTel Component Attributes", + "id": "registry.otel.component", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Domain extracted from the `url.full`, such as \"opentelemetry.io\".\n", + "examples": [ + "www.foo.bar", + "opentelemetry.io", + "3.12.167.2", + "[1080:0:0:0:8:800:200C:417A]" + ], + "name": "url.domain", + "note": "In some cases a URL may refer to an IP and/or port directly, without a domain name. In this case, the IP address would go to the domain field. If the URL contains a [literal IPv6 address](https://www.rfc-editor.org/rfc/rfc2732#section-2) enclosed by `[` and `]`, the `[` and `]` characters should also be captured in the domain field.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The file extension extracted from the `url.full`, excluding the leading dot.\n", + "examples": [ + "png", + "gz" + ], + "name": "url.extension", + "note": "The file extension is only set if it exists, as not every url has a file extension. When the file name has multiple extensions `example.tar.gz`, only the last one should be captured `gz`, not `tar.gz`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component\n", + "examples": [ + "SemConv" + ], + "name": "url.fragment", + "requirement_level": "recommended", + "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\nis not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`.\nIn such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed).\n\nSensitive content provided in `url.full` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the\nvalue `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`https://www.example.com/path?color=blue\u0026sig=REDACTED`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Unmodified original URL as seen in the event source.\n", + "examples": [ + "https://www.foo.bar/search?q=OpenTelemetry#SemConv", + "search?q=OpenTelemetry" + ], + "name": "url.original", + "note": "In network monitoring, the observed URL may be a full URL, whereas in access logs, the URL is often just represented as a path. This field is meant to represent the URL as it was observed, complete or not.\n`url.original` might contain credentials passed via URL in form of `https://username:password@www.example.com/`. In such case password and username SHOULD NOT be redacted and attribute\u0027s value SHOULD remain the same.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\n", + "examples": [ + "/search" + ], + "name": "url.path", + "note": "Sensitive content provided in `url.path` SHOULD be scrubbed when instrumentations can identify it.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port extracted from the `url.full`\n", + "examples": [ + 443 + ], + "name": "url.port", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\n", + "examples": [ + "q=OpenTelemetry" + ], + "name": "url.query", + "note": "Sensitive content provided in `url.query` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the value `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`q=OpenTelemetry\u0026sig=REDACTED`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The highest registered url domain, stripped of the subdomain.\n", + "examples": [ + "example.com", + "foo.co.uk" + ], + "name": "url.registered_domain", + "note": "This value can be determined precisely with the [public suffix list](https://publicsuffix.org/). For example, the registered domain for `foo.example.com` is `example.com`. Trying to approximate this by simply taking the last two labels will not work well for TLDs such as `co.uk`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "https", + "ftp", + "telnet" + ], + "name": "url.scheme", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The subdomain portion of a fully qualified domain name includes all of the names except the host name under the registered_domain. In a partially qualified domain, or if the qualification level of the full name cannot be determined, subdomain contains all of the names below the registered domain.\n", + "examples": [ + "east", + "sub2.sub1" + ], + "name": "url.subdomain", + "note": "The subdomain portion of `www.east.mydomain.co.uk` is `east`. If the domain has multiple levels of subdomain, such as `sub2.sub1.example.com`, the subdomain field should contain `sub2.sub1`, with no trailing period.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2).\n", + "examples": [ + "/users/{id}", + "/users/:id", + "/users?id={id}" + ], + "name": "url.template", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com is `com`.\n", + "examples": [ + "com", + "co.uk" + ], + "name": "url.top_level_domain", + "note": "This value can be determined precisely with the [public suffix list](https://publicsuffix.org/).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes describing URL.", + "display_name": "URL Attributes", + "id": "registry.url", + "lineage": { + "provenance": { + "path": "/home/weaver/source/url/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The unique identifier of the service request. It\u0027s generated by the Azure service and returned with the response.", + "examples": [ + "00000000-0000-0000-0000-000000000000" + ], + "name": "azure.service.request.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [Fully Qualified Azure Resource ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) the log is emitted for.", + "examples": [ + "arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function", + "//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID", + "/subscriptions/\u003cSUBSCRIPTION_GUID\u003e/resourceGroups/\u003cRG\u003e/providers/Microsoft.Web/sites/\u003cFUNCAPP\u003e/functions/\u003cFUNC\u003e" + ], + "name": "cloud.resource_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "body": { + "fields": [ + { + "brief": "The Azure category of the log entry.", + "examples": [ + "AuditEvent", + "GatewayLogs", + "ApplicationGatewayAccessLog" + ], + "id": "category", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The correlation ID of the log entry.", + "examples": [ + "607964b6-41a5-4e24-a5db-db7aab3b9b34" + ], + "id": "correlation.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The duration of the operations in milliseconds.", + "examples": [ + 1000 + ], + "id": "duration", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "\"A JSON blob that describes the identity of the user or application that performed the operation.\"\n", + "id": "identity", + "note": "Typically, this field includes the authorization and claims or JWT token from Active Directory.\n\n\u003e [!Warning]\n\u003e This field contains sensitive (PII) information.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "undefined" + }, + { + "brief": "The name of the operation.", + "examples": [ + "SecretGet", + "Microsoft.ApiManagement/GatewayLogs", + "ApplicationGatewayAccess" + ], + "id": "operation.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version of the operation.", + "examples": [ + "1.0" + ], + "id": "operation.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The properties provided in the Azure Resource Log.", + "id": "properties", + "requirement_level": "recommended", + "stability": "development", + "type": "undefined" + }, + { + "brief": "The status associated with the logged event.", + "examples": [ + "Succeeded", + "Failed", + "Started" + ], + "id": "result.type", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The substatus of associated with the logged event.", + "examples": [ + "OK" + ], + "id": "result.signature", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The description of the result.", + "examples": [ + "The operation was successful", + "The operation failed" + ], + "id": "result.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The tenant ID of the Active Directory tenant that this event is tied to.", + "examples": [ + "00000000-0000-0000-0000-000000000000" + ], + "id": "tenant.id", + "requirement_level": { + "conditionally_required": "if the event is tied to an Active Directory tenant." + }, + "stability": "development", + "type": "string" + } + ], + "id": "azure.resource.log", + "requirement_level": "recommended", + "stability": "development", + "type": "map" + }, + "brief": "Describes Azure Resource Log event, see [Azure Resource Log Top-level Schema](https://learn.microsoft.com/azure/azure-monitor/essentials/resource-logs-schema#top-level-common-schema) for more details.\n", + "id": "event.azure.resource.log", + "lineage": { + "attributes": { + "azure.service.request.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.azure.client.sdk" + }, + "cloud.resource_id": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note" + ], + "source_group": "registry.cloud" + } + }, + "provenance": { + "path": "/home/weaver/source/azure/events.yaml", + "registry_id": "main" + } + }, + "name": "azure.resource.log", + "stability": "development", + "type": "event" + }, + { + "attributes": [ + { + "brief": "A guid or another name describing the event source.\n", + "examples": [ + "cf/gorouter" + ], + "name": "cloudfoundry.system.id", + "note": "CloudFoundry defines the `source_id` in the [Loggregator v2 envelope](https://github.com/cloudfoundry/loggregator-api#v2-envelope).\nIt is used for logs and metrics emitted by CloudFoundry. It is\nsupposed to contain the component name, e.g. \"gorouter\", for\nCloudFoundry components.\n\nWhen system components are instrumented, values from the\n[Bosh spec](https://bosh.io/docs/jobs/#properties-spec)\nshould be used. The `system.id` should be set to\n`spec.deployment/spec.name`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A guid describing the concrete instance of the event source.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.system.instance.id", + "note": "CloudFoundry defines the `instance_id` in the [Loggregator v2 envelope](https://github.com/cloudfoundry/loggregator-api#v2-envelope).\nIt is used for logs and metrics emitted by CloudFoundry. It is\nsupposed to contain the vm id for CloudFoundry components.\n\nWhen system components are instrumented, values from the\n[Bosh spec](https://bosh.io/docs/jobs/#properties-spec)\nshould be used. The `system.instance.id` should be set to `spec.id`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The system component which is monitored.\n", + "id": "entity.cloudfoundry.system", + "lineage": { + "attributes": { + "cloudfoundry.system.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + }, + "cloudfoundry.system.instance.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + } + }, + "provenance": { + "path": "/home/weaver/source/cloudfoundry/entities.yaml", + "registry_id": "main" + } + }, + "name": "cloudfoundry.system", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the application.\n", + "examples": [ + "my-app-name" + ], + "name": "cloudfoundry.app.name", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.application_name`. This is the same value\nas reported by `cf apps`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The guid of the application.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.app.id", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.application_id`. This is the same value as\nreported by `cf app \u003capp-name\u003e --guid`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The application which is monitored.\n", + "id": "entity.cloudfoundry.app", + "lineage": { + "attributes": { + "cloudfoundry.app.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + }, + "cloudfoundry.app.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + } + }, + "provenance": { + "path": "/home/weaver/source/cloudfoundry/entities.yaml", + "registry_id": "main" + } + }, + "name": "cloudfoundry.app", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the CloudFoundry space the application is running in.\n", + "examples": [ + "my-space-name" + ], + "name": "cloudfoundry.space.name", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.space_name`. This is the same value as\nreported by `cf spaces`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The guid of the CloudFoundry space the application is running in.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.space.id", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.space_id`. This is the same value as\nreported by `cf space \u003cspace-name\u003e --guid`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The space of the application which is monitored.\n", + "id": "entity.cloudfoundry.space", + "lineage": { + "attributes": { + "cloudfoundry.space.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + }, + "cloudfoundry.space.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + } + }, + "provenance": { + "path": "/home/weaver/source/cloudfoundry/entities.yaml", + "registry_id": "main" + } + }, + "name": "cloudfoundry.space", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of the CloudFoundry organization the app is running in.\n", + "examples": [ + "my-org-name" + ], + "name": "cloudfoundry.org.name", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.org_name`. This is the same value as\nreported by `cf orgs`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The guid of the CloudFoundry org the application is running in.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.org.id", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.org_id`. This is the same value as\nreported by `cf org \u003corg-name\u003e --guid`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The organization of the application which is monitored.\n", + "id": "entity.cloudfoundry.org", + "lineage": { + "attributes": { + "cloudfoundry.org.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + }, + "cloudfoundry.org.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + } + }, + "provenance": { + "path": "/home/weaver/source/cloudfoundry/entities.yaml", + "registry_id": "main" + } + }, + "name": "cloudfoundry.org", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The UID identifying the process.\n", + "examples": [ + "218fc5a9-a5f1-4b54-aa05-46717d0ab26d" + ], + "name": "cloudfoundry.process.id", + "note": "Application instrumentation should use the value from environment\nvariable `VCAP_APPLICATION.process_id`. It is supposed to be equal to\n`VCAP_APPLICATION.app_id` for applications deployed to the runtime.\nFor system components, this could be the actual PID.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The type of process.\n", + "examples": [ + "web" + ], + "name": "cloudfoundry.process.type", + "note": "CloudFoundry applications can consist of multiple jobs. Usually the\nmain process will be of type `web`. There can be additional background\ntasks or side-cars with different process types.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "The process of the application which is monitored.\n", + "id": "entity.cloudfoundry.process", + "lineage": { + "attributes": { + "cloudfoundry.process.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + }, + "cloudfoundry.process.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cloudfoundry" + } + }, + "provenance": { + "path": "/home/weaver/source/cloudfoundry/entities.yaml", + "registry_id": "main" + } + }, + "name": "cloudfoundry.process", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group defines the attributes used to perform database client calls.", + "id": "trace.db.common.minimal", + "lineage": { + "attributes": { + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + } + ], + "brief": "This group defines the attributes used to perform database client calls.", + "id": "trace.db.common.query", + "lineage": { + "attributes": { + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + } + ], + "brief": "This group defines the attributes used to perform database client calls.", + "id": "trace.db.common.query_and_collection", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database management system (DBMS) product as identified by the client instrumentation.", + "name": "db.system.name", + "note": "The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": { + "members": [ + { + "brief": "Some other SQL database. Fallback only.", + "id": "other_sql", + "stability": "development", + "value": "other_sql" + }, + { + "brief": "[Adabas (Adaptable Database System)](https://documentation.softwareag.com/?pf=adabas)", + "id": "softwareag.adabas", + "stability": "development", + "value": "softwareag.adabas" + }, + { + "brief": "[Actian Ingres](https://www.actian.com/databases/ingres/)", + "id": "actian.ingres", + "stability": "development", + "value": "actian.ingres" + }, + { + "brief": "[Amazon DynamoDB](https://aws.amazon.com/pm/dynamodb/)", + "id": "aws.dynamodb", + "stability": "development", + "value": "aws.dynamodb" + }, + { + "brief": "[Amazon Redshift](https://aws.amazon.com/redshift/)", + "id": "aws.redshift", + "stability": "development", + "value": "aws.redshift" + }, + { + "brief": "[Azure Cosmos DB](https://learn.microsoft.com/azure/cosmos-db)", + "id": "azure.cosmosdb", + "stability": "development", + "value": "azure.cosmosdb" + }, + { + "brief": "[InterSystems Caché](https://www.intersystems.com/products/cache/)", + "id": "intersystems.cache", + "stability": "development", + "value": "intersystems.cache" + }, + { + "brief": "[Apache Cassandra](https://cassandra.apache.org/)", + "id": "cassandra", + "stability": "development", + "value": "cassandra" + }, + { + "brief": "[ClickHouse](https://clickhouse.com/)", + "id": "clickhouse", + "stability": "development", + "value": "clickhouse" + }, + { + "brief": "[CockroachDB](https://www.cockroachlabs.com/)", + "id": "cockroachdb", + "stability": "development", + "value": "cockroachdb" + }, + { + "brief": "[Couchbase](https://www.couchbase.com/)", + "id": "couchbase", + "stability": "development", + "value": "couchbase" + }, + { + "brief": "[Apache CouchDB](https://couchdb.apache.org/)", + "id": "couchdb", + "stability": "development", + "value": "couchdb" + }, + { + "brief": "[Apache Derby](https://db.apache.org/derby/)", + "id": "derby", + "stability": "development", + "value": "derby" + }, + { + "brief": "[Elasticsearch](https://www.elastic.co/elasticsearch)", + "id": "elasticsearch", + "stability": "development", + "value": "elasticsearch" + }, + { + "brief": "[Firebird](https://www.firebirdsql.org/)", + "id": "firebirdsql", + "stability": "development", + "value": "firebirdsql" + }, + { + "brief": "[Google Cloud Spanner](https://cloud.google.com/spanner)", + "id": "gcp.spanner", + "stability": "development", + "value": "gcp.spanner" + }, + { + "brief": "[Apache Geode](https://geode.apache.org/)", + "id": "geode", + "stability": "development", + "value": "geode" + }, + { + "brief": "[H2 Database](https://h2database.com/)", + "id": "h2database", + "stability": "development", + "value": "h2database" + }, + { + "brief": "[Apache HBase](https://hbase.apache.org/)", + "id": "hbase", + "stability": "development", + "value": "hbase" + }, + { + "brief": "[Apache Hive](https://hive.apache.org/)", + "id": "hive", + "stability": "development", + "value": "hive" + }, + { + "brief": "[HyperSQL Database](https://hsqldb.org/)", + "id": "hsqldb", + "stability": "development", + "value": "hsqldb" + }, + { + "brief": "[IBM Db2](https://www.ibm.com/db2)", + "id": "ibm.db2", + "stability": "development", + "value": "ibm.db2" + }, + { + "brief": "[IBM Informix](https://www.ibm.com/products/informix)", + "id": "ibm.informix", + "stability": "development", + "value": "ibm.informix" + }, + { + "brief": "[IBM Netezza](https://www.ibm.com/products/netezza)", + "id": "ibm.netezza", + "stability": "development", + "value": "ibm.netezza" + }, + { + "brief": "[InfluxDB](https://www.influxdata.com/)", + "id": "influxdb", + "stability": "development", + "value": "influxdb" + }, + { + "brief": "[Instant](https://www.instantdb.com/)", + "id": "instantdb", + "stability": "development", + "value": "instantdb" + }, + { + "brief": "[MariaDB](https://mariadb.org/)", + "id": "mariadb", + "stability": "stable", + "value": "mariadb" + }, + { + "brief": "[Memcached](https://memcached.org/)", + "id": "memcached", + "stability": "development", + "value": "memcached" + }, + { + "brief": "[MongoDB](https://www.mongodb.com/)", + "id": "mongodb", + "stability": "development", + "value": "mongodb" + }, + { + "brief": "[Microsoft SQL Server](https://www.microsoft.com/sql-server)", + "id": "microsoft.sql_server", + "stability": "stable", + "value": "microsoft.sql_server" + }, + { + "brief": "[MySQL](https://www.mysql.com/)", + "id": "mysql", + "stability": "stable", + "value": "mysql" + }, + { + "brief": "[Neo4j](https://neo4j.com/)", + "id": "neo4j", + "stability": "development", + "value": "neo4j" + }, + { + "brief": "[OpenSearch](https://opensearch.org/)", + "id": "opensearch", + "stability": "development", + "value": "opensearch" + }, + { + "brief": "[Oracle Database](https://www.oracle.com/database/)", + "id": "oracle.db", + "stability": "development", + "value": "oracle.db" + }, + { + "brief": "[PostgreSQL](https://www.postgresql.org/)", + "id": "postgresql", + "stability": "stable", + "value": "postgresql" + }, + { + "brief": "[Redis](https://redis.io/)", + "id": "redis", + "stability": "development", + "value": "redis" + }, + { + "brief": "[SAP HANA](https://www.sap.com/products/technology-platform/hana/what-is-sap-hana.html)", + "id": "sap.hana", + "stability": "development", + "value": "sap.hana" + }, + { + "brief": "[SAP MaxDB](https://maxdb.sap.com/)", + "id": "sap.maxdb", + "stability": "development", + "value": "sap.maxdb" + }, + { + "brief": "[SQLite](https://www.sqlite.org/)", + "id": "sqlite", + "stability": "development", + "value": "sqlite" + }, + { + "brief": "[Teradata](https://www.teradata.com/)", + "id": "teradata", + "stability": "development", + "value": "teradata" + }, + { + "brief": "[Trino](https://trino.io/)", + "id": "trino", + "stability": "development", + "value": "trino" + } + ] + } + }, + { + "brief": "Peer address of the database node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "Semantic conventions for individual database systems SHOULD document whether `network.peer.*` attributes are applicable. Network peer address and port are useful when the application interacts with individual database nodes directly.\nIf a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": { + "recommended": "If applicable for this database system." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "if and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group documents attributes that describe database call along with network information.", + "id": "trace.db.common.full", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.system.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database management system (DBMS) product as identified by the client instrumentation.", + "name": "db.system.name", + "note": "The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": { + "members": [ + { + "brief": "Some other SQL database. Fallback only.", + "id": "other_sql", + "stability": "development", + "value": "other_sql" + }, + { + "brief": "[Adabas (Adaptable Database System)](https://documentation.softwareag.com/?pf=adabas)", + "id": "softwareag.adabas", + "stability": "development", + "value": "softwareag.adabas" + }, + { + "brief": "[Actian Ingres](https://www.actian.com/databases/ingres/)", + "id": "actian.ingres", + "stability": "development", + "value": "actian.ingres" + }, + { + "brief": "[Amazon DynamoDB](https://aws.amazon.com/pm/dynamodb/)", + "id": "aws.dynamodb", + "stability": "development", + "value": "aws.dynamodb" + }, + { + "brief": "[Amazon Redshift](https://aws.amazon.com/redshift/)", + "id": "aws.redshift", + "stability": "development", + "value": "aws.redshift" + }, + { + "brief": "[Azure Cosmos DB](https://learn.microsoft.com/azure/cosmos-db)", + "id": "azure.cosmosdb", + "stability": "development", + "value": "azure.cosmosdb" + }, + { + "brief": "[InterSystems Caché](https://www.intersystems.com/products/cache/)", + "id": "intersystems.cache", + "stability": "development", + "value": "intersystems.cache" + }, + { + "brief": "[Apache Cassandra](https://cassandra.apache.org/)", + "id": "cassandra", + "stability": "development", + "value": "cassandra" + }, + { + "brief": "[ClickHouse](https://clickhouse.com/)", + "id": "clickhouse", + "stability": "development", + "value": "clickhouse" + }, + { + "brief": "[CockroachDB](https://www.cockroachlabs.com/)", + "id": "cockroachdb", + "stability": "development", + "value": "cockroachdb" + }, + { + "brief": "[Couchbase](https://www.couchbase.com/)", + "id": "couchbase", + "stability": "development", + "value": "couchbase" + }, + { + "brief": "[Apache CouchDB](https://couchdb.apache.org/)", + "id": "couchdb", + "stability": "development", + "value": "couchdb" + }, + { + "brief": "[Apache Derby](https://db.apache.org/derby/)", + "id": "derby", + "stability": "development", + "value": "derby" + }, + { + "brief": "[Elasticsearch](https://www.elastic.co/elasticsearch)", + "id": "elasticsearch", + "stability": "development", + "value": "elasticsearch" + }, + { + "brief": "[Firebird](https://www.firebirdsql.org/)", + "id": "firebirdsql", + "stability": "development", + "value": "firebirdsql" + }, + { + "brief": "[Google Cloud Spanner](https://cloud.google.com/spanner)", + "id": "gcp.spanner", + "stability": "development", + "value": "gcp.spanner" + }, + { + "brief": "[Apache Geode](https://geode.apache.org/)", + "id": "geode", + "stability": "development", + "value": "geode" + }, + { + "brief": "[H2 Database](https://h2database.com/)", + "id": "h2database", + "stability": "development", + "value": "h2database" + }, + { + "brief": "[Apache HBase](https://hbase.apache.org/)", + "id": "hbase", + "stability": "development", + "value": "hbase" + }, + { + "brief": "[Apache Hive](https://hive.apache.org/)", + "id": "hive", + "stability": "development", + "value": "hive" + }, + { + "brief": "[HyperSQL Database](https://hsqldb.org/)", + "id": "hsqldb", + "stability": "development", + "value": "hsqldb" + }, + { + "brief": "[IBM Db2](https://www.ibm.com/db2)", + "id": "ibm.db2", + "stability": "development", + "value": "ibm.db2" + }, + { + "brief": "[IBM Informix](https://www.ibm.com/products/informix)", + "id": "ibm.informix", + "stability": "development", + "value": "ibm.informix" + }, + { + "brief": "[IBM Netezza](https://www.ibm.com/products/netezza)", + "id": "ibm.netezza", + "stability": "development", + "value": "ibm.netezza" + }, + { + "brief": "[InfluxDB](https://www.influxdata.com/)", + "id": "influxdb", + "stability": "development", + "value": "influxdb" + }, + { + "brief": "[Instant](https://www.instantdb.com/)", + "id": "instantdb", + "stability": "development", + "value": "instantdb" + }, + { + "brief": "[MariaDB](https://mariadb.org/)", + "id": "mariadb", + "stability": "stable", + "value": "mariadb" + }, + { + "brief": "[Memcached](https://memcached.org/)", + "id": "memcached", + "stability": "development", + "value": "memcached" + }, + { + "brief": "[MongoDB](https://www.mongodb.com/)", + "id": "mongodb", + "stability": "development", + "value": "mongodb" + }, + { + "brief": "[Microsoft SQL Server](https://www.microsoft.com/sql-server)", + "id": "microsoft.sql_server", + "stability": "stable", + "value": "microsoft.sql_server" + }, + { + "brief": "[MySQL](https://www.mysql.com/)", + "id": "mysql", + "stability": "stable", + "value": "mysql" + }, + { + "brief": "[Neo4j](https://neo4j.com/)", + "id": "neo4j", + "stability": "development", + "value": "neo4j" + }, + { + "brief": "[OpenSearch](https://opensearch.org/)", + "id": "opensearch", + "stability": "development", + "value": "opensearch" + }, + { + "brief": "[Oracle Database](https://www.oracle.com/database/)", + "id": "oracle.db", + "stability": "development", + "value": "oracle.db" + }, + { + "brief": "[PostgreSQL](https://www.postgresql.org/)", + "id": "postgresql", + "stability": "stable", + "value": "postgresql" + }, + { + "brief": "[Redis](https://redis.io/)", + "id": "redis", + "stability": "development", + "value": "redis" + }, + { + "brief": "[SAP HANA](https://www.sap.com/products/technology-platform/hana/what-is-sap-hana.html)", + "id": "sap.hana", + "stability": "development", + "value": "sap.hana" + }, + { + "brief": "[SAP MaxDB](https://maxdb.sap.com/)", + "id": "sap.maxdb", + "stability": "development", + "value": "sap.maxdb" + }, + { + "brief": "[SQLite](https://www.sqlite.org/)", + "id": "sqlite", + "stability": "development", + "value": "sqlite" + }, + { + "brief": "[Teradata](https://www.teradata.com/)", + "id": "teradata", + "stability": "development", + "value": "teradata" + }, + { + "brief": "[Trino](https://trino.io/)", + "id": "trino", + "stability": "development", + "value": "trino" + } + ] + } + }, + { + "brief": "Peer address of the database node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "Semantic conventions for individual database systems SHOULD document whether `network.peer.*` attributes are applicable. Network peer address and port are useful when the application interacts with individual database nodes directly.\nIf a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": { + "recommended": "If applicable for this database system." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "if and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + } + ], + "brief": "This span describes database client call.", + "id": "span.db.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.system.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "Instrumentations SHOULD, when possible, record database spans that cover the duration of\nthe corresponding API call as if it was observed by the caller (such as client application).\nFor example, if a transient issue happened and was retried within this database call, the corresponding\nspan should cover the duration of the logical operation with all retries.\n\nWhen a database client provides higher-level convenience APIs for specific operations\n(e.g., calling a stored procedure), which internally generate and execute a generic query,\nit is RECOMMENDED to instrument the higher-level convenience APIs.\nThese often allow setting `db.operation.*` attributes, which usually are not\nreadily available at the generic query level.\n\n**Span name** is covered in the [Name](/docs/database/database-spans.md#name) section.\n\n**Span kind** SHOULD be `CLIENT`. It MAY be set to `INTERNAL` on spans representing\nin-memory database calls.\nIt\u0027s RECOMMENDED to use `CLIENT` kind when database system being instrumented usually\nruns in a different process than its client or when database calls happen over\ninstrumented protocol such as HTTP.\n\n**Span status** SHOULD follow the [Recording Errors](/docs/general/recording-errors.md) document.\nSemantic conventions for individual systems SHOULD specify which values of `db.response.status_code`\nclassify as errors.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database associated with the connection, qualified by the instance name.\n", + "examples": [ + "instance1\\|products", + "customers" + ], + "name": "db.namespace", + "note": "When connected to a default instance, `db.namespace` SHOULD be set to the name of\nthe database. When connected to a [named instance](https://learn.microsoft.com/sql/connect/jdbc/building-the-connection-url#named-and-multiple-sql-server-instances),\n`db.namespace` SHOULD be set to the combination of instance and database name following the `{instance_name}|{database_name}` pattern.\n\nA connection\u0027s currently associated database may change during its lifetime, e.g. from executing `USE \u003cdatabase\u003e`.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated database on each query\nwithout triggering an additional query to be executed (e.g. `SELECT DB_NAME()`),\nthen it is RECOMMENDED to fallback and use the database provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the database provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "[Microsoft SQL Server error](https://learn.microsoft.com/sql/relational-databases/errors-events/database-engine-events-and-errors) number represented as a string.\n", + "examples": [ + "102", + "40020" + ], + "name": "db.response.status_code", + "note": "Microsoft SQL Server does not report SQLSTATE.\nInstrumentations SHOULD use [error severity](https://learn.microsoft.com/sql/relational-databases/errors-events/database-engine-error-severities) returned along with the status code to determine the status of the span. Response codes with severity 11 or higher SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to Microsoft SQL Server adhere to the general [Semantic Conventions for Database Client Spans](database-spans.md).\n", + "id": "span.db.sql_server.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"microsoft.sql_server\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The schema associated with the connection, qualified by the database name.\n", + "examples": [ + "mydatabase.products", + "mydatabase.customers" + ], + "name": "db.namespace", + "note": "`db.namespace` SHOULD be set to the combination of database and schema name following the `{database}|{schema}` pattern.\nIf either `{database}` or `{schema}` is unavailable, `db.namespace` SHOULD be set to the other (without any `|` separator).\n\nA connection\u0027s currently associated database may change during its lifetime, e.g. from executing `SET search_path TO \u003cschema\u003e`.\nIf the search path has multiple schemas, the first schema in the search path SHOULD be used.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated schema on each query\nwithout triggering an additional query to be executed (e.g. `SELECT current_schema()`),\nthen it is RECOMMENDED to fallback and use the schema provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the schema provided when the connection was established.\n\nInstrumentation MAY use the user name when the connection was established as a stand-in for the schema name.\n\nInstrumentation SHOULD document if `db.namespace` reflects the user provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "[PostgreSQL error code](https://www.postgresql.org/docs/current/errcodes-appendix.html).\n", + "examples": [ + "08000", + "08P01" + ], + "name": "db.response.status_code", + "note": "PostgreSQL follows SQL standard conventions for [SQLSTATE](https://wikipedia.org/wiki/SQLSTATE). Response codes of \"Class 02\" or higher SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to a PostgreSQL database adhere to the general [Semantic Conventions for Database Client Spans](database-spans.md).\n", + "id": "span.db.postgresql.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"postgresql\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database associated with the connection.", + "examples": [ + "products", + "customers" + ], + "name": "db.namespace", + "note": "A connection\u0027s currently associated database may change during its lifetime, e.g. from executing `USE \u003cdatabase\u003e`.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated database on each query\nwithout triggering an additional query to be executed (e.g. `SELECT DATABASE()`),\nthen it is RECOMMENDED to fallback and use the database provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the database provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "[MySQL error number](https://dev.mysql.com/doc/mysql-errors/9.0/en/error-reference-introduction.html) recorded as a string.\n", + "examples": [ + "1005", + "MY-010016" + ], + "name": "db.response.status_code", + "note": "MySQL error codes are vendor specific error codes and don\u0027t follow [SQLSTATE](https://wikipedia.org/wiki/SQLSTATE) conventions. All MySQL error codes SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to a MySQL Server adhere to the general [Semantic Conventions for Database Client Spans](database-spans.md).\n", + "id": "span.db.mysql.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"mysql\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database associated with the connection.", + "examples": [ + "products", + "customers" + ], + "name": "db.namespace", + "note": "A connection\u0027s currently associated database may change during its lifetime, e.g. from executing `USE \u003cdatabase\u003e`.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated database on each query\nwithout triggering an additional query to be executed (e.g. `SELECT DATABASE()`),\nthen it is RECOMMENDED to fallback and use the database provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the database provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "[Maria DB error code](https://mariadb.com/kb/en/mariadb-error-code-reference/) represented as a string.\n", + "examples": [ + "1008", + "3058" + ], + "name": "db.response.status_code", + "note": "MariaDB uses vendor-specific error codes on all errors and reports [SQLSTATE](https://mariadb.com/kb/en/sqlstate/) in some cases.\nMariaDB error codes are more granular than SQLSTATE, so MariaDB instrumentations SHOULD set the `db.response.status_code` to this known error code.\nWhen SQLSTATE is available, SQLSTATE of \"Class 02\" or higher SHOULD be considered errors. When SQLSTATE is not available, all MariaDB error codes SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to MariaDB adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/README.md).\n", + "id": "span.db.mariadb.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"mariadb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The data center of the coordinating node for a query.\n", + "examples": "us-west-2", + "name": "cassandra.coordinator.dc", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ID of the coordinating node for a query.\n", + "examples": "be13faa2-8574-4d71-926d-27f16cf8a7af", + "name": "cassandra.coordinator.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "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": "cassandra.consistency.level", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "All", + "id": "all", + "stability": "development", + "value": "all" + }, + { + "brief": "Each Quorum", + "id": "each_quorum", + "stability": "development", + "value": "each_quorum" + }, + { + "brief": "Quorum", + "id": "quorum", + "stability": "development", + "value": "quorum" + }, + { + "brief": "Local Quorum", + "id": "local_quorum", + "stability": "development", + "value": "local_quorum" + }, + { + "brief": "One", + "id": "one", + "stability": "development", + "value": "one" + }, + { + "brief": "Two", + "id": "two", + "stability": "development", + "value": "two" + }, + { + "brief": "Three", + "id": "three", + "stability": "development", + "value": "three" + }, + { + "brief": "Local One", + "id": "local_one", + "stability": "development", + "value": "local_one" + }, + { + "brief": "Any", + "id": "any", + "stability": "development", + "value": "any" + }, + { + "brief": "Serial", + "id": "serial", + "stability": "development", + "value": "serial" + }, + { + "brief": "Local Serial", + "id": "local_serial", + "stability": "development", + "value": "local_serial" + } + ] + } + }, + { + "brief": "Whether or not the query is idempotent.\n", + "name": "cassandra.query.idempotent", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The fetch size used for paging, i.e. how many rows will be returned at once.\n", + "examples": [ + 5000 + ], + "name": "cassandra.page.size", + "requirement_level": "recommended", + "stability": "development", + "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": "cassandra.speculative_execution.count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "if and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The name of the Cassandra table that the operation is acting upon.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same collection name\nthen that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The keyspace associated with the session.", + "examples": [ + "mykeyspace" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "[Cassandra protocol error code](https://github.com/apache/cassandra/blob/cassandra-5.0/doc/native_protocol_v5.spec) represented as a string.\n", + "examples": [ + "102", + "40020" + ], + "name": "db.response.status_code", + "note": "All Cassandra protocol error codes SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer address of the database node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "If a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to a Cassandra database adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).\n", + "id": "span.db.cassandra.client", + "lineage": { + "attributes": { + "cassandra.consistency.level": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cassandra" + }, + "cassandra.coordinator.dc": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cassandra" + }, + "cassandra.coordinator.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cassandra" + }, + "cassandra.page.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cassandra" + }, + "cassandra.query.idempotent": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cassandra" + }, + "cassandra.speculative_execution.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.cassandra" + }, + "db.collection.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"cassandra\"` and SHOULD be provided **at span creation time**.\n\n**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The HBase table name.", + "examples": [ + "mytable", + "ns:table" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. If table name includes the namespace, the `db.collection.name` SHOULD be set to the full table name.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The HBase namespace.", + "examples": [ + "mynamespace" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH`.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Protocol-specific response code recorded as a string.\n", + "examples": [ + "200", + "409", + "14" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If response was received." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to an HBase database adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).\n", + "id": "span.db.hbase.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"hbase\"` and SHOULD be provided **at span creation time**.\n\n**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The HTTP method + the target REST route.\n", + "examples": [ + "GET /{db}/{docid}" + ], + "name": "db.operation.name", + "note": "In **CouchDB**, `db.operation.name` should be set to the HTTP method + the target REST route according to the API reference documentation. For example, when retrieving a document, `db.operation.name` would be set to (literally, i.e., without replacing the placeholders with concrete values): [`GET /{db}/{docid}`](https://docs.couchdb.org/en/stable/api/document/common.html#get--db-docid).\n", + "requirement_level": { + "conditionally_required": "If readily available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The HTTP response code returned by the Couch DB recorded as a string.\n", + "examples": [ + "200", + "201", + "429" + ], + "name": "db.response.status_code", + "note": "HTTP response codes in the 4xx and 5xx range SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response was received and the HTTP response code is available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to CouchDB adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).\n", + "id": "span.db.couchdb.client", + "lineage": { + "attributes": { + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"couchdb\"` and SHOULD be provided **at span creation time**.\n\n**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "if and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Peer address of the database node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "If a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The [database index] associated with the connection, represented as a string.\n", + "examples": [ + "0", + "1", + "15" + ], + "name": "db.namespace", + "note": "A connection\u0027s currently associated database index may change during its lifetime, e.g. from executing `SELECT \u003cindex\u003e`.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated database index on each query\nwithout triggering an additional query to be executed,\nthen it is RECOMMENDED to fallback and use the database index provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the database index provided when the connection was established.\n", + "requirement_level": { + "conditionally_required": "If and only if it can be captured reliably." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The Redis command name.\n", + "examples": [ + "HMSET", + "GET", + "SET" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\nFor [transactions and pipelined calls](https://redis.io/docs/latest/develop/clients/redis-py/transpipe/), if the individual operations are known to have the same command then that command SHOULD be used prepended by `MULTI ` or `PIPELINE `. Otherwise `db.operation.name` SHOULD be `MULTI` or `PIPELINE`.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The full syntax of the Redis CLI command.\n", + "examples": [ + "HMSET myhash field1 ? field2 ?" + ], + "name": "db.query.text", + "note": "Query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text.\nSee [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nThe value provided for `db.query.text` SHOULD correspond to the syntax of the Redis CLI. If, for example, the [`HMSET` command](https://redis.io/docs/latest/commands/hmset) is invoked, `\"HMSET myhash field1 ? field2 ?\"` would be a suitable value for `db.query.text`.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The Redis [simple error](https://redis.io/docs/latest/develop/reference/protocol-spec/#simple-errors) prefix.\n", + "examples": [ + "ERR", + "WRONGTYPE", + "CLUSTERDOWN" + ], + "name": "db.response.status_code", + "note": "All Redis error prefixes SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name or sha1 digest of a Lua script in the database.\n", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "See [FCALL](https://redis.io/docs/latest/commands/fcall/) and [EVALSHA](https://redis.io/docs/latest/commands/evalsha/).\n", + "requirement_level": { + "recommended": "If operation applies to a specific Lua script." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to Redis adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).\n", + "id": "span.db.redis.client", + "lineage": { + "attributes": { + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"redis\"` and SHOULD be provided **at span creation time**.\n\n**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)\nexcept that `db.namespace` SHOULD NOT be used in the span name since it is a numeric value that ends up\nlooking confusing.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The MongoDB collection being accessed within the database stated in `db.namespace`.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\nFor batch operations, if the individual operations are known to have the same collection name then that collection name SHOULD be used.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The MongoDB database name.", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the [MongoDB command](https://www.mongodb.com/docs/manual/reference/command/) being executed.\n", + "examples": [ + "findAndModify", + "getMore", + "insertMany", + "bulkWrite" + ], + "name": "db.operation.name", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "[MongoDB error code](https://www.mongodb.com/docs/manual/reference/error-codes/) represented as a string.\n", + "examples": [ + "36", + "11602" + ], + "name": "db.response.status_code", + "note": "All MongoDB error codes SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and error code is available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to MongoDB adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).\n", + "id": "span.db.mongodb.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"mongodb\"` and SHOULD be provided **at span creation time**.\n**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The index or data stream against which the query is executed.", + "examples": [ + "my_index", + "index1, index2" + ], + "name": "db.collection.name", + "note": "The query may target multiple indices or data streams, in which case it SHOULD be a comma separated list of those. If the query doesn\u0027t target a specific index, this field MUST NOT be set.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the Elasticsearch cluster which the client connects to.", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "When communicating with an Elastic Cloud deployment, this should be collected from the \"X-Found-Handling-Cluster\" HTTP response header.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "search", + "ml.close_job", + "cat.aliases" + ], + "name": "db.operation.name", + "note": "The `db.operation.name` SHOULD match the endpoint identifier provided in the request (see the [Elasticsearch schema](https://raw.githubusercontent.com/elastic/elasticsearch-specification/main/output/schema/schema.json)).\nFor batch operations, if the individual operations are known to have the same operation name then that operation name SHOULD be used prepended by `bulk `, otherwise `db.operation.name` SHOULD be `bulk`.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "A dynamic value in the url path.\n", + "examples": [ + "db.operation.parameter.index=\"test-index\"", + "db.operation.parameter=\"123\"" + ], + "name": "db.operation.parameter", + "note": "Many Elasticsearch url paths allow dynamic values. These SHOULD be recorded in span attributes in the format `db.operation.parameter.\u003ckey\u003e`, where `\u003ckey\u003e` is the path parameter 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 parameter values to their names.\n", + "requirement_level": { + "conditionally_required": "when the url has path parameters" + }, + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The request body for a [search-type query](https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html), as a json string.", + "examples": [ + "\"{\\\"query\\\":{\\\"term\\\":{\\\"user.id\\\":\\\"kimchy\\\"}}}\"" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Should be collected by default for search-type queries and only if there is sanitization that excludes sensitive information.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The HTTP response code returned by the Elasticsearch cluster.\n", + "examples": [ + "200", + "201", + "429" + ], + "name": "db.response.status_code", + "note": "HTTP response codes in the 4xx and 5xx range SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response was received." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Represents the human-readable identifier of the node/instance to which a request was routed.\n", + "examples": [ + "instance-0000000001" + ], + "name": "elasticsearch.node.name", + "note": "When communicating with an Elastic Cloud deployment, this should be collected from the \"X-Found-Handling-Instance\" HTTP response header.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Absolute URL describing a network resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986)", + "examples": [ + "https://localhost:9200/index/_search?q=user.id:kimchy" + ], + "name": "url.full", + "note": "For network calls, URL usually has `scheme://host[:port][path][?query][#fragment]` format, where the fragment\nis not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`.\nIn such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed).\n\nSensitive content provided in `url.full` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the\nvalue `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`https://www.example.com/path?color=blue\u0026sig=REDACTED`.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "sampling_relevant": true, + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Spans representing calls to Elasticsearch adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).\n", + "id": "span.db.elasticsearch.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.parameter": { + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "elasticsearch.node.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.elasticsearch" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.http" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "url.full": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"elasticsearch\"` and SHOULD be provided **at span creation time**.\n\n**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)\nwith the endpoint identifier stored in `db.operation.name`, and the index stored in `db.collection.name`.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database associated with the connection, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components (e.g. schema name and database name), they SHOULD be concatenated\nfrom the most general to the most specific namespace component,\nusing `|` as a separator between the components.\nAny missing components (and their associated separators) SHOULD be omitted.\n\nSemantic conventions for individual database systems SHOULD document what `db.namespace`\nmeans in the context of that system.\n\nA connection\u0027s currently associated database may change during its lifetime, e.g. from executing `USE \u003cdatabase\u003e`.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated database on each query\nwithout triggering an additional query to be executed (e.g. `SELECT DATABASE()`),\nthen it is RECOMMENDED to fallback and use the database provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the database provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Database response code recorded as a string.\n", + "examples": [ + "ORA-17027", + "1052", + "2201B" + ], + "name": "db.response.status_code", + "note": "SQL defines [SQLSTATE](https://wikipedia.org/wiki/SQLSTATE) as a database\nreturn code which is adopted by some database systems like PostgreSQL.\nSee [PostgreSQL error codes](https://www.postgresql.org/docs/current/errcodes-appendix.html)\nfor the details.\n\nOther systems like MySQL, Oracle, or MS SQL Server define vendor-specific\nerror codes. Database SQL drivers usually provide access to both properties.\nFor example, in Java, the [`SQLException`](https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html)\nclass reports them with `getSQLState()` and `getErrorCode()` methods.\n\nInstrumentations SHOULD populate the `db.response.status_code` with the\nthe most specific code available to them.\n\nHere\u0027s a non-exhaustive list of databases that report vendor-specific\ncodes with granularity higher than SQLSTATE (or don\u0027t report SQLSTATE\nat all):\n\n- [DB2 SQL codes](https://www.ibm.com/docs/db2-for-zos/12?topic=codes-sql).\n- [Maria DB error codes](https://mariadb.com/kb/en/mariadb-error-code-reference/)\n- [Microsoft SQL Server errors](https://docs.microsoft.com/sql/relational-databases/errors-events/database-engine-events-and-errors)\n- [MySQL error codes](https://dev.mysql.com/doc/mysql-errors/9.0/en/error-reference-introduction.html)\n- [Oracle error codes](https://docs.oracle.com/cd/B28359_01/server.111/b28278/toc.htm)\n- [SQLite result codes](https://www.sqlite.org/rescode.html)\n\nThese systems SHOULD set the `db.response.status_code` to a\nknown vendor-specific error code. If only SQLSTATE is available,\nit SHOULD be used.\n\nWhen multiple error codes are available and specificity is unclear,\ninstrumentation SHOULD set the `db.response.status_code` to the\nconcatenated string of all codes with \u0027/\u0027 used as a separator.\n\nFor example, generic DB instrumentation that detected an error and has\nSQLSTATE `\"42000\"` and vendor-specific `1071` should set\n`db.response.status_code` to `\"42000/1071\"`.\"\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "The SQL databases Semantic Conventions describes how common [Database Semantic Conventions](/docs/database/database-spans.md) apply to SQL databases.\n", + "id": "span.db.sql.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "The following database systems (defined in the\n[`db.system.name`](/docs/database/database-spans.md#notes-and-well-known-identifiers-for-dbsystemname) set)\nare known to use SQL as their primary query language:\n\n- `actian.ingres`\n- `cockroachdb`\n- `derby`\n- `firebirdsql`\n- `h2database`\n- `hsqldb`\n- `ibm.db2`\n- `mariadb`\n- `microsoft.sql_server`\n- `mysql`\n- `oracle.db`\n- `other_sql`\n- `postgresql`\n- `sap.maxdb`\n- `sqlite`\n- `trino`\n\nMany other database systems support SQL and can be accessed via generic database driver such as JDBC or ODBC.\nInstrumentations applied to generic SQL drivers SHOULD adhere to SQL semantic conventions.\n\n**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The unique identifier of the client instance.", + "examples": [ + "3ba4827d-4422-483f-b59f-85b74211c11d", + "storage-client-1" + ], + "name": "azure.client.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Request payload size in bytes.", + "name": "azure.cosmosdb.request.body.size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Cosmos client connection mode.", + "name": "azure.cosmosdb.connection.mode", + "requirement_level": { + "conditionally_required": "if not `gateway` (the default value is assumed to be `gateway`)." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Gateway (HTTP) connection.", + "id": "gateway", + "stability": "development", + "value": "gateway" + }, + { + "brief": "Direct connection.", + "id": "direct", + "stability": "development", + "value": "direct" + } + ] + } + }, + { + "brief": "Account or request [consistency level](https://learn.microsoft.com/azure/cosmos-db/consistency-levels).", + "examples": [ + "Eventual", + "ConsistentPrefix", + "BoundedStaleness", + "Strong", + "Session" + ], + "name": "azure.cosmosdb.consistency.level", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": { + "members": [ + { + "brief": "Strong", + "id": "strong", + "stability": "development", + "value": "Strong" + }, + { + "brief": "Bounded Staleness", + "id": "bounded_staleness", + "stability": "development", + "value": "BoundedStaleness" + }, + { + "brief": "Session", + "id": "session", + "stability": "development", + "value": "Session" + }, + { + "brief": "Eventual", + "id": "eventual", + "stability": "development", + "value": "Eventual" + }, + { + "brief": "Consistent Prefix", + "id": "consistent_prefix", + "stability": "development", + "value": "ConsistentPrefix" + } + ] + } + }, + { + "brief": "List of regions contacted during operation in the order that they were contacted. If there is more than one region listed, it indicates that the operation was performed on multiple regions i.e. cross-regional call.\n", + "examples": [ + [ + "North Central US", + "Australia East", + "Australia Southeast" + ] + ], + "name": "azure.cosmosdb.operation.contacted_regions", + "note": "Region name matches the format of `displayName` in [Azure Location API](https://learn.microsoft.com/rest/api/resources/subscriptions/list-locations)\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "development", + "type": "string[]" + }, + { + "brief": "The number of request units consumed by the operation.\n", + "examples": [ + 46.18, + 1.0 + ], + "name": "azure.cosmosdb.operation.request_charge", + "requirement_level": { + "conditionally_required": "when available" + }, + "stability": "development", + "type": "double" + }, + { + "brief": "Cosmos DB sub status code.", + "examples": [ + 1000, + 1002 + ], + "name": "azure.cosmosdb.response.sub_status_code", + "requirement_level": { + "conditionally_required": "when response was received and contained sub-code." + }, + "stability": "development", + "type": "int" + }, + { + "brief": "[Azure Resource Provider Namespace](https://learn.microsoft.com/azure/azure-resource-manager/management/azure-services-resource-providers) as recognized by the client.\n", + "examples": [ + "Microsoft.DocumentDB" + ], + "name": "azure.resource_provider.namespace", + "note": "When `azure.resource_provider.namespace` attribute is populated, it MUST be set to `Microsoft.DocumentDB` for all operations performed by Cosmos DB client.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Cosmos DB container name.\n", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "if available" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "create_item", + "query_items", + "read_item" + ], + "name": "db.operation.name", + "note": "The `db.operation.name` has the following list of well-known values.\nIf one of them applies, then the respective value MUST be used.\n\nBatch operations:\n\n- `execute_batch`\n\nBulk operations:\n\n- `execute_bulk` SHOULD be used on spans reported for methods like\n [`executeBulkOperations`](https://javadoc.io/doc/com.azure/azure-cosmos/latest/com/azure/cosmos/CosmosAsyncContainer.html#executeBulkOperations(reactor.core.publisher.Flux)),\n which represents a bulk execution of multiple operations.\n- `bulk_{operation name}` (`bulk_create_item`, `bulk_upsert_item`, etc) SHOULD be used on spans describing individual operations (when they are reported)\n within the bulk. This pattern SHOULD be used when instrumentation creates span per each operation, but operations are buffered and then performed in bulk.\n For example, this applies when [`AllowBulkExecution`](https://learn.microsoft.com/dotnet/api/microsoft.azure.cosmos.cosmosclientoptions.allowbulkexecution)\n property is configured on the `Microsoft.Azure.Cosmos` client.\n\nChange feed operations:\n\n- `query_change_feed`\n\nConflicts operations:\n\n- `delete_conflict`\n- `query_conflicts`\n- `read_all_conflicts`\n- `read_conflict`\n\nContainer operations:\n\n- `create_container`\n- `create_container_if_not_exists`\n- `delete_container`\n- `query_containers`\n- `read_all_containers`\n- `read_container`\n- `read_container_throughput`\n- `replace_container`\n- `replace_container_throughput`\n\nDatabase operations:\n\n- `create_database`\n- `create_database_if_not_exists`\n- `delete_database`\n- `query_databases`\n- `read_all_databases`\n- `read_database`\n- `read_database_throughput`\n- `replace_database_throughput`\n\nEncryption key operations:\n\n- `create_client_encryption_key`\n- `query_client_encryption_keys`\n- `read_all_client_encryption_keys`\n- `read_client_encryption_key`\n- `replace_client_encryption_key`\n\nItem operations:\n\n- `create_item`\n- `delete_all_items_by_partition_key`\n- `delete_item`\n- `patch_item`\n- `query_items`\n- `read_all_items`\n- `read_all_items_of_logical_partition`\n- `read_many_items`\n- `read_item`\n- `replace_item`\n- `upsert_item`\n\nPermission operations:\n\n- `create_permission`\n- `delete_permission`\n- `query_permissions`\n- `read_all_permissions`\n- `read_permission`\n- `replace_permission`\n- `upsert_permission`\n\nStored procedure operations:\n\n- `create_stored_procedure`\n- `delete_stored_procedure`\n- `execute_stored_procedure`\n- `query_stored_procedures`\n- `read_all_stored_procedures`\n- `read_stored_procedure`\n- `replace_stored_procedure`\n\nTrigger operations:\n\n- `create_trigger`\n- `delete_trigger`\n- `query_triggers`\n- `read_all_triggers`\n- `read_trigger`\n- `replace_trigger`\n\nUser operations:\n\n- `create_user`\n- `delete_user`\n- `query_users`\n- `read_all_users`\n- `read_user`\n- `replace_user`\n- `upsert_user`\n\nUser-defined function operations:\n\n- `create_user_defined_function`\n- `delete_user_defined_function`\n- `query_user_defined_functions`\n- `read_all_user_defined_functions`\n- `read_user_defined_function`\n\nIf none of them applies, it\u0027s RECOMMENDED to use language-agnostic representation of\nclient method name in snake_case. Instrumentations SHOULD document\nadditional values when introducing new operations.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Cosmos DB row count in result set.\n", + "examples": [ + 10, + 20 + ], + "name": "db.response.returned_rows", + "requirement_level": { + "conditionally_required": "if response was received and returned any rows" + }, + "stability": "development", + "type": "int" + }, + { + "brief": "Cosmos DB status code.\n", + "examples": [ + "200", + "201" + ], + "name": "db.response.status_code", + "note": "Response codes in the 4xx and 5xx range SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "if response was received" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If not default (443)." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Full user-agent string is generated by Cosmos DB SDK", + "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\\|" + ], + "name": "user_agent.original", + "note": "The user-agent value is generated by SDK which is a combination of\u003cbr\u003e `sdk_version` : Current version of SDK. e.g. \u0027cosmos-netstandard-sdk/3.23.0\u0027\u003cbr\u003e `direct_pkg_version` : Direct package version used by Cosmos DB SDK. e.g. \u00273.23.1\u0027\u003cbr\u003e `number_of_client_instances` : Number of cosmos client instances created by the application. e.g. \u00271\u0027\u003cbr\u003e `type_of_machine_architecture` : Machine architecture. e.g. \u0027X64\u0027\u003cbr\u003e `operating_system` : Operating System. e.g. \u0027Linux 5.4.0-1098-azure 104 18\u0027\u003cbr\u003e `runtime_framework` : Runtime Framework. e.g. \u0027.NET Core 3.1.32\u0027\u003cbr\u003e `failover_information` : Generated key to determine if region failover enabled.\n Format Reg-{D (Disabled discovery)}-S(application region)|L(List of preferred regions)|N(None, user did not configure it).\n Default value is \"NS\".\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Cosmos DB instrumentations include call-level spans that represent logical database calls and adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).\n", + "id": "span.azure.cosmosdb.client", + "lineage": { + "attributes": { + "azure.client.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.azure.client.sdk" + }, + "azure.cosmosdb.connection.mode": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.cosmosdb.consistency.level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.cosmosdb.operation.contacted_regions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.cosmosdb.operation.request_charge": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.cosmosdb.request.body.size": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.cosmosdb.response.sub_status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.resource_provider.namespace": { + "inherited_fields": [ + "brief", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note" + ], + "source_group": "registry.azure.client.sdk" + }, + "db.collection.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "user_agent.original": { + "inherited_fields": [ + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note" + ], + "source_group": "registry.user_agent" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "Additional spans representing network calls may also be created depending on the connection mode (Gateway or Direct).\nSemantic conventions described in this document apply to the call-level spans only.\n\n`db.system.name` MUST be set to `\"azure.cosmosdb\"` and SHOULD be provided **at span creation time**.\n\n**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "A database query parameter, with `\u003ckey\u003e` being the parameter name, and the attribute value being a string representation of the parameter value.\n", + "examples": [ + "someval", + "55" + ], + "name": "db.query.parameter", + "note": "If a query parameter has no name and instead is referenced only by index,\nthen `\u003ckey\u003e` SHOULD be the 0-based index.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD match\nup with the parameterized placeholders present in `db.query.text`.\n\nIt is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\n`db.query.parameter.\u003ckey\u003e` SHOULD NOT be captured on batch operations.\n\nExamples:\n\n- For a query `SELECT * FROM users where username = %s` with the parameter `\"jdoe\"`,\n the attribute `db.query.parameter.0` SHOULD be set to `\"jdoe\"`.\n\n- For a query `\"SELECT * FROM users WHERE username = %(userName)s;` with parameter\n `userName = \"jdoe\"`, the attribute `db.query.parameter.userName` SHOULD be set to `\"jdoe\"`.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Number of rows returned by the operation.", + "examples": [ + 10, + 30, + 1000 + ], + "name": "db.response.returned_rows", + "requirement_level": "opt_in", + "stability": "development", + "type": "int" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database associated with the connection, qualified by the instance name, database name and service name.\n", + "examples": [ + "ORCL1\\|PDB1\\|db_high.adb.oraclecloud.com", + "ORCL1\\|DB1\\|db_low.adb.oraclecloud.com", + "ORCL1\\|DB1\\|order-processing-service" + ], + "name": "db.namespace", + "note": "`db.namespace` SHOULD be set to the combination of instance name, database name and\nservice name following the `{service_name}|{database_name}|{instance_name}` pattern.\nAny missing components (and their associated separators) SHOULD be omitted.\n\nFor CDB architecture, database name would be pdb name. For Non-CDB, it would be\n`DB_NAME` parameter.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = :mykey" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](../database/database-spans.md#sanitization-of-dbquerytext). For batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless explicitly configured and sanitized to exclude sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](../database/database-spans.md#sanitization-of-dbquerytext). Parameterized query text MUST also NOT be collected by default unless explicitly configured. The query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](../registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "[Oracle Database error number](https://docs.oracle.com/en/error-help/db/) recorded as a string.\n", + "examples": [ + "ORA-02813", + "ORA-02613" + ], + "name": "db.response.status_code", + "note": "Oracle Database error codes are vendor specific error codes and don\u0027t follow [SQLSTATE](https://wikipedia.org/wiki/SQLSTATE) conventions. All Oracle Database error codes SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to a Oracle SQL Database adhere to the general [Semantic Conventions for Database Client Spans](database-spans.md).\n", + "id": "span.db.oracledb.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"oracle.db\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "development", + "type": "span" + }, + { + "attributes": [ + { + "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)\n", + "name": "exception.stacktrace", + "requirement_level": "recommended", + "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": { + "conditionally_required": "Required if `exception.message` is not set, recommended otherwise." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The exception message.", + "examples": [ + "Division by zero", + "Can\u0027t convert \u0027int\u0027 object to str implicitly" + ], + "name": "exception.message", + "requirement_level": { + "conditionally_required": "Required if `exception.type` is not set, recommended otherwise." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "This document defines attributes for exceptions represented using Log Records.\n", + "id": "log-exception", + "lineage": { + "attributes": { + "exception.message": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.exception" + }, + "exception.stacktrace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.exception" + }, + "exception.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.exception" + } + }, + "provenance": { + "path": "/home/weaver/source/exceptions/logs.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `gen_ai.provider.name` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.provider.name`.", + "reason": "renamed", + "renamed_to": "gen_ai.provider.name" + }, + "name": "gen_ai.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "OpenAI", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "Vertex AI", + "id": "gcp.vertex_ai", + "note": "This refers to the \u0027aiplatform.googleapis.com\u0027 endpoint. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "Gemini", + "id": "gcp.gemini", + "note": "This refers to the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "Vertex AI", + "deprecated": { + "note": "Replaced by `gcp.vertex_ai`.", + "reason": "renamed", + "renamed_to": "gcp.vertex_ai" + }, + "id": "vertex_ai", + "stability": "development", + "value": "vertex_ai" + }, + { + "brief": "Gemini", + "deprecated": { + "note": "Replaced by `gcp.gemini`.", + "reason": "renamed", + "renamed_to": "gcp.gemini" + }, + "id": "gemini", + "stability": "development", + "value": "gemini" + }, + { + "brief": "Anthropic", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "Cohere", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "deprecated": { + "note": "Replaced by `azure.ai.inference`.", + "reason": "renamed", + "renamed_to": "azure.ai.inference" + }, + "id": "az.ai.inference", + "stability": "development", + "value": "az.ai.inference" + }, + { + "brief": "Azure OpenAI", + "deprecated": { + "note": "Replaced by `azure.ai.openai`.", + "reason": "renamed", + "renamed_to": "azure.ai.openai" + }, + "id": "az.ai.openai", + "stability": "development", + "value": "az.ai.openai" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "Azure OpenAI", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "IBM Watsonx AI", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "AWS Bedrock", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "Perplexity", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "xAI", + "id": "xai", + "stability": "development", + "value": "xai" + }, + { + "brief": "DeepSeek", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "Groq", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "Mistral AI", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "Describes common Gen AI event attributes.\n", + "id": "gen_ai.common.event.attributes", + "lineage": { + "attributes": { + "gen_ai.system": { + "inherited_fields": [ + "brief", + "deprecated", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.gen_ai.deprecated" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `gen_ai.usage.input_tokens` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.usage.input_tokens`.", + "reason": "renamed", + "renamed_to": "gen_ai.usage.input_tokens" + }, + "examples": [ + 42 + ], + "name": "gen_ai.usage.prompt_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `gen_ai.usage.output_tokens` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.usage.output_tokens`.", + "reason": "renamed", + "renamed_to": "gen_ai.usage.output_tokens" + }, + "examples": [ + 42 + ], + "name": "gen_ai.usage.completion_tokens", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use Event API to report prompt contents.", + "deprecated": { + "note": "Removed, no replacement at this time.", + "reason": "obsoleted" + }, + "examples": [ + "[{\u0027role\u0027: \u0027user\u0027, \u0027content\u0027: \u0027What is the capital of France?\u0027}]" + ], + "name": "gen_ai.prompt", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use Event API to report completions contents.", + "deprecated": { + "note": "Removed, no replacement at this time.", + "reason": "obsoleted" + }, + "examples": [ + "[{\u0027role\u0027: \u0027assistant\u0027, \u0027content\u0027: \u0027The capital of France is Paris.\u0027}]" + ], + "name": "gen_ai.completion", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `gen_ai.provider.name` instead.", + "deprecated": { + "note": "Replaced by `gen_ai.provider.name`.", + "reason": "renamed", + "renamed_to": "gen_ai.provider.name" + }, + "name": "gen_ai.system", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "OpenAI", + "id": "openai", + "stability": "development", + "value": "openai" + }, + { + "brief": "Any Google generative AI endpoint", + "id": "gcp.gen_ai", + "note": "May be used when specific backend is unknown. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gen_ai" + }, + { + "brief": "Vertex AI", + "id": "gcp.vertex_ai", + "note": "This refers to the \u0027aiplatform.googleapis.com\u0027 endpoint. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.vertex_ai" + }, + { + "brief": "Gemini", + "id": "gcp.gemini", + "note": "This refers to the \u0027generativelanguage.googleapis.com\u0027 endpoint. Also known as the AI Studio API. May use common attributes prefixed with \u0027gcp.gen_ai.\u0027.\n", + "stability": "development", + "value": "gcp.gemini" + }, + { + "brief": "Vertex AI", + "deprecated": { + "note": "Replaced by `gcp.vertex_ai`.", + "reason": "renamed", + "renamed_to": "gcp.vertex_ai" + }, + "id": "vertex_ai", + "stability": "development", + "value": "vertex_ai" + }, + { + "brief": "Gemini", + "deprecated": { + "note": "Replaced by `gcp.gemini`.", + "reason": "renamed", + "renamed_to": "gcp.gemini" + }, + "id": "gemini", + "stability": "development", + "value": "gemini" + }, + { + "brief": "Anthropic", + "id": "anthropic", + "stability": "development", + "value": "anthropic" + }, + { + "brief": "Cohere", + "id": "cohere", + "stability": "development", + "value": "cohere" + }, + { + "brief": "Azure AI Inference", + "deprecated": { + "note": "Replaced by `azure.ai.inference`.", + "reason": "renamed", + "renamed_to": "azure.ai.inference" + }, + "id": "az.ai.inference", + "stability": "development", + "value": "az.ai.inference" + }, + { + "brief": "Azure OpenAI", + "deprecated": { + "note": "Replaced by `azure.ai.openai`.", + "reason": "renamed", + "renamed_to": "azure.ai.openai" + }, + "id": "az.ai.openai", + "stability": "development", + "value": "az.ai.openai" + }, + { + "brief": "Azure AI Inference", + "id": "azure.ai.inference", + "stability": "development", + "value": "azure.ai.inference" + }, + { + "brief": "Azure OpenAI", + "id": "azure.ai.openai", + "stability": "development", + "value": "azure.ai.openai" + }, + { + "brief": "IBM Watsonx AI", + "id": "ibm.watsonx.ai", + "stability": "development", + "value": "ibm.watsonx.ai" + }, + { + "brief": "AWS Bedrock", + "id": "aws.bedrock", + "stability": "development", + "value": "aws.bedrock" + }, + { + "brief": "Perplexity", + "id": "perplexity", + "stability": "development", + "value": "perplexity" + }, + { + "brief": "xAI", + "id": "xai", + "stability": "development", + "value": "xai" + }, + { + "brief": "DeepSeek", + "id": "deepseek", + "stability": "development", + "value": "deepseek" + }, + { + "brief": "Groq", + "id": "groq", + "stability": "development", + "value": "groq" + }, + { + "brief": "Mistral AI", + "id": "mistral_ai", + "stability": "development", + "value": "mistral_ai" + } + ] + } + } + ], + "brief": "Describes deprecated `gen_ai` attributes.", + "display_name": "Deprecated GenAI Attributes", + "id": "registry.gen_ai.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/gen-ai/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `gen_ai.request.seed`.", + "deprecated": { + "note": "Replaced by `gen_ai.request.seed`.", + "reason": "renamed", + "renamed_to": "gen_ai.request.seed" + }, + "examples": [ + 100 + ], + "name": "gen_ai.openai.request.seed", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `gen_ai.output.type`.\n", + "deprecated": { + "note": "Replaced by `gen_ai.output.type`.", + "reason": "renamed", + "renamed_to": "gen_ai.output.type" + }, + "name": "gen_ai.openai.request.response_format", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Text response format", + "id": "text", + "stability": "development", + "value": "text" + }, + { + "brief": "JSON object response format", + "id": "json_object", + "stability": "development", + "value": "json_object" + }, + { + "brief": "JSON schema response format", + "id": "json_schema", + "stability": "development", + "value": "json_schema" + } + ] + } + }, + { + "brief": "Deprecated, use `openai.request.service_tier`.", + "deprecated": { + "note": "Replaced by `openai.request.service_tier`.", + "reason": "renamed", + "renamed_to": "openai.request.service_tier" + }, + "name": "gen_ai.openai.request.service_tier", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The system will utilize scale tier credits until they are exhausted.", + "id": "auto", + "stability": "development", + "value": "auto" + }, + { + "brief": "The system will utilize the default scale tier.", + "id": "default", + "stability": "development", + "value": "default" + } + ] + } + }, + { + "brief": "Deprecated, use `openai.response.service_tier`.", + "deprecated": { + "note": "Replaced by `openai.response.service_tier`.", + "reason": "renamed", + "renamed_to": "openai.response.service_tier" + }, + "examples": [ + "scale", + "default" + ], + "name": "gen_ai.openai.response.service_tier", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `openai.response.system_fingerprint`.", + "deprecated": { + "note": "Replaced by `openai.response.system_fingerprint`.", + "reason": "renamed", + "renamed_to": "openai.response.system_fingerprint" + }, + "examples": [ + "fp_44709d6fcb" + ], + "name": "gen_ai.openai.response.system_fingerprint", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated `gen_ai.openai` attributes.", + "display_name": "Deprecated OpenAI GenAI Attributes", + "id": "registry.gen_ai.openai.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/gen-ai/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common attributes for voltage metrics\n", + "id": "metric_attributes.hw.voltage.common", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/voltage-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Voltage measured by the sensor.", + "id": "metric.hw.voltage", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/voltage-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.voltage", + "stability": "development", + "type": "metric", + "unit": "V" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of limit for hardware components\n", + "examples": [ + "low.critical", + "low.degraded", + "high.degraded", + "high.critical" + ], + "name": "hw.limit_type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Critical", + "id": "critical", + "stability": "development", + "value": "critical" + }, + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "High Critical", + "id": "high_critical", + "stability": "development", + "value": "high.critical" + }, + { + "brief": "High Degraded", + "id": "high_degraded", + "stability": "development", + "value": "high.degraded" + }, + { + "brief": "Low Critical", + "id": "low_critical", + "stability": "development", + "value": "low.critical" + }, + { + "brief": "Low Degraded", + "id": "low_degraded", + "stability": "development", + "value": "low.degraded" + }, + { + "brief": "Maximum", + "id": "max", + "stability": "development", + "value": "max" + }, + { + "brief": "Throttled", + "id": "throttled", + "stability": "development", + "value": "throttled" + }, + { + "brief": "Turbo", + "id": "turbo", + "stability": "development", + "value": "turbo" + } + ] + } + } + ], + "brief": "Voltage limit in Volts.", + "id": "metric.hw.voltage.limit", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.limit_type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/voltage-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.voltage.limit", + "stability": "development", + "type": "metric", + "unit": "V" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Location of the sensor\n", + "examples": [ + "cpu0", + "ps1", + "INLET", + "CPU0_DIE", + "AMBIENT", + "MOTHERBOARD", + "PS0 V3_3", + "MAIN_12V", + "CPU_VCORE" + ], + "name": "hw.sensor_location", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Nominal (expected) voltage.", + "id": "metric.hw.voltage.nominal", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.sensor_location": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/voltage-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.voltage.nominal", + "stability": "development", + "type": "metric", + "unit": "V" + }, + { + "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", + "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": [ + [ + "application/json" + ], + [ + "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.\nIncluding all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nThe `User-Agent` header is already captured in the `user_agent.original` attribute.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` SHOULD be recorded as the `http.request.header.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` SHOULD be recorded as the `http.request.header.x-forwarded-for`\n attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]` or `[\"1.2.3.4, 1.2.3.5\"]` depending on the HTTP library.\n", + "requirement_level": "recommended", + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "QUERY method.", + "id": "query", + "stability": "development", + "value": "QUERY" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "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", + "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", + "stability": "stable", + "type": "int" + }, + { + "brief": "The total size of the request in bytes. This should be the total number of bytes sent over the wire, including the request line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and request body if any.\n", + "examples": 1437, + "name": "http.request.size", + "requirement_level": "recommended", + "stability": "development", + "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", + "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": [ + [ + "application/json" + ], + [ + "abc", + "def" + ] + ], + "name": "http.response.header", + "note": "Instrumentations SHOULD require an explicit configuration of which headers are to be captured.\nIncluding all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` header SHOULD be recorded as the `http.request.response.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `My-custom-header: abc, def` header SHOULD be recorded as the `http.response.header.my-custom-header`\n attribute with value `[\"abc\", \"def\"]` or `[\"abc, def\"]` depending on the HTTP library.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "template[string[]]" + }, + { + "brief": "The total size of the response in bytes. This should be the total number of bytes sent over the wire, including the status line (HTTP/1.1), framing (HTTP/2 and HTTP/3), headers, and response body and trailers if any.\n", + "examples": 1437, + "name": "http.response.size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "State of the HTTP connection in the HTTP connection pool.", + "examples": [ + "active", + "idle" + ], + "name": "http.connection.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "active state.", + "id": "active", + "stability": "development", + "value": "active" + }, + { + "brief": "idle state.", + "id": "idle", + "stability": "development", + "value": "idle" + } + ] + } + } + ], + "brief": "This document defines semantic convention attributes in the HTTP namespace.", + "display_name": "HTTP Attributes", + "id": "registry.http", + "lineage": { + "provenance": { + "path": "/home/weaver/source/http/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The state of event loop time.", + "name": "nodejs.eventloop.state", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Active time.", + "id": "active", + "stability": "development", + "value": "active" + }, + { + "brief": "Idle time.", + "id": "idle", + "stability": "development", + "value": "idle" + } + ] + } + } + ], + "brief": "Describes Node.js related attributes.", + "display_name": "Node.js Attributes", + "id": "registry.nodejs", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nodejs/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "A unique id to identify a session.", + "examples": "00112233-4455-6677-8899-aabbccddeeff", + "name": "session.id", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The previous `session.id` for this user, when known.", + "examples": "00112233-4455-6677-8899-aabbccddeeff", + "name": "session.previous_id", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + } + ], + "brief": "Session is defined as the period of time encompassing all activities performed by the application and the actions executed by the end user.\nConsequently, a Session is represented as a collection of Logs, Events, and Spans emitted by the Client Application throughout the Session\u0027s duration. Each Session is assigned a unique identifier, which is included as an attribute in the Logs, Events, and Spans generated during the Session\u0027s lifecycle.\nWhen a session reaches end of life, typically due to user inactivity or session timeout, a new session identifier will be assigned. The previous session identifier may be provided by the instrumentation so that telemetry backends can link the two sessions.\n", + "id": "session-id", + "lineage": { + "attributes": { + "session.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.session" + }, + "session.previous_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.session" + } + }, + "provenance": { + "path": "/home/weaver/source/session/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "String indicating the [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5) used during the current connection.\n", + "examples": [ + "TLS_RSA_WITH_3DES_EDE_CBC_SHA", + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" + ], + "name": "tls.cipher", + "note": "The values allowed for `tls.cipher` MUST be one of the `Descriptions` of the [registered TLS Cipher Suits](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#table-tls-parameters-4).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "PEM-encoded stand-alone certificate offered by the client. This is usually mutually-exclusive of `client.certificate_chain` since this value also exists in that list.\n", + "examples": [ + "MII..." + ], + "name": "tls.client.certificate", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of PEM-encoded certificates that make up the certificate chain offered by the client. This is usually mutually-exclusive of `client.certificate` since that value should be the first certificate in the chain.\n", + "examples": [ + [ + "MII...", + "MI..." + ] + ], + "name": "tls.client.certificate_chain", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.\n", + "examples": [ + "0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC" + ], + "name": "tls.client.hash.md5", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.\n", + "examples": [ + "9E393D93138888D288266C2D915214D1D1CCEB2A" + ], + "name": "tls.client.hash.sha1", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value should be formatted as an uppercase hash.\n", + "examples": [ + "0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0" + ], + "name": "tls.client.hash.sha256", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Distinguished name of [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of the issuer of the x.509 certificate presented by the client.", + "examples": [ + "CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com" + ], + "name": "tls.client.issuer", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A hash that identifies clients based on how they perform an SSL/TLS handshake.", + "examples": [ + "d4e5b18d6b55c71272893221c96ba240" + ], + "name": "tls.client.ja3", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Date/Time indicating when client certificate is no longer considered valid.", + "examples": [ + "2021-01-01T00:00:00.000Z" + ], + "name": "tls.client.not_after", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Date/Time indicating when client certificate is first considered valid.", + "examples": [ + "1970-01-01T00:00:00.000Z" + ], + "name": "tls.client.not_before", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Distinguished name of subject of the x.509 certificate presented by the client.", + "examples": [ + "CN=myclient, OU=Documentation Team, DC=example, DC=com" + ], + "name": "tls.client.subject", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of ciphers offered by the client during the client hello.", + "examples": [ + [ + "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" + ] + ], + "name": "tls.client.supported_ciphers", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "String indicating the curve used for the given cipher, when applicable", + "examples": [ + "secp256r1" + ], + "name": "tls.curve", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Boolean flag indicating if the TLS negotiation was successful and transitioned to an encrypted tunnel.", + "examples": [ + true + ], + "name": "tls.established", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "String indicating the protocol being tunneled. Per the values in the [IANA registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), this string should be lower case.\n", + "examples": [ + "http/1.1" + ], + "name": "tls.next_protocol", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Normalized lowercase protocol name parsed from original string of the negotiated [SSL/TLS protocol version](https://docs.openssl.org/1.1.1/man3/SSL_get_version/#return-values)\n", + "name": "tls.protocol.name", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "ssl", + "stability": "development", + "value": "ssl" + }, + { + "id": "tls", + "stability": "development", + "value": "tls" + } + ] + } + }, + { + "brief": "Numeric part of the version parsed from the original string of the negotiated [SSL/TLS protocol version](https://docs.openssl.org/1.1.1/man3/SSL_get_version/#return-values)\n", + "examples": [ + "1.2", + "3" + ], + "name": "tls.protocol.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Boolean flag indicating if this TLS connection was resumed from an existing TLS negotiation.", + "examples": [ + true + ], + "name": "tls.resumed", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "PEM-encoded stand-alone certificate offered by the server. This is usually mutually-exclusive of `server.certificate_chain` since this value also exists in that list.\n", + "examples": [ + "MII..." + ], + "name": "tls.server.certificate", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of PEM-encoded certificates that make up the certificate chain offered by the server. This is usually mutually-exclusive of `server.certificate` since that value should be the first certificate in the chain.\n", + "examples": [ + [ + "MII...", + "MI..." + ] + ], + "name": "tls.server.certificate_chain", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.\n", + "examples": [ + "0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC" + ], + "name": "tls.server.hash.md5", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.\n", + "examples": [ + "9E393D93138888D288266C2D915214D1D1CCEB2A" + ], + "name": "tls.server.hash.sha1", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value should be formatted as an uppercase hash.\n", + "examples": [ + "0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0" + ], + "name": "tls.server.hash.sha256", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Distinguished name of [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of the issuer of the x.509 certificate presented by the client.", + "examples": [ + "CN=Example Root CA, OU=Infrastructure Team, DC=example, DC=com" + ], + "name": "tls.server.issuer", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A hash that identifies servers based on how they perform an SSL/TLS handshake.", + "examples": [ + "d4e5b18d6b55c71272893221c96ba240" + ], + "name": "tls.server.ja3s", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Date/Time indicating when server certificate is no longer considered valid.", + "examples": [ + "2021-01-01T00:00:00.000Z" + ], + "name": "tls.server.not_after", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Date/Time indicating when server certificate is first considered valid.", + "examples": [ + "1970-01-01T00:00:00.000Z" + ], + "name": "tls.server.not_before", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Distinguished name of subject of the x.509 certificate presented by the server.", + "examples": [ + "CN=myserver, OU=Documentation Team, DC=example, DC=com" + ], + "name": "tls.server.subject", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines semantic convention attributes in the TLS namespace.", + "display_name": "TLS Attributes", + "id": "registry.tls", + "lineage": { + "provenance": { + "path": "/home/weaver/source/tls/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The AWS request ID as returned in the response headers `x-amzn-requestid`, `x-amzn-request-id` or `x-amz-request-id`.", + "examples": [ + "79b9da39-b7ae-508a-a6bc-864b2829c622", + "C9ER4AJX75574TDJ" + ], + "name": "aws.request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The AWS extended request ID as returned in the response header `x-amz-id-2`.", + "examples": [ + "wzHcyEWfmOGDIE5QOhTAqFDoDWP3y8IUvpNINCwL9N4TEHbUw0/gZJ+VZTmCNCWR7fezEN3eCiQ=" + ], + "name": "aws.extended_request_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This section defines generic attributes for AWS services.\n", + "display_name": "General AWS Attributes", + "id": "registry.aws", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The keys in the `RequestItems` object field.", + "examples": [ + [ + "Users", + "Cats" + ] + ], + "name": "aws.dynamodb.table_names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of each item in the `ConsumedCapacity` response field.", + "examples": [ + [ + "{ \"CapacityUnits\": number, \"GlobalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"LocalSecondaryIndexes\": { \"string\" : { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }, \"ReadCapacityUnits\": number, \"Table\": { \"CapacityUnits\": number, \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number }, \"TableName\": \"string\", \"WriteCapacityUnits\": number }" + ] + ], + "name": "aws.dynamodb.consumed_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of the `ItemCollectionMetrics` response field.", + "examples": [ + "{ \"string\" : [ { \"ItemCollectionKey\": { \"string\" : { \"B\": blob, \"BOOL\": boolean, \"BS\": [ blob ], \"L\": [ \"AttributeValue\" ], \"M\": { \"string\" : \"AttributeValue\" }, \"N\": \"string\", \"NS\": [ \"string\" ], \"NULL\": boolean, \"S\": \"string\", \"SS\": [ \"string\" ] } }, \"SizeEstimateRangeGB\": [ number ] } ] }" + ], + "name": "aws.dynamodb.item_collection_metrics", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `ProvisionedThroughput.ReadCapacityUnits` request parameter.", + "examples": [ + 1.0, + 2.0 + ], + "name": "aws.dynamodb.provisioned_read_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The value of the `ProvisionedThroughput.WriteCapacityUnits` request parameter.", + "examples": [ + 1.0, + 2.0 + ], + "name": "aws.dynamodb.provisioned_write_capacity", + "requirement_level": "recommended", + "stability": "development", + "type": "double" + }, + { + "brief": "The value of the `ConsistentRead` request parameter.", + "name": "aws.dynamodb.consistent_read", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The value of the `ProjectionExpression` request parameter.", + "examples": [ + "Title", + "Title, Price, Color", + "Title, Description, RelatedItems, ProductReviews" + ], + "name": "aws.dynamodb.projection", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `Limit` request parameter.", + "examples": [ + 10 + ], + "name": "aws.dynamodb.limit", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `AttributesToGet` request parameter.", + "examples": [ + [ + "lives", + "id" + ] + ], + "name": "aws.dynamodb.attributes_to_get", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value of the `IndexName` request parameter.", + "examples": [ + "name_to_group" + ], + "name": "aws.dynamodb.index_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The value of the `Select` request parameter.", + "examples": [ + "ALL_ATTRIBUTES", + "COUNT" + ], + "name": "aws.dynamodb.select", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The JSON-serialized value of each item of the `GlobalSecondaryIndexes` request field", + "examples": [ + [ + "{ \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }" + ] + ], + "name": "aws.dynamodb.global_secondary_indexes", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of each item of the `LocalSecondaryIndexes` request field.", + "examples": [ + [ + "{ \"IndexArn\": \"string\", \"IndexName\": \"string\", \"IndexSizeBytes\": number, \"ItemCount\": number, \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" } }" + ] + ], + "name": "aws.dynamodb.local_secondary_indexes", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The value of the `ExclusiveStartTableName` request parameter.", + "examples": [ + "Users", + "CatsTable" + ], + "name": "aws.dynamodb.exclusive_start_table", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The number of items in the `TableNames` response parameter.", + "examples": [ + 20 + ], + "name": "aws.dynamodb.table_count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `ScanIndexForward` request parameter.", + "name": "aws.dynamodb.scan_forward", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The value of the `Segment` request parameter.", + "examples": [ + 10 + ], + "name": "aws.dynamodb.segment", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `TotalSegments` request parameter.", + "examples": [ + 100 + ], + "name": "aws.dynamodb.total_segments", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `Count` response parameter.", + "examples": [ + 10 + ], + "name": "aws.dynamodb.count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The value of the `ScannedCount` response parameter.", + "examples": [ + 50 + ], + "name": "aws.dynamodb.scanned_count", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "The JSON-serialized value of each item in the `AttributeDefinitions` request field.", + "examples": [ + [ + "{ \"AttributeName\": \"string\", \"AttributeType\": \"string\" }" + ] + ], + "name": "aws.dynamodb.attribute_definitions", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The JSON-serialized value of each item in the `GlobalSecondaryIndexUpdates` request field.", + "examples": [ + [ + "{ \"Create\": { \"IndexName\": \"string\", \"KeySchema\": [ { \"AttributeName\": \"string\", \"KeyType\": \"string\" } ], \"Projection\": { \"NonKeyAttributes\": [ \"string\" ], \"ProjectionType\": \"string\" }, \"ProvisionedThroughput\": { \"ReadCapacityUnits\": number, \"WriteCapacityUnits\": number } }" + ] + ], + "name": "aws.dynamodb.global_secondary_index_updates", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This document defines attributes for AWS DynamoDB.\n", + "display_name": "Amazon DynamoDB Attributes", + "id": "registry.aws.dynamodb", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The Amazon Resource Name (ARN) of an [ECS container instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).\n", + "examples": [ + "arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9" + ], + "name": "aws.ecs.container.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ARN of an [ECS cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).\n", + "examples": [ + "arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster" + ], + "name": "aws.ecs.cluster.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n", + "name": "aws.ecs.launchtype", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Amazon EC2", + "id": "ec2", + "stability": "development", + "value": "ec2" + }, + { + "brief": "Amazon Fargate", + "id": "fargate", + "stability": "development", + "value": "fargate" + } + ] + } + }, + { + "brief": "The ARN of a running [ECS task](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-account-settings.html#ecs-resource-ids).\n", + "examples": [ + "arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b", + "arn:aws:ecs:us-west-1:123456789123:task/my-cluster/task-id/23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd" + ], + "name": "aws.ecs.task.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The family name of the [ECS task definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html) used to create the ECS task.\n", + "examples": [ + "opentelemetry-family" + ], + "name": "aws.ecs.task.family", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ID of a running ECS task. The ID MUST be extracted from `task.arn`.\n", + "examples": [ + "10838bed-421f-43ef-870a-f43feacbbb5b", + "23ebb8ac-c18f-46c6-8bbe-d55d0e37cfbd" + ], + "name": "aws.ecs.task.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The revision for the task definition used to create the ECS task.\n", + "examples": [ + "8", + "26" + ], + "name": "aws.ecs.task.revision", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for AWS Elastic Container Service (ECS).\n", + "display_name": "Amazon ECS Attributes", + "id": "registry.aws.ecs", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The ARN of an EKS cluster.\n", + "examples": [ + "arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster" + ], + "name": "aws.eks.cluster.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for AWS Elastic Kubernetes Service (EKS).\n", + "display_name": "Amazon EKS Attributes", + "id": "registry.aws.eks", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name(s) of the AWS log group(s) an application is writing to.\n", + "examples": [ + [ + "/aws/lambda/my-function", + "opentelemetry-service" + ] + ], + "name": "aws.log.group.names", + "note": "Multiple log groups must be supported for cases like multi-container applications, where a single application has sidecar containers, and each write to their own log group.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The Amazon Resource Name(s) (ARN) of the AWS log group(s).\n", + "examples": [ + [ + "arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*" + ] + ], + "name": "aws.log.group.arns", + "note": "See the [log group ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The name(s) of the AWS log stream(s) an application is writing to.\n", + "examples": [ + [ + "logs/main/10838bed-421f-43ef-870a-f43feacbbb5b" + ] + ], + "name": "aws.log.stream.names", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The ARN(s) of the AWS log stream(s).\n", + "examples": [ + [ + "arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b" + ] + ], + "name": "aws.log.stream.arns", + "note": "See the [log stream ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). One log group can contain several log streams, so these ARNs necessarily identify both a log group and a log stream.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "This document defines attributes for AWS Logs.\n", + "display_name": "Amazon Logs Attributes", + "id": "registry.aws.log", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The full invoked ARN as provided on the `Context` passed to the function (`Lambda-Runtime-Invoked-Function-Arn` header on the `/runtime/invocation/next` applicable).\n", + "examples": [ + "arn:aws:lambda:us-east-1:123456:function:myfunction:myalias" + ], + "name": "aws.lambda.invoked_arn", + "note": "This may be different from `cloud.resource_id` if an alias is involved.", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The UUID of the [AWS Lambda EvenSource Mapping](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-eventsourcemapping.html). An event source is mapped to a lambda function. It\u0027s contents are read by Lambda and used to trigger a function. This isn\u0027t available in the lambda execution context or the lambda runtime environtment. This is going to be populated by the AWS SDK for each language when that UUID is present. Some of these operations are Create/Delete/Get/List/Update EventSourceMapping.\n", + "examples": [ + "587ad24b-03b9-4413-8202-bbd56b36e5b7" + ], + "name": "aws.lambda.resource_mapping.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for AWS Lambda.\n", + "display_name": "Amazon Lambda Attributes", + "id": "registry.aws.lambda", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The S3 bucket name the request refers to. Corresponds to the `--bucket` parameter of the [S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) operations.", + "examples": [ + "some-bucket-name" + ], + "name": "aws.s3.bucket", + "note": "The `bucket` attribute is applicable to all S3 operations that reference a bucket, i.e. that require the bucket name as a mandatory parameter.\nThis applies to almost all S3 operations except `list-buckets`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The S3 object key the request refers to. Corresponds to the `--key` parameter of the [S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) operations.", + "examples": [ + "someFile.yml" + ], + "name": "aws.s3.key", + "note": "The `key` attribute is applicable to all object-related S3 operations, i.e. that require the object key as a mandatory parameter.\nThis applies in particular to the following operations:\n\n- [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)\n- [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html)\n- [get-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html)\n- [head-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html)\n- [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html)\n- [restore-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html)\n- [select-object-content](https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html)\n- [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)\n- [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)\n- [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html)\n- [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)\n- [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n- [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The source object (in the form `bucket`/`key`) for the copy operation.", + "examples": [ + "someFile.yml" + ], + "name": "aws.s3.copy_source", + "note": "The `copy_source` attribute applies to S3 copy operations and corresponds to the `--copy-source` parameter\nof the [copy-object operation within the S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html).\nThis applies in particular to the following operations:\n\n- [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html)\n- [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Upload ID that identifies the multipart upload.", + "examples": [ + "dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ" + ], + "name": "aws.s3.upload_id", + "note": "The `upload_id` attribute applies to S3 multipart-upload operations and corresponds to the `--upload-id` parameter\nof the [S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) multipart operations.\nThis applies in particular to the following operations:\n\n- [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html)\n- [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html)\n- [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html)\n- [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\n- [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html)\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The delete request container that specifies the objects to be deleted.", + "examples": [ + "Objects=[{Key=string,VersionId=string},{Key=string,VersionId=string}],Quiet=boolean" + ], + "name": "aws.s3.delete", + "note": "The `delete` attribute is only applicable to the [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) operation.\nThe `delete` attribute corresponds to the `--delete` parameter of the\n[delete-objects operation within the S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The part number of the part being uploaded in a multipart-upload operation. This is a positive integer between 1 and 10,000.", + "examples": [ + 3456 + ], + "name": "aws.s3.part_number", + "note": "The `part_number` attribute is only applicable to the [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html)\nand [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) operations.\nThe `part_number` attribute corresponds to the `--part-number` parameter of the\n[upload-part operation within the S3 API](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "This document defines attributes for AWS S3.\n", + "display_name": "Amazon S3 Attributes", + "id": "registry.aws.s3", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The URL of the AWS SQS Queue. It\u0027s a unique identifier for a queue in Amazon Simple Queue Service (SQS) and is used to access the queue and perform actions on it.\n", + "examples": [ + "https://sqs.us-east-1.amazonaws.com/123456789012/MyQueue" + ], + "name": "aws.sqs.queue.url", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for AWS SQS.\n", + "display_name": "Amazon SQS Attributes", + "id": "registry.aws.sqs", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The ARN of the AWS SNS Topic. An Amazon SNS [topic](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html) is a logical access point that acts as a communication channel.\n", + "examples": [ + "arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE" + ], + "name": "aws.sns.topic.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for AWS SNS.\n", + "display_name": "Amazon SNS Attributes", + "id": "registry.aws.sns", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the AWS Kinesis [stream](https://docs.aws.amazon.com/streams/latest/dev/introduction.html) the request refers to. Corresponds to the `--stream-name` parameter of the Kinesis [describe-stream](https://docs.aws.amazon.com/cli/latest/reference/kinesis/describe-stream.html) operation.\n", + "examples": [ + "some-stream-name" + ], + "name": "aws.kinesis.stream_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for AWS Kinesis.\n", + "display_name": "Amazon Kinesis Attributes", + "id": "registry.aws.kinesis", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The ARN of the AWS Step Functions Activity.\n", + "examples": [ + "arn:aws:states:us-east-1:123456789012:activity:get-greeting" + ], + "name": "aws.step_functions.activity.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The ARN of the AWS Step Functions State Machine.\n", + "examples": [ + "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine:1" + ], + "name": "aws.step_functions.state_machine.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for AWS Step Functions.\n", + "display_name": "Amazon Step Functions Attributes", + "id": "registry.aws.step_functions", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The ARN of the Secret stored in the Secrets Mangger\n", + "examples": [ + "arn:aws:secretsmanager:us-east-1:123456789012:secret:SecretName-6RandomCharacters" + ], + "name": "aws.secretsmanager.secret.arn", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for AWS Secrets Manager.\n", + "display_name": "Amazon Secrets Manager Attributes", + "id": "registry.aws.secretsmanager", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The unique identifier of the AWS Bedrock Guardrail. A [guardrail](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html) helps safeguard and prevent unwanted behavior from model responses or user messages.\n", + "examples": [ + "sgi5gkybzqak" + ], + "name": "aws.bedrock.guardrail.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The unique identifier of the AWS Bedrock Knowledge base. A [knowledge base](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html) is a bank of information that can be queried by models to generate more relevant responses and augment prompts.\n", + "examples": [ + "XFWUPB9PAW" + ], + "name": "aws.bedrock.knowledge_base.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines attributes for AWS Bedrock.\n", + "display_name": "Amazon Bedrock Attributes", + "id": "registry.aws.bedrock", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aws/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Container name used by container runtime.\n", + "examples": [ + "opentelemetry-autoconf" + ], + "name": "container.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Container ID. Usually a UUID, as for example used to [identify Docker containers](https://docs.docker.com/engine/containers/run/#container-identification). The UUID might be abbreviated.\n", + "examples": [ + "a3bf90e006b2" + ], + "name": "container.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Container labels, `\u003ckey\u003e` being the label name, the value being the label value.\n", + "examples": [ + "nginx" + ], + "name": "container.label", + "note": "For example, a docker container label `app` with value `nginx` SHOULD be recorded as the `container.label.app` attribute with value `\"nginx\"`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "template[string]" + }, + { + "brief": "The digest of the OCI image manifest. For container images specifically is the digest by which the container image is known.\n", + "examples": [ + "sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4" + ], + "name": "oci.manifest.digest", + "note": "Follows [OCI Image Manifest Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md), and specifically the [Digest property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests).\nAn example can be found in [Example Image Manifest](https://github.com/opencontainers/image-spec/blob/main/manifest.md#example-image-manifest).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The command used to run the container (i.e. the command name).\n", + "examples": [ + "otelcontribcol" + ], + "name": "container.command", + "note": "If using embedded credentials or sensitive data, it is recommended to remove them to prevent potential leakage.\n", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "The full command run by the container as a single string representing the full command.\n", + "examples": [ + "otelcontribcol --config config.yaml" + ], + "name": "container.command_line", + "requirement_level": "opt_in", + "stability": "development", + "type": "string" + }, + { + "brief": "All the command arguments (including the command/executable itself) run by the container.\n", + "examples": [ + [ + "otelcontribcol", + "--config", + "config.yaml" + ] + ], + "name": "container.command_args", + "requirement_level": "opt_in", + "stability": "development", + "type": "string[]" + } + ], + "brief": "A container instance.\n", + "id": "entity.container", + "lineage": { + "attributes": { + "container.command": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.container" + }, + "container.command_args": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.container" + }, + "container.command_line": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.container" + }, + "container.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.container" + }, + "container.label": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.container" + }, + "container.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.container" + }, + "oci.manifest.digest": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.oci.manifest" + } + }, + "provenance": { + "path": "/home/weaver/source/container/entities.yaml", + "registry_id": "main" + } + }, + "name": "container", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Name of the image the container was built on.\n", + "examples": [ + "gcr.io/opentelemetry/operator" + ], + "name": "container.image.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Container image tags. An example can be found in [Docker Image Inspect](https://docs.docker.com/reference/api/engine/version/v1.43/#tag/Image/operation/ImageInspect). Should be only the `\u003ctag\u003e` section of the full name for example from `registry.example.com/my-org/my-image:\u003ctag\u003e`.\n", + "examples": [ + [ + "v1.27.1", + "3.5.7-0" + ] + ], + "name": "container.image.tags", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Runtime specific image identifier. Usually a hash algorithm followed by a UUID.\n", + "examples": [ + "sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f" + ], + "name": "container.image.id", + "note": "Docker defines a sha256 of the image id; `container.image.id` corresponds to the `Image` field from the Docker container inspect [API](https://docs.docker.com/reference/api/engine/version/v1.43/#tag/Container/operation/ContainerInspect) endpoint.\nK8s defines a link to the container registry repository with digest `\"imageID\": \"registry.azurecr.io /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625\"`.\nThe ID is assigned by the container runtime and can vary in different environments. Consider using `oci.manifest.digest` if it is important to identify the same image in different environments/runtimes.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Repo digests of the container image as provided by the container runtime.\n", + "examples": [ + [ + "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb", + "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" + ] + ], + "name": "container.image.repo_digests", + "note": "[Docker](https://docs.docker.com/reference/api/engine/version/v1.43/#tag/Image/operation/ImageInspect) and [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238) report those under the `RepoDigests` field.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + } + ], + "brief": "The image used for the container.\n", + "id": "entity.container.image", + "lineage": { + "attributes": { + "container.image.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.container" + }, + "container.image.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.container" + }, + "container.image.repo_digests": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.container" + }, + "container.image.tags": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.container" + } + }, + "provenance": { + "path": "/home/weaver/source/container/entities.yaml", + "registry_id": "main" + } + }, + "name": "container.image", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "A description about the runtime which could include, for example details about the CRI/API version being used or other customisations.\n", + "examples": [ + "docker://19.3.1 - CRI: 1.22.0" + ], + "name": "container.runtime.description", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "development", + "type": "string" + }, + { + "brief": "The container runtime managing this container.\n", + "examples": [ + "docker", + "containerd", + "rkt" + ], + "name": "container.runtime.name", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "string" + }, + { + "brief": "The version of the runtime of this process, as returned by the runtime without modification.\n", + "examples": "1.0.0", + "name": "container.runtime.version", + "requirement_level": "recommended", + "role": "identifying", + "stability": "development", + "type": "string" + } + ], + "brief": "The runtime being used to run the container\n", + "id": "entity.container.runtime", + "lineage": { + "attributes": { + "container.runtime.description": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.container" + }, + "container.runtime.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.container" + }, + "container.runtime.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.container" + } + }, + "provenance": { + "path": "/home/weaver/source/container/entities.yaml", + "registry_id": "main" + } + }, + "name": "container.runtime", + "stability": "development", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "Destination address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "destination.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "destination.address", + "note": "When observed from the source side, and when communicating through an intermediary, `destination.address` SHOULD represent the destination address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Destination port number", + "examples": [ + 3389, + 2888 + ], + "name": "destination.port", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "These attributes may be used to describe the receiver of a network exchange/packet. These should be used when there is no client/server relationship between the two sides, or when that relationship is unknown. This covers low-level network interactions (e.g. packet tracing) where you don\u0027t know if there was a connection or which side initiated it. This also covers unidirectional UDP flows and peer-to-peer communication where the \"user-facing\" surface of the protocol / API doesn\u0027t expose a clear notion of client and server.\n", + "display_name": "Destination Attributes", + "id": "registry.destination", + "lineage": { + "provenance": { + "path": "/home/weaver/source/destination/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Identifies the class / type of event.\n", + "deprecated": { + "note": "The value of this attribute MUST now be set as the value of the EventName field on the LogRecord to indicate that the LogRecord represents an Event.\n", + "reason": "uncategorized" + }, + "examples": [ + "browser.mouse.click", + "device.app.lifecycle" + ], + "name": "event.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Attributes for Events represented using Log Records.\n", + "display_name": "Event Attributes", + "id": "registry.event.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/event/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the component\n", + "name": "hw.type", + "note": "Describes the category of the hardware component for which `hw.state` is being reported. For example, `hw.type=temperature` along with `hw.state=degraded` would indicate that the temperature of the hardware component has been reported as `degraded`.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Battery", + "id": "battery", + "stability": "development", + "value": "battery" + }, + { + "brief": "CPU", + "id": "cpu", + "stability": "development", + "value": "cpu" + }, + { + "brief": "Disk controller", + "id": "disk_controller", + "stability": "development", + "value": "disk_controller" + }, + { + "brief": "Enclosure", + "id": "enclosure", + "stability": "development", + "value": "enclosure" + }, + { + "brief": "Fan", + "id": "fan", + "stability": "development", + "value": "fan" + }, + { + "brief": "GPU", + "id": "gpu", + "stability": "development", + "value": "gpu" + }, + { + "brief": "Logical disk", + "id": "logical_disk", + "stability": "development", + "value": "logical_disk" + }, + { + "brief": "Memory", + "id": "memory", + "stability": "development", + "value": "memory" + }, + { + "brief": "Network", + "id": "network", + "stability": "development", + "value": "network" + }, + { + "brief": "Physical disk", + "id": "physical_disk", + "stability": "development", + "value": "physical_disk" + }, + { + "brief": "Power supply", + "id": "power_supply", + "stability": "development", + "value": "power_supply" + }, + { + "brief": "Tape drive", + "id": "tape_drive", + "stability": "development", + "value": "tape_drive" + }, + { + "brief": "Temperature", + "id": "temperature", + "stability": "development", + "value": "temperature" + }, + { + "brief": "Voltage", + "id": "voltage", + "stability": "development", + "value": "voltage" + } + ] + } + } + ], + "brief": "Attributes for hardware metrics", + "id": "metric_attributes.hw.attributes", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/common-metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the component\n", + "name": "hw.type", + "note": "Describes the category of the hardware component for which `hw.state` is being reported. For example, `hw.type=temperature` along with `hw.state=degraded` would indicate that the temperature of the hardware component has been reported as `degraded`.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Battery", + "id": "battery", + "stability": "development", + "value": "battery" + }, + { + "brief": "CPU", + "id": "cpu", + "stability": "development", + "value": "cpu" + }, + { + "brief": "Disk controller", + "id": "disk_controller", + "stability": "development", + "value": "disk_controller" + }, + { + "brief": "Enclosure", + "id": "enclosure", + "stability": "development", + "value": "enclosure" + }, + { + "brief": "Fan", + "id": "fan", + "stability": "development", + "value": "fan" + }, + { + "brief": "GPU", + "id": "gpu", + "stability": "development", + "value": "gpu" + }, + { + "brief": "Logical disk", + "id": "logical_disk", + "stability": "development", + "value": "logical_disk" + }, + { + "brief": "Memory", + "id": "memory", + "stability": "development", + "value": "memory" + }, + { + "brief": "Network", + "id": "network", + "stability": "development", + "value": "network" + }, + { + "brief": "Physical disk", + "id": "physical_disk", + "stability": "development", + "value": "physical_disk" + }, + { + "brief": "Power supply", + "id": "power_supply", + "stability": "development", + "value": "power_supply" + }, + { + "brief": "Tape drive", + "id": "tape_drive", + "stability": "development", + "value": "tape_drive" + }, + { + "brief": "Temperature", + "id": "temperature", + "stability": "development", + "value": "temperature" + }, + { + "brief": "Voltage", + "id": "voltage", + "stability": "development", + "value": "voltage" + } + ] + } + } + ], + "brief": "Energy consumed by the component.", + "id": "metric.hw.energy", + "instrument": "counter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/common-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.energy", + "stability": "development", + "type": "metric", + "unit": "J" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the component\n", + "name": "hw.type", + "note": "Describes the category of the hardware component for which `hw.state` is being reported. For example, `hw.type=temperature` along with `hw.state=degraded` would indicate that the temperature of the hardware component has been reported as `degraded`.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Battery", + "id": "battery", + "stability": "development", + "value": "battery" + }, + { + "brief": "CPU", + "id": "cpu", + "stability": "development", + "value": "cpu" + }, + { + "brief": "Disk controller", + "id": "disk_controller", + "stability": "development", + "value": "disk_controller" + }, + { + "brief": "Enclosure", + "id": "enclosure", + "stability": "development", + "value": "enclosure" + }, + { + "brief": "Fan", + "id": "fan", + "stability": "development", + "value": "fan" + }, + { + "brief": "GPU", + "id": "gpu", + "stability": "development", + "value": "gpu" + }, + { + "brief": "Logical disk", + "id": "logical_disk", + "stability": "development", + "value": "logical_disk" + }, + { + "brief": "Memory", + "id": "memory", + "stability": "development", + "value": "memory" + }, + { + "brief": "Network", + "id": "network", + "stability": "development", + "value": "network" + }, + { + "brief": "Physical disk", + "id": "physical_disk", + "stability": "development", + "value": "physical_disk" + }, + { + "brief": "Power supply", + "id": "power_supply", + "stability": "development", + "value": "power_supply" + }, + { + "brief": "Tape drive", + "id": "tape_drive", + "stability": "development", + "value": "tape_drive" + }, + { + "brief": "Temperature", + "id": "temperature", + "stability": "development", + "value": "temperature" + }, + { + "brief": "Voltage", + "id": "voltage", + "stability": "development", + "value": "voltage" + } + ] + } + }, + { + "brief": "The type of error encountered by the component.", + "examples": [ + "uncorrected", + "zero_buffer_credit", + "crc", + "bad_sector" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code reported by the component, the canonical name of the error, or another low-cardinality error identifier. Instrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Direction of network traffic for network errors.", + "examples": [ + "receive", + "transmit" + ], + "name": "network.io.direction", + "note": "This attribute SHOULD only be used when `hw.type` is set to `\"network\"` to indicate the direction of the error.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "id": "transmit", + "stability": "development", + "value": "transmit" + }, + { + "id": "receive", + "stability": "development", + "value": "receive" + } + ] + } + } + ], + "brief": "Number of errors encountered by the component.", + "id": "metric.hw.errors", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "network.io.direction": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/common-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.errors", + "stability": "development", + "type": "metric", + "unit": "{error}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Type of the component\n", + "name": "hw.type", + "note": "Describes the category of the hardware component for which `hw.state` is being reported. For example, `hw.type=temperature` along with `hw.state=degraded` would indicate that the temperature of the hardware component has been reported as `degraded`.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Battery", + "id": "battery", + "stability": "development", + "value": "battery" + }, + { + "brief": "CPU", + "id": "cpu", + "stability": "development", + "value": "cpu" + }, + { + "brief": "Disk controller", + "id": "disk_controller", + "stability": "development", + "value": "disk_controller" + }, + { + "brief": "Enclosure", + "id": "enclosure", + "stability": "development", + "value": "enclosure" + }, + { + "brief": "Fan", + "id": "fan", + "stability": "development", + "value": "fan" + }, + { + "brief": "GPU", + "id": "gpu", + "stability": "development", + "value": "gpu" + }, + { + "brief": "Logical disk", + "id": "logical_disk", + "stability": "development", + "value": "logical_disk" + }, + { + "brief": "Memory", + "id": "memory", + "stability": "development", + "value": "memory" + }, + { + "brief": "Network", + "id": "network", + "stability": "development", + "value": "network" + }, + { + "brief": "Physical disk", + "id": "physical_disk", + "stability": "development", + "value": "physical_disk" + }, + { + "brief": "Power supply", + "id": "power_supply", + "stability": "development", + "value": "power_supply" + }, + { + "brief": "Tape drive", + "id": "tape_drive", + "stability": "development", + "value": "tape_drive" + }, + { + "brief": "Temperature", + "id": "temperature", + "stability": "development", + "value": "temperature" + }, + { + "brief": "Voltage", + "id": "voltage", + "stability": "development", + "value": "voltage" + } + ] + } + } + ], + "brief": "Instantaneous power consumed by the component.", + "id": "metric.hw.power", + "instrument": "gauge", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/common-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.power", + "note": "It is recommended to report `hw.energy` instead of `hw.power` when possible.\n", + "stability": "development", + "type": "metric", + "unit": "W" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "The current state of the component\n", + "name": "hw.state", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Degraded", + "id": "degraded", + "stability": "development", + "value": "degraded" + }, + { + "brief": "Failed", + "id": "failed", + "stability": "development", + "value": "failed" + }, + { + "brief": "Needs Cleaning", + "id": "needs_cleaning", + "stability": "development", + "value": "needs_cleaning" + }, + { + "brief": "OK", + "id": "ok", + "stability": "development", + "value": "ok" + }, + { + "brief": "Predicted Failure", + "id": "predicted_failure", + "stability": "development", + "value": "predicted_failure" + } + ] + } + }, + { + "brief": "Type of the component\n", + "name": "hw.type", + "note": "Describes the category of the hardware component for which `hw.state` is being reported. For example, `hw.type=temperature` along with `hw.state=degraded` would indicate that the temperature of the hardware component has been reported as `degraded`.\n", + "requirement_level": "required", + "stability": "development", + "type": { + "members": [ + { + "brief": "Battery", + "id": "battery", + "stability": "development", + "value": "battery" + }, + { + "brief": "CPU", + "id": "cpu", + "stability": "development", + "value": "cpu" + }, + { + "brief": "Disk controller", + "id": "disk_controller", + "stability": "development", + "value": "disk_controller" + }, + { + "brief": "Enclosure", + "id": "enclosure", + "stability": "development", + "value": "enclosure" + }, + { + "brief": "Fan", + "id": "fan", + "stability": "development", + "value": "fan" + }, + { + "brief": "GPU", + "id": "gpu", + "stability": "development", + "value": "gpu" + }, + { + "brief": "Logical disk", + "id": "logical_disk", + "stability": "development", + "value": "logical_disk" + }, + { + "brief": "Memory", + "id": "memory", + "stability": "development", + "value": "memory" + }, + { + "brief": "Network", + "id": "network", + "stability": "development", + "value": "network" + }, + { + "brief": "Physical disk", + "id": "physical_disk", + "stability": "development", + "value": "physical_disk" + }, + { + "brief": "Power supply", + "id": "power_supply", + "stability": "development", + "value": "power_supply" + }, + { + "brief": "Tape drive", + "id": "tape_drive", + "stability": "development", + "value": "tape_drive" + }, + { + "brief": "Temperature", + "id": "temperature", + "stability": "development", + "value": "temperature" + }, + { + "brief": "Voltage", + "id": "voltage", + "stability": "development", + "value": "voltage" + } + ] + } + } + ], + "brief": "Operational status: `1` (true) or `0` (false) for each of the possible states.", + "id": "metric.hw.status", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.state": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/common-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "hw.status", + "note": "`hw.status` is currently specified as an *UpDownCounter* but would ideally be represented using a [*StateSet* as defined in OpenMetrics](https://github.com/prometheus/OpenMetrics/blob/v1.0.0/specification/OpenMetrics.md#stateset). This semantic convention will be updated once *StateSet* is specified in OpenTelemetry. This planned change is not expected to have any consequence on the way users query their timeseries backend to retrieve the values of `hw.status` over time.\n", + "stability": "development", + "type": "metric", + "unit": "1" + }, + { + "attributes": [ + { + "brief": "Deprecated, use `messaging.destination.partition.id` instead.\n", + "deprecated": { + "note": "Record string representation of the partition id in `messaging.destination.partition.id` attribute.", + "reason": "uncategorized" + }, + "examples": 2, + "name": "messaging.kafka.destination.partition", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, use `messaging.operation.type` instead.\n", + "deprecated": { + "note": "Replaced by `messaging.operation.type`.", + "reason": "renamed", + "renamed_to": "messaging.operation.type" + }, + "examples": [ + "publish", + "create", + "process" + ], + "name": "messaging.operation", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "annotations": { + "code_generation": { + "exclude": true + } + }, + "brief": "Deprecated, use `messaging.client.id` instead.\n", + "deprecated": { + "note": "Replaced by `messaging.client.id`.", + "reason": "renamed", + "renamed_to": "messaging.client.id" + }, + "examples": [ + "client-5", + "myhost@8742@s8083jm" + ], + "name": "messaging.client_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `messaging.consumer.group.name` instead.\n", + "deprecated": { + "note": "Replaced by `messaging.consumer.group.name`.", + "reason": "renamed", + "renamed_to": "messaging.consumer.group.name" + }, + "examples": "my-group", + "name": "messaging.kafka.consumer.group", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `messaging.consumer.group.name` instead.\n", + "deprecated": { + "note": "Replaced by `messaging.consumer.group.name` on the consumer spans. No replacement for producer spans.\n", + "reason": "uncategorized" + }, + "examples": "myConsumerGroup", + "name": "messaging.rocketmq.client_group", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `messaging.consumer.group.name` instead.\n", + "deprecated": { + "note": "Replaced by `messaging.consumer.group.name`.", + "reason": "renamed", + "renamed_to": "messaging.consumer.group.name" + }, + "examples": "$Default", + "name": "messaging.eventhubs.consumer.group", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `messaging.destination.subscription.name` instead.\n", + "deprecated": { + "note": "Replaced by `messaging.destination.subscription.name`.", + "reason": "renamed", + "renamed_to": "messaging.destination.subscription.name" + }, + "examples": "subscription-a", + "name": "messaging.servicebus.destination.subscription_name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Deprecated, use `messaging.kafka.offset` instead.\n", + "deprecated": { + "note": "Replaced by `messaging.kafka.offset`.", + "reason": "renamed", + "renamed_to": "messaging.kafka.offset" + }, + "examples": 42, + "name": "messaging.kafka.message.offset", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Deprecated, no replacement at this time.", + "deprecated": { + "note": "Removed. No replacement at this time.", + "reason": "obsoleted" + }, + "name": "messaging.destination_publish.anonymous", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Deprecated, no replacement at this time.", + "deprecated": { + "note": "Removed. No replacement at this time.", + "reason": "obsoleted" + }, + "examples": [ + "MyQueue", + "MyTopic" + ], + "name": "messaging.destination_publish.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes deprecated messaging attributes.", + "display_name": "Deprecated Messaging Attributes", + "id": "registry.messaging.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/messaging/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Parent-child Reference type", + "name": "opentracing.ref_type", + "note": "The causal relationship between a child Span and a parent Span.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "The parent Span depends on the child Span in some capacity", + "id": "child_of", + "stability": "development", + "value": "child_of" + }, + { + "brief": "The parent Span doesn\u0027t depend in any way on the result of the child Span", + "id": "follows_from", + "stability": "development", + "value": "follows_from" + } + ] + } + } + ], + "brief": "Attributes used by the OpenTracing Shim layer.", + "display_name": "OpenTracing Attributes", + "id": "registry.opentracing", + "lineage": { + "provenance": { + "path": "/home/weaver/source/opentracing/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes the interpreter or compiler of a single frame.\n", + "examples": [ + "cpython" + ], + "name": "profile.frame.type", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "[.NET](https://wikipedia.org/wiki/.NET)\n", + "id": "dotnet", + "stability": "development", + "value": "dotnet" + }, + { + "brief": "[JVM](https://wikipedia.org/wiki/Java_virtual_machine)\n", + "id": "jvm", + "stability": "development", + "value": "jvm" + }, + { + "brief": "[Kernel](https://wikipedia.org/wiki/Kernel_(operating_system))\n", + "id": "kernel", + "stability": "development", + "value": "kernel" + }, + { + "brief": "Can be one of but not limited to [C](https://wikipedia.org/wiki/C_(programming_language)), [C++](https://wikipedia.org/wiki/C%2B%2B), [Go](https://wikipedia.org/wiki/Go_(programming_language)) or [Rust](https://wikipedia.org/wiki/Rust_(programming_language)). If possible, a more precise value MUST be used.\n", + "id": "native", + "stability": "development", + "value": "native" + }, + { + "brief": "[Perl](https://wikipedia.org/wiki/Perl)\n", + "id": "perl", + "stability": "development", + "value": "perl" + }, + { + "brief": "[PHP](https://wikipedia.org/wiki/PHP)\n", + "id": "php", + "stability": "development", + "value": "php" + }, + { + "brief": "[Python](https://wikipedia.org/wiki/Python_(programming_language))\n", + "id": "cpython", + "stability": "development", + "value": "cpython" + }, + { + "brief": "[Ruby](https://wikipedia.org/wiki/Ruby_(programming_language))\n", + "id": "ruby", + "stability": "development", + "value": "ruby" + }, + { + "brief": "[V8JS](https://wikipedia.org/wiki/V8_(JavaScript_engine))\n", + "id": "v8js", + "stability": "development", + "value": "v8js" + }, + { + "brief": "[Erlang](https://en.wikipedia.org/wiki/BEAM_(Erlang_virtual_machine))\n", + "id": "beam", + "stability": "development", + "value": "beam" + }, + { + "brief": "[Go](https://wikipedia.org/wiki/Go_(programming_language)),\n", + "id": "go", + "stability": "development", + "value": "go" + }, + { + "brief": "[Rust](https://wikipedia.org/wiki/Rust_(programming_language))\n", + "id": "rust", + "stability": "development", + "value": "rust" + } + ] + } + } + ], + "brief": "Describes the origin of a single frame in a Profile.\n", + "display_name": "Profile Frame Attributes", + "id": "registry.profile.frame", + "lineage": { + "provenance": { + "path": "/home/weaver/source/profile/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Source address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "source.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "source.address", + "note": "When observed from the destination side, and when communicating through an intermediary, `source.address` SHOULD represent the source address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Source port number", + "examples": [ + 3389, + 2888 + ], + "name": "source.port", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + } + ], + "brief": "General source attributes.\n", + "id": "source", + "lineage": { + "attributes": { + "source.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.source" + }, + "source.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.source" + } + }, + "provenance": { + "path": "/home/weaver/source/source/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "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", + "YourApp/1.0.0 grpc-java-okhttp/1.27.2" + ], + "name": "user_agent.original", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the user-agent extracted from original. Usually refers to the browser\u0027s name.\n", + "examples": [ + "Safari", + "YourApp" + ], + "name": "user_agent.name", + "note": "[Example](https://www.whatsmyua.info) of extracting browser\u0027s name from original string. In the case of using a user-agent for non-browser products, such as microservices with multiple names/versions inside the `user_agent.original`, the most significant name SHOULD be selected. In such a scenario it should align with `user_agent.version`\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Version of the user-agent extracted from original. Usually refers to the browser\u0027s version\n", + "examples": [ + "14.1.2", + "1.0.0" + ], + "name": "user_agent.version", + "note": "[Example](https://www.whatsmyua.info) of extracting browser\u0027s version from original string. In the case of using a user-agent for non-browser products, such as microservices with multiple names/versions inside the `user_agent.original`, the most significant version SHOULD be selected. In such a scenario it should align with `user_agent.name`\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes user-agent attributes.", + "display_name": "User-agent Attributes", + "id": "registry.user_agent", + "lineage": { + "provenance": { + "path": "/home/weaver/source/user-agent/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Human readable operating system name.", + "examples": [ + "iOS", + "Android", + "Ubuntu" + ], + "name": "user_agent.os.name", + "note": "For mapping user agent strings to OS names, libraries such as [ua-parser](https://github.com/ua-parser) can be utilized.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version string of the operating system as defined in [Version Attributes](/docs/resource/README.md#version-attributes).\n", + "examples": [ + "14.2.1", + "18.04.1" + ], + "name": "user_agent.os.version", + "note": "For mapping user agent strings to OS versions, libraries such as [ua-parser](https://github.com/ua-parser) can be utilized.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Specifies the category of synthetic traffic, such as tests or bots.\n", + "name": "user_agent.synthetic.type", + "note": "This attribute MAY be derived from the contents of the `user_agent.original` attribute. Components that populate the attribute are responsible for determining what they consider to be synthetic bot or test traffic. This attribute can either be set for self-identification purposes, or on telemetry detected to be generated as a result of a synthetic request. This attribute is useful for distinguishing between genuine client traffic and synthetic traffic generated by bots or tests.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Bot source.", + "id": "bot", + "stability": "development", + "value": "bot" + }, + { + "brief": "Synthetic test source.", + "id": "test", + "stability": "development", + "value": "test" + } + ] + } + } + ], + "brief": "Describes the OS user-agent attributes.", + "display_name": "User-agent OS Attributes", + "id": "registry.user_agent.os", + "lineage": { + "provenance": { + "path": "/home/weaver/source/user-agent/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Uniquely identifies the framework API revision offered by a version (`os.version`) of the android operating system. More information can be found in the [Android API levels documentation](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels).\n", + "examples": [ + "33", + "32" + ], + "name": "android.os.api_level", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "This attribute represents the state of the application.\n", + "examples": [ + "created" + ], + "name": "android.app.state", + "note": "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.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has been called in the app for the first time.\n", + "id": "created", + "stability": "development", + "value": "created" + }, + { + "brief": "Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been called when the app was in the foreground state.\n", + "id": "background", + "stability": "development", + "value": "background" + }, + { + "brief": "Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has been called when the app was in either the created or background states.\n", + "id": "foreground", + "stability": "development", + "value": "foreground" + } + ] + } + } + ], + "brief": "The Android platform on which the Android application is running.\n", + "display_name": "Android Attributes", + "id": "registry.android", + "lineage": { + "provenance": { + "path": "/home/weaver/source/android/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Array of brand name and version separated by a space", + "examples": [ + [ + " Not A;Brand 99", + "Chromium 99", + "Chrome 99" + ] + ], + "name": "browser.brands", + "note": "This value is intended to be taken from the [UA client hints API](https://wicg.github.io/ua-client-hints/#interface) (`navigator.userAgentData.brands`).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "The platform on which the browser is running", + "examples": [ + "Windows", + "macOS", + "Android" + ], + "name": "browser.platform", + "note": "This value is intended to be taken from the [UA client hints API](https://wicg.github.io/ua-client-hints/#interface) (`navigator.userAgentData.platform`). If unavailable, the legacy `navigator.platform` API SHOULD NOT be used instead and this attribute SHOULD be left unset in order for the values to be consistent.\nThe list of possible values is defined in the [W3C User-Agent Client Hints specification](https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform). Note that some (but not all) of these values can overlap with values in the [`os.type` and `os.name` attributes](./os.md). However, for consistency, the values in the `browser.platform` attribute should capture the exact value that the user agent provides.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A boolean that is true if the browser is running on a mobile device", + "name": "browser.mobile", + "note": "This value is intended to be taken from the [UA client hints API](https://wicg.github.io/ua-client-hints/#interface) (`navigator.userAgentData.mobile`). If unavailable, this attribute SHOULD be left unset.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "Preferred language of the user using the browser", + "examples": [ + "en", + "en-US", + "fr", + "fr-FR" + ], + "name": "browser.language", + "note": "This value is intended to be taken from the Navigator API `navigator.language`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Full user-agent string provided by the browser", + "examples": [ + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36" + ], + "name": "user_agent.original", + "note": "The user-agent value SHOULD be provided only from browsers that do not have a mechanism to retrieve brands and platform individually from the User-Agent Client Hints API. To retrieve the value, the legacy `navigator.userAgent` API can be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "The web browser in which the application represented by the resource is running. The `browser.*` attributes MUST be used only for resources that represent applications running in a web browser (regardless of whether running on a mobile or desktop device).\n", + "id": "entity.browser", + "lineage": { + "attributes": { + "browser.brands": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.browser" + }, + "browser.language": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.browser" + }, + "browser.mobile": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.browser" + }, + "browser.platform": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.browser" + }, + "user_agent.original": { + "inherited_fields": [ + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note" + ], + "source_group": "registry.user_agent" + } + }, + "provenance": { + "path": "/home/weaver/source/browser/entities.yaml", + "registry_id": "main" + } + }, + "name": "browser", + "stability": "development", + "type": "entity" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The name being queried.", + "examples": [ + "www.example.com", + "dot.net" + ], + "name": "dns.question.name", + "note": "The name represents the queried domain name as it appears in the DNS query without any additional normalization.\n", + "requirement_level": "required", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes the error the DNS lookup failed with.", + "examples": [ + "host_not_found", + "no_recovery", + "java.net.UnknownHostException" + ], + "name": "error.type", + "note": "Instrumentations SHOULD use error code such as one of errors reported by `getaddrinfo`([Linux or other POSIX systems](https://man7.org/linux/man-pages/man3/getaddrinfo.3.html) / [Windows](https://learn.microsoft.com/windows/win32/api/ws2tcpip/nf-ws2tcpip-getaddrinfo)) or one reported by the runtime or client library. If error code is not available, the full name of exception type SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Measures the time taken to perform a DNS lookup.", + "id": "metric.dns.lookup.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "dns.question.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.dns" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/dns/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dns.lookup.duration", + "stability": "development", + "type": "metric", + "unit": "s" + }, + { + "attributes": [ + { + "brief": "The name of the single function that this runtime instance executes.\n", + "examples": [ + "my-function", + "myazurefunctionapp/some-function-name" + ], + "name": "faas.name", + "note": "This is the name of the function as configured/deployed on the FaaS\nplatform and is usually different from the name of the callback\nfunction (which may be stored in the\n[`code.namespace`/`code.function.name`](/docs/general/attributes.md#source-code-attributes)\nspan attributes).\n\nFor some cloud providers, the above definition is ambiguous. The following\ndefinition of function name MUST be used for this attribute\n(and consequently the span name) for the listed cloud providers/products:\n\n- **Azure:** The full name `\u003cFUNCAPP\u003e/\u003cFUNC\u003e`, i.e., function app name\n followed by a forward slash followed by the function name (this form\n can also be seen in the resource JSON for the function).\n This means that a span attribute MUST be used, as an Azure function\n app can host multiple functions that would usually share\n a TracerProvider (see also the `cloud.resource_id` attribute).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The immutable version of the function being executed.", + "examples": [ + "26", + "pinkfroid-00002" + ], + "name": "faas.version", + "note": "Depending on the cloud provider and platform, use:\n\n- **AWS Lambda:** The [function version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)\n (an integer represented as a decimal string).\n- **Google Cloud Run (Services):** The [revision](https://cloud.google.com/run/docs/managing/revisions)\n (i.e., the function name plus the revision suffix).\n- **Google Cloud Functions:** The value of the\n [`K_REVISION` environment variable](https://cloud.google.com/run/docs/container-contract#services-env-vars).\n- **Azure Functions:** Not applicable. Do not set this attribute.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version.\n", + "examples": [ + "2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de" + ], + "name": "faas.instance", + "note": "- **AWS Lambda:** Use the (full) log stream name.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The amount of memory available to the serverless function converted to Bytes.\n", + "examples": 134217728, + "name": "faas.max_memory", + "note": "It\u0027s recommended to set this attribute since e.g. too little memory can easily stop a Java AWS Lambda function from working correctly. On AWS Lambda, the environment variable `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (which must be multiplied by 1,048,576).\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Type of the trigger which caused this function invocation.\n", + "name": "faas.trigger", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "A response to some data source operation such as a database or filesystem read/write", + "id": "datasource", + "stability": "development", + "value": "datasource" + }, + { + "brief": "To provide an answer to an inbound HTTP request", + "id": "http", + "stability": "development", + "value": "http" + }, + { + "brief": "A function is set to be executed when messages are sent to a messaging system", + "id": "pubsub", + "stability": "development", + "value": "pubsub" + }, + { + "brief": "A function is scheduled to be executed regularly", + "id": "timer", + "stability": "development", + "value": "timer" + }, + { + "brief": "If none of the others apply", + "id": "other", + "stability": "development", + "value": "other" + } + ] + } + }, + { + "brief": "The name of the invoked function.\n", + "examples": "my-function", + "name": "faas.invoked_name", + "note": "SHOULD be equal to the `faas.name` resource attribute of the invoked function.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The cloud provider of the invoked function.\n", + "name": "faas.invoked_provider", + "note": "SHOULD be equal to the `cloud.provider` resource attribute of the invoked function.\n", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "Alibaba Cloud", + "id": "alibaba_cloud", + "stability": "development", + "value": "alibaba_cloud" + }, + { + "brief": "Amazon Web Services", + "id": "aws", + "stability": "development", + "value": "aws" + }, + { + "brief": "Microsoft Azure", + "id": "azure", + "stability": "development", + "value": "azure" + }, + { + "brief": "Google Cloud Platform", + "id": "gcp", + "stability": "development", + "value": "gcp" + }, + { + "brief": "Tencent Cloud", + "id": "tencent_cloud", + "stability": "development", + "value": "tencent_cloud" + } + ] + } + }, + { + "brief": "The cloud region of the invoked function.\n", + "examples": "eu-central-1", + "name": "faas.invoked_region", + "note": "SHOULD be equal to the `cloud.region` resource attribute of the invoked function.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The invocation ID of the current function invocation.\n", + "examples": "af9d5aa4-a685-4c5f-a22b-444f80b3cc28", + "name": "faas.invocation_id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A string containing the function invocation time in the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n", + "examples": "2020-01-23T13:47:06Z", + "name": "faas.time", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A string containing the schedule period as [Cron Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).\n", + "examples": "0/5 * * * ? *", + "name": "faas.cron", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "A boolean that is true if the serverless function is executed for the first time (aka cold-start).\n", + "name": "faas.coldstart", + "requirement_level": "recommended", + "stability": "development", + "type": "boolean" + }, + { + "brief": "The name of the source on which the triggering operation was performed. For example, in Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the database name.\n", + "examples": [ + "myBucketName", + "myDbName" + ], + "name": "faas.document.collection", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Describes the type of the operation that was performed on the data.", + "name": "faas.document.operation", + "requirement_level": "recommended", + "stability": "development", + "type": { + "members": [ + { + "brief": "When a new object is created.", + "id": "insert", + "stability": "development", + "value": "insert" + }, + { + "brief": "When an object is modified.", + "id": "edit", + "stability": "development", + "value": "edit" + }, + { + "brief": "When an object is deleted.", + "id": "delete", + "stability": "development", + "value": "delete" + } + ] + } + }, + { + "brief": "A string containing the time when the data was accessed in the [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in [UTC](https://www.w3.org/TR/NOTE-datetime).\n", + "examples": "2020-01-23T13:47:06Z", + "name": "faas.document.time", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The document name/table subjected to the operation. For example, in Cloud Storage or S3 is the name of the file, and in Cosmos DB the table name.\n", + "examples": [ + "myFile.txt", + "myTableName" + ], + "name": "faas.document.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "FaaS attributes", + "display_name": "Function as a Service Attributes", + "id": "registry.faas", + "lineage": { + "provenance": { + "path": "/home/weaver/source/faas/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Time when the file was last accessed, in ISO 8601 format.\n", + "examples": [ + "2021-01-01T12:00:00Z" + ], + "name": "file.accessed", + "note": "This attribute might not be supported by some file systems — NFS, FAT32, in embedded OS, etc.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Array of file attributes.\n", + "examples": [ + [ + "readonly", + "hidden" + ] + ], + "name": "file.attributes", + "note": "Attributes names depend on the OS or file system. Here’s a non-exhaustive list of values expected for this attribute: `archive`, `compressed`, `directory`, `encrypted`, `execute`, `hidden`, `immutable`, `journaled`, `read`, `readonly`, `symbolic link`, `system`, `temporary`, `write`.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string[]" + }, + { + "brief": "Time when the file was created, in ISO 8601 format.\n", + "examples": [ + "2021-01-01T12:00:00Z" + ], + "name": "file.created", + "note": "This attribute might not be supported by some file systems — NFS, FAT32, in embedded OS, etc.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Time when the file attributes or metadata was last changed, in ISO 8601 format.\n", + "examples": [ + "2021-01-01T12:00:00Z" + ], + "name": "file.changed", + "note": "`file.changed` captures the time when any of the file\u0027s properties or attributes (including the content) are changed, while `file.modified` captures the timestamp when the file content is modified.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Directory where the file is located. It should include the drive letter, when appropriate.\n", + "examples": [ + "/home/user", + "C:\\Program Files\\MyApp" + ], + "name": "file.directory", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "File extension, excluding the leading dot.\n", + "examples": [ + "png", + "gz" + ], + "name": "file.extension", + "note": "When the file name has multiple extensions (example.tar.gz), only the last one should be captured (\"gz\", not \"tar.gz\").\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Name of the fork. A fork is additional data associated with a filesystem object.\n", + "examples": [ + "Zone.Identifier" + ], + "name": "file.fork_name", + "note": "On Linux, a resource fork is used to store additional data with a filesystem object. A file always has at least one fork for the data portion, and additional forks may exist.\nOn NTFS, this is analogous to an Alternate Data Stream (ADS), and the default data stream for a file is just called $DATA. Zone.Identifier is commonly used by Windows to track contents downloaded from the Internet. An ADS is typically of the form: C:\\path\\to\\filename.extension:some_fork_name, and some_fork_name is the value that should populate `fork_name`. `filename.extension` should populate `file.name`, and `extension` should populate `file.extension`. The full path, `file.path`, will include the fork name.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Primary Group ID (GID) of the file.\n", + "examples": [ + "1000" + ], + "name": "file.group.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Primary group name of the file.\n", + "examples": [ + "users" + ], + "name": "file.group.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Inode representing the file in the filesystem.\n", + "examples": [ + "256383" + ], + "name": "file.inode", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Mode of the file in octal representation.\n", + "examples": [ + "0640" + ], + "name": "file.mode", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Time when the file content was last modified, in ISO 8601 format.\n", + "examples": [ + "2021-01-01T12:00:00Z" + ], + "name": "file.modified", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Name of the file including the extension, without the directory.\n", + "examples": [ + "example.png" + ], + "name": "file.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The user ID (UID) or security identifier (SID) of the file owner.\n", + "examples": [ + "1000" + ], + "name": "file.owner.id", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Username of the file owner.\n", + "examples": [ + "root" + ], + "name": "file.owner.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Full path to the file, including the file name. It should include the drive letter, when appropriate.\n", + "examples": [ + "/home/alice/example.png", + "C:\\Program Files\\MyApp\\myapp.exe" + ], + "name": "file.path", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "File size in bytes.\n", + "name": "file.size", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Path to the target of a symbolic link.\n", + "examples": [ + "/usr/bin/python3" + ], + "name": "file.symbolic_link.target_path", + "note": "This attribute is only applicable to symbolic links.\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes file attributes.", + "display_name": "File Attributes", + "id": "registry.file", + "lineage": { + "provenance": { + "path": "/home/weaver/source/file/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "An easily-recognizable name for the hardware component\n", + "examples": [ + "eth0" + ], + "name": "hw.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Unique identifier of the parent component (typically the `hw.id` attribute of the enclosure, or disk controller)\n", + "examples": [ + "dellStorage_perc_0" + ], + "name": "hw.parent", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "An identifier for the hardware component, unique within the monitored host\n", + "examples": [ + "win32battery_battery_testsysa33_1" + ], + "name": "hw.id", + "requirement_level": "required", + "stability": "development", + "type": "string" + } + ], + "brief": "Common hardware attributes", + "id": "hardware.attributes.common", + "lineage": { + "attributes": { + "hw.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + }, + "hw.parent": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.hardware" + } + }, + "provenance": { + "path": "/home/weaver/source/hardware/common.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Linux: one of \"hit\" (NFSD_STATS_RC_HITS), \"miss\" (NFSD_STATS_RC_MISSES), or \"nocache\" (NFSD_STATS_RC_NOCACHE -- uncacheable)\n", + "examples": "hit", + "name": "nfs.server.repcache.status", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "NFSv4+ operation name.", + "examples": [ + "OPEN", + "READ", + "GETATTR" + ], + "name": "nfs.operation.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "Describes NFS Attributes\n", + "display_name": "NFS Attributes", + "id": "registry.nfs", + "lineage": { + "provenance": { + "path": "/home/weaver/source/nfs/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the code, either \"OK\" or \"ERROR\". MUST NOT be set if the status code is UNSET.", + "name": "otel.status_code", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The operation has been validated by an Application developer or Operator to have completed successfully.", + "id": "ok", + "stability": "stable", + "value": "OK" + }, + { + "brief": "The operation contains an error.", + "id": "error", + "stability": "stable", + "value": "ERROR" + } + ] + } + }, + { + "brief": "Description of the Status if it has a value, otherwise not set.", + "examples": [ + "resource not found" + ], + "name": "otel.status_description", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Span attributes used by non-OTLP exporters or on metrics to represent OpenTelemetry Span\u0027s concepts.", + "id": "otel_span", + "lineage": { + "attributes": { + "otel.status_code": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.otel" + }, + "otel.status_description": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.otel" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Current \"managed\" thread ID (as opposed to OS thread ID).\n", + "examples": 42, + "name": "thread.id", + "note": "\nExamples of where the value can be extracted from:\n\n| Language or platform | Source |\n| --- | --- |\n| JVM | `Thread.currentThread().threadId()` |\n| .NET | `Thread.CurrentThread.ManagedThreadId` |\n| Python | `threading.current_thread().ident` |\n| Ruby | `Thread.current.object_id` |\n| C++ | `std::this_thread::get_id()` |\n| Erlang | `erlang:self()` |\n", + "requirement_level": "recommended", + "stability": "development", + "type": "int" + }, + { + "brief": "Current thread name.\n", + "examples": "main", + "name": "thread.name", + "note": "\nExamples of where the value can be extracted from:\n\n| Language or platform | Source |\n| --- | --- |\n| JVM | `Thread.currentThread().getName()` |\n| .NET | `Thread.CurrentThread.Name` |\n| Python | `threading.current_thread().name` |\n| Ruby | `Thread.current.name` |\n| Erlang | `erlang:process_info(self(), registered_name)` |\n", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "These attributes may be used for any operation to store information about a thread that started a span.\n", + "display_name": "Thread Attributes", + "id": "registry.thread", + "lineage": { + "provenance": { + "path": "/home/weaver/source/thread/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the web engine.\n", + "examples": [ + "WildFly" + ], + "name": "webengine.name", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "The version of the web engine.\n", + "examples": [ + "21.0.0" + ], + "name": "webengine.version", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + }, + { + "brief": "Additional description of the web engine (e.g. detailed version and edition information).\n", + "examples": [ + "WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) - 2.2.2.Final" + ], + "name": "webengine.description", + "requirement_level": "recommended", + "stability": "development", + "type": "string" + } + ], + "brief": "This document defines the attributes used to describe the packaged software running the application code.\n", + "display_name": "Web Engine Attributes", + "id": "registry.webengine", + "lineage": { + "provenance": { + "path": "/home/weaver/source/webengine/registry.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + } + ] +} + diff --git a/schemas/next/schema.yaml b/schemas/next/schema.yaml new file mode 100644 index 0000000000..32cdc70f5c --- /dev/null +++ b/schemas/next/schema.yaml @@ -0,0 +1,20793 @@ + +{ + "groups": [ + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer address of the database node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "Semantic conventions for individual database systems SHOULD document whether `network.peer.*` attributes are applicable. Network peer address and port are useful when the application interacts with individual database nodes directly.\nIf a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": { + "recommended": "If applicable for this database system." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "The database management system (DBMS) product as identified by the client instrumentation.", + "name": "db.system.name", + "note": "The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "[MariaDB](https://mariadb.org/)", + "id": "mariadb", + "stability": "stable", + "value": "mariadb" + }, + { + "brief": "[Microsoft SQL Server](https://www.microsoft.com/sql-server)", + "id": "microsoft.sql_server", + "stability": "stable", + "value": "microsoft.sql_server" + }, + { + "brief": "[MySQL](https://www.mysql.com/)", + "id": "mysql", + "stability": "stable", + "value": "mysql" + }, + { + "brief": "[PostgreSQL](https://www.postgresql.org/)", + "id": "postgresql", + "stability": "stable", + "value": "postgresql" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Duration of database client operations.", + "id": "metric.db.client.operation.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.system.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "db.client.operation.duration", + "note": "Batch operations SHOULD be recorded as a single operation.\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Common messaging metrics attributes.", + "id": "metric.messaging.attributes", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/metrics.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Messaging consumer metrics attributes.", + "id": "metric.messaging.consumer.attributes", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/metrics.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "if and only if process.exit.code is not 0" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Common CLI attributes.\n", + "id": "attributes.cli.common", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "process.command_args": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.executable.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.executable.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.exit.code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + }, + "process.pid": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.process" + } + }, + "provenance": { + "path": "/home/weaver/source/cli/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Indicates that the exception is escaping the scope of the span.\n", + "deprecated": { + "note": "It\u0027s no longer recommended to record exceptions that are handled and do not escape the scope of a span.\n", + "reason": "obsoleted" + }, + "name": "exception.escaped", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + }, + { + "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)\n", + "name": "exception.stacktrace", + "requirement_level": "recommended", + "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": { + "conditionally_required": "Required if `exception.message` is not set, recommended otherwise." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The exception message.", + "examples": [ + "Division by zero", + "Can\u0027t convert \u0027int\u0027 object to str implicitly" + ], + "name": "exception.message", + "requirement_level": { + "conditionally_required": "Required if `exception.type` is not set, recommended otherwise." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "This event describes a single exception.\n", + "id": "event.exception", + "lineage": { + "attributes": { + "exception.escaped": { + "inherited_fields": [ + "brief", + "deprecated", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.exception.deprecated" + }, + "exception.message": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.exception" + }, + "exception.stacktrace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.exception" + }, + "exception.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.exception" + } + }, + "provenance": { + "path": "/home/weaver/source/exceptions/events.yaml", + "registry_id": "main" + } + }, + "name": "exception", + "stability": "stable", + "type": "event" + }, + { + "attributes": [ + { + "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": "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": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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": "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": { + "members": [ + { + "brief": "A thread that has not yet started is in this state.", + "id": "new", + "stability": "stable", + "value": "new" + }, + { + "brief": "A thread executing in the Java virtual machine is in this state.", + "id": "runnable", + "stability": "stable", + "value": "runnable" + }, + { + "brief": "A thread that is blocked waiting for a monitor lock is in this state.", + "id": "blocked", + "stability": "stable", + "value": "blocked" + }, + { + "brief": "A thread that is waiting indefinitely for another thread to perform a particular action is in this state.", + "id": "waiting", + "stability": "stable", + "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.", + "id": "timed_waiting", + "stability": "stable", + "value": "timed_waiting" + }, + { + "brief": "A thread that has exited is in this state.", + "id": "terminated", + "stability": "stable", + "value": "terminated" + } + ] + } + } + ], + "brief": "This document defines Java Virtual machine related attributes.\n", + "display_name": "Java Virtual Machine (JVM) Attributes", + "id": "registry.jvm", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Defines minimal set of attributes used by all messaging systems.\n", + "id": "attributes.messaging.trace.minimal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Peer address of the messaging intermediary node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "Semantic conventions for individual messaging systems SHOULD document whether `network.peer.*` attributes are applicable.\nNetwork peer address and port are important when the application interacts with individual intermediary nodes directly,\nIf a messaging operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": { + "recommended": "If applicable for this messaging system." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port of the messaging intermediary node where the operation was performed.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "if and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Defines a full set of attributes used in messaging systems.\n", + "id": "messaging.attributes", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.client.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.anonymous": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.template": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.temporary": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.conversation_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.message.envelope.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "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", + "note": "If an operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Attributes that describe messaging operation along with network information.", + "id": "messaging.network.attributes", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "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", + "note": "If an operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Attributes for RabbitMQ\n", + "id": "messaging.rabbitmq", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.conversation_id": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.rabbitmq.destination.routing_key": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rabbitmq" + }, + "messaging.rabbitmq.message.delivery_tag": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rabbitmq" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Attributes for Apache Kafka\n", + "id": "messaging.kafka", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.client.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.kafka.message.key": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.kafka" + }, + "messaging.kafka.message.tombstone": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.kafka" + }, + "messaging.kafka.offset": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.kafka" + }, + "messaging.message.body.size": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Attributes for Apache RocketMQ\n", + "id": "messaging.rocketmq", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.client.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.rocketmq.consumption_model": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.delay_time_level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.delivery_timestamp": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.group": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.keys": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.tag": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.message.type": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.rocketmq" + }, + "messaging.rocketmq.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.rocketmq" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Attributes for Google Cloud Pub/Sub\n", + "id": "messaging.gcp_pubsub", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.gcp_pubsub.message.ack_deadline": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.gcp_pubsub" + }, + "messaging.gcp_pubsub.message.ack_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.gcp_pubsub" + }, + "messaging.gcp_pubsub.message.delivery_attempt": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.gcp_pubsub" + }, + "messaging.gcp_pubsub.message.ordering_key": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.gcp_pubsub" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Attributes for Azure Service Bus\n", + "id": "messaging.servicebus", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.subscription.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.conversation_id": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.servicebus.disposition_status": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.servicebus" + }, + "messaging.servicebus.message.delivery_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging.servicebus" + }, + "messaging.servicebus.message.enqueued_time": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.servicebus" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Attributes for Azure Event Hubs\n", + "id": "messaging.eventhubs", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.batch.message_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.consumer.group.name": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.destination.partition.id": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.eventhubs.message.enqueued_time": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.messaging.eventhubs" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Attributes that exist for SQS request types.", + "id": "messaging.aws.sqs", + "lineage": { + "attributes": { + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.sqs.queue.url": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.sqs" + }, + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "Attributes that exist for SNS request types.", + "id": "messaging.aws.sns", + "lineage": { + "attributes": { + "aws.request_id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws" + }, + "aws.sns.topic.arn": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aws.sns" + }, + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.destination.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.message.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "messaging.operation.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + } + ], + "brief": "General client attributes.\n", + "id": "client", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.client" + } + }, + "provenance": { + "path": "/home/weaver/source/client/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "SignalR HTTP connection closure status.", + "examples": [ + "app_shutdown", + "timeout" + ], + "name": "signalr.connection.status", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The connection was closed normally.", + "id": "normal_closure", + "stability": "stable", + "value": "normal_closure" + }, + { + "brief": "The connection was closed due to a timeout.", + "id": "timeout", + "stability": "stable", + "value": "timeout" + }, + { + "brief": "The connection was closed because the app is shutting down.", + "id": "app_shutdown", + "stability": "stable", + "value": "app_shutdown" + } + ] + } + }, + { + "brief": "[SignalR transport type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)", + "examples": [ + "web_sockets", + "long_polling" + ], + "name": "signalr.transport", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "ServerSentEvents protocol", + "id": "server_sent_events", + "stability": "stable", + "value": "server_sent_events" + }, + { + "brief": "LongPolling protocol", + "id": "long_polling", + "stability": "stable", + "value": "long_polling" + }, + { + "brief": "WebSockets protocol", + "id": "web_sockets", + "stability": "stable", + "value": "web_sockets" + } + ] + } + } + ], + "brief": "The duration of connections on the server.", + "id": "metric.signalr.server.connection.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "signalr.connection.status": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.signalr" + }, + "signalr.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.signalr" + } + }, + "provenance": { + "path": "/home/weaver/source/signalr/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "signalr.server.connection.duration", + "note": "Meter name: `Microsoft.AspNetCore.Http.Connections`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "SignalR HTTP connection closure status.", + "examples": [ + "app_shutdown", + "timeout" + ], + "name": "signalr.connection.status", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The connection was closed normally.", + "id": "normal_closure", + "stability": "stable", + "value": "normal_closure" + }, + { + "brief": "The connection was closed due to a timeout.", + "id": "timeout", + "stability": "stable", + "value": "timeout" + }, + { + "brief": "The connection was closed because the app is shutting down.", + "id": "app_shutdown", + "stability": "stable", + "value": "app_shutdown" + } + ] + } + }, + { + "brief": "[SignalR transport type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)", + "examples": [ + "web_sockets", + "long_polling" + ], + "name": "signalr.transport", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "ServerSentEvents protocol", + "id": "server_sent_events", + "stability": "stable", + "value": "server_sent_events" + }, + { + "brief": "LongPolling protocol", + "id": "long_polling", + "stability": "stable", + "value": "long_polling" + }, + { + "brief": "WebSockets protocol", + "id": "web_sockets", + "stability": "stable", + "value": "web_sockets" + } + ] + } + } + ], + "brief": "Number of connections that are currently active on the server.", + "id": "metric.signalr.server.active_connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "signalr.connection.status": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.signalr" + }, + "signalr.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.signalr" + } + }, + "provenance": { + "path": "/home/weaver/source/signalr/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "signalr.server.active_connections", + "note": "Meter name: `Microsoft.AspNetCore.Http.Connections`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "attributes": [ + { + "brief": "Logical name of the service.\n", + "examples": [ + "CICS TS", + "Datacom", + "ADABAS" + ], + "name": "service.name", + "note": "For z/OS system software, SHOULD be set to an abbreviated name of the z/OS system software.", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "The version string of the service API or implementation. The format is not defined by these conventions.\n", + "examples": "5.6", + "name": "service.version", + "note": "For z/OS system software, SHOULD be set to the version of the z/OS system software.", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "A software service running on a z/OS system.", + "id": "service.zos.software", + "lineage": { + "attributes": { + "service.instance.id": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.service" + }, + "service.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.service" + }, + "service.namespace": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.service" + }, + "service.version": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.service" + } + }, + "provenance": { + "path": "/home/weaver/source/zos/common.yaml", + "registry_id": "main" + } + }, + "name": "service.zos.software", + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Rate-limiting result, shows whether the lease was acquired or contains a rejection reason", + "examples": [ + "acquired", + "request_canceled" + ], + "name": "aspnetcore.rate_limiting.result", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Lease was acquired", + "id": "acquired", + "stability": "stable", + "value": "acquired" + }, + { + "brief": "Lease request was rejected by the endpoint limiter", + "id": "endpoint_limiter", + "stability": "stable", + "value": "endpoint_limiter" + }, + { + "brief": "Lease request was rejected by the global limiter", + "id": "global_limiter", + "stability": "stable", + "value": "global_limiter" + }, + { + "brief": "Lease request was canceled", + "id": "request_canceled", + "stability": "stable", + "value": "request_canceled" + } + ] + } + }, + { + "brief": "A value that indicates whether the matched route is a fallback route.", + "examples": [ + true + ], + "name": "aspnetcore.routing.is_fallback", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + }, + { + "brief": "Full type name of the [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) implementation that handled the exception.", + "examples": [ + "Contoso.MyHandler" + ], + "name": "aspnetcore.diagnostics.handler.type", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Flag indicating if request was handled by the application pipeline.", + "examples": [ + true + ], + "name": "aspnetcore.request.is_unhandled", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + }, + { + "brief": "Match result - success or failure", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.routing.match_status", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Match succeeded", + "id": "success", + "stability": "stable", + "value": "success" + }, + { + "brief": "Match failed", + "id": "failure", + "stability": "stable", + "value": "failure" + } + ] + } + }, + { + "brief": "ASP.NET Core exception middleware handling result.", + "examples": [ + "handled", + "unhandled" + ], + "name": "aspnetcore.diagnostics.exception.result", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Exception was handled by the exception handling middleware.", + "id": "handled", + "stability": "stable", + "value": "handled" + }, + { + "brief": "Exception was not handled by the exception handling middleware.", + "id": "unhandled", + "stability": "stable", + "value": "unhandled" + }, + { + "brief": "Exception handling was skipped because the response had started.", + "id": "skipped", + "stability": "stable", + "value": "skipped" + }, + { + "brief": "Exception handling didn\u0027t run because the request was aborted.", + "id": "aborted", + "stability": "stable", + "value": "aborted" + } + ] + } + }, + { + "brief": "A value that indicates whether the user is authenticated.", + "examples": [ + true + ], + "name": "aspnetcore.user.is_authenticated", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + } + ], + "brief": "ASP.NET Core attributes", + "display_name": "ASP.NET Core Attributes", + "id": "registry.aspnetcore", + "lineage": { + "provenance": { + "path": "/home/weaver/source/aspnetcore/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The method or function fully-qualified name without arguments. The value should fit the natural representation of the language runtime, which is also likely the same used within `code.stacktrace` attribute value. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Function\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": [ + "com.example.MyHttpService.serveRequest", + "GuzzleHttp\\Client::transfer", + "fopen" + ], + "name": "code.function.name", + "note": "Values and format depends on each language runtime, thus it is impossible to provide an exhaustive list of examples.\nThe values are usually the same (or prefixes of) the ones found in native stack trace representation stored in\n`code.stacktrace` without information on arguments.\n\nExamples:\n\n* Java method: `com.example.MyHttpService.serveRequest`\n* Java anonymous class method: `com.mycompany.Main$1.myMethod`\n* Java lambda method: `com.mycompany.Main$$Lambda/0x0000748ae4149c00.myMethod`\n* PHP function: `GuzzleHttp\\Client::transfer`\n* Go function: `github.com/my/repo/pkg.foo.func5`\n* Elixir: `OpenTelemetry.Ctx.new`\n* Erlang: `opentelemetry_ctx:new`\n* Rust: `playground::my_module::my_cool_func`\n* C function: `fopen`\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path). This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Function\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": "/usr/local/MyApplication/content_root/app/index.php", + "name": "code.file.path", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The line number in `code.file.path` best representing the operation. It SHOULD point within the code unit named in `code.function.name`. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Line\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": 42, + "name": "code.line.number", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "The column number in `code.file.path` best representing the operation. It SHOULD point within the code unit named in `code.function.name`. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Line\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": 16, + "name": "code.column.number", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "A stacktrace as a string in the natural representation for the language runtime. The representation is identical to [`exception.stacktrace`](/docs/exceptions/exceptions-spans.md#stacktrace-representation). This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Location\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": "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)\n", + "name": "code.stacktrace", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + } + ], + "brief": "These attributes provide context about source code\n", + "id": "code", + "lineage": { + "attributes": { + "code.column.number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.code" + }, + "code.file.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.code" + }, + "code.function.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.code" + }, + "code.line.number": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.code" + }, + "code.stacktrace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.code" + } + }, + "provenance": { + "path": "/home/weaver/source/code/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Local port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.local.port", + "requirement_level": "recommended", + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + } + ], + "brief": "These attributes may be used for any network related operation.\n", + "display_name": "Network Attributes", + "id": "registry.network", + "lineage": { + "provenance": { + "path": "/home/weaver/source/network/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Logical name of the service.\n", + "examples": [ + "shoppingcart" + ], + "name": "service.name", + "note": "MUST be the same for all instances of horizontally scaled services. If the value was not specified, SDKs MUST fallback to `unknown_service:` concatenated with [`process.executable.name`](process.md), e.g. `unknown_service:bash`. If `process.executable.name` is not available, the value MUST be set to `unknown_service`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The version string of the service API or implementation. The format is not defined by these conventions.\n", + "examples": [ + "2.0.0", + "a01dbef8a" + ], + "name": "service.version", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "A service instance.\n", + "display_name": "Service Attributes", + "id": "registry.service", + "lineage": { + "provenance": { + "path": "/home/weaver/source/service/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of processors available to the process.", + "id": "metric.dotnet.process.cpu.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.process.cpu.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as accessing [`Environment.ProcessorCount`](https://learn.microsoft.com/dotnet/api/system.environment.processorcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [], + "brief": "CPU time used by the process.", + "id": "metric.dotnet.process.cpu.time", + "instrument": "counter", + "lineage": { + "attributes": { + "cpu.mode": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.cpu" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.process.cpu.time", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as accessing the corresponding processor time properties on [`System.Diagnostics.Process`](https://learn.microsoft.com/dotnet/api/system.diagnostics.process).\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of bytes of physical memory mapped to the process context.", + "id": "metric.dotnet.process.memory.working_set", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.process.memory.working_set", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`Environment.WorkingSet`](https://learn.microsoft.com/dotnet/api/system.environment.workingset).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the garbage collector managed heap generation.", + "examples": [ + "gen0", + "gen1", + "gen2" + ], + "name": "dotnet.gc.heap.generation", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "gen0", + "stability": "stable", + "value": "gen0" + }, + { + "brief": "Generation 1", + "id": "gen1", + "stability": "stable", + "value": "gen1" + }, + { + "brief": "Generation 2", + "id": "gen2", + "stability": "stable", + "value": "gen2" + }, + { + "brief": "Large Object Heap", + "id": "loh", + "stability": "stable", + "value": "loh" + }, + { + "brief": "Pinned Object Heap", + "id": "poh", + "stability": "stable", + "value": "poh" + } + ] + } + } + ], + "brief": "The number of garbage collections that have occurred since the process has started.", + "id": "metric.dotnet.gc.collections", + "instrument": "counter", + "lineage": { + "attributes": { + "dotnet.gc.heap.generation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.dotnet" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.collections", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric uses the [`GC.CollectionCount(int generation)`](https://learn.microsoft.com/dotnet/api/system.gc.collectioncount) API to calculate exclusive collections per generation.\n", + "stability": "stable", + "type": "metric", + "unit": "{collection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The *approximate* number of bytes allocated on the managed GC heap since the process has started. The returned value does not include any native allocations.\n", + "id": "metric.dotnet.gc.heap.total_allocated", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.heap.total_allocated", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetTotalAllocatedBytes()`](https://learn.microsoft.com/dotnet/api/system.gc.gettotalallocatedbytes).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The amount of committed virtual memory in use by the .NET GC, as observed during the latest garbage collection.\n", + "id": "metric.dotnet.gc.last_collection.memory.committed_size", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.last_collection.memory.committed_size", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetGCMemoryInfo().TotalCommittedBytes`](https://learn.microsoft.com/dotnet/api/system.gcmemoryinfo.totalcommittedbytes). Committed virtual memory may be larger than the heap size because it includes both memory for storing existing objects (the heap size) and some extra memory that is ready to handle newly allocated objects in the future.\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the garbage collector managed heap generation.", + "examples": [ + "gen0", + "gen1", + "gen2" + ], + "name": "dotnet.gc.heap.generation", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "gen0", + "stability": "stable", + "value": "gen0" + }, + { + "brief": "Generation 1", + "id": "gen1", + "stability": "stable", + "value": "gen1" + }, + { + "brief": "Generation 2", + "id": "gen2", + "stability": "stable", + "value": "gen2" + }, + { + "brief": "Large Object Heap", + "id": "loh", + "stability": "stable", + "value": "loh" + }, + { + "brief": "Pinned Object Heap", + "id": "poh", + "stability": "stable", + "value": "poh" + } + ] + } + } + ], + "brief": "The managed GC heap size (including fragmentation), as observed during the latest garbage collection.\n", + "id": "metric.dotnet.gc.last_collection.heap.size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "dotnet.gc.heap.generation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.dotnet" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.last_collection.heap.size", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetGCMemoryInfo().GenerationInfo.SizeAfterBytes`](https://learn.microsoft.com/dotnet/api/system.gcgenerationinfo.sizeafterbytes).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Name of the garbage collector managed heap generation.", + "examples": [ + "gen0", + "gen1", + "gen2" + ], + "name": "dotnet.gc.heap.generation", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "gen0", + "stability": "stable", + "value": "gen0" + }, + { + "brief": "Generation 1", + "id": "gen1", + "stability": "stable", + "value": "gen1" + }, + { + "brief": "Generation 2", + "id": "gen2", + "stability": "stable", + "value": "gen2" + }, + { + "brief": "Large Object Heap", + "id": "loh", + "stability": "stable", + "value": "loh" + }, + { + "brief": "Pinned Object Heap", + "id": "poh", + "stability": "stable", + "value": "poh" + } + ] + } + } + ], + "brief": "The heap fragmentation, as observed during the latest garbage collection.\n", + "id": "metric.dotnet.gc.last_collection.heap.fragmentation.size", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "dotnet.gc.heap.generation": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.dotnet" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.last_collection.heap.fragmentation.size", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetGCMemoryInfo().GenerationInfo.FragmentationAfterBytes`](https://learn.microsoft.com/dotnet/api/system.gcgenerationinfo.fragmentationafterbytes).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The total amount of time paused in GC since the process has started.", + "id": "metric.dotnet.gc.pause.time", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.gc.pause.time", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`GC.GetTotalPauseDuration()`](https://learn.microsoft.com/dotnet/api/system.gc.gettotalpauseduration).\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Count of bytes of intermediate language that have been compiled since the process has started.", + "id": "metric.dotnet.jit.compiled_il.size", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.jit.compiled_il.size", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`JitInfo.GetCompiledILBytes()`](https://learn.microsoft.com/dotnet/api/system.runtime.jitinfo.getcompiledilbytes).\n", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of times the JIT compiler (re)compiled methods since the process has started.\n", + "id": "metric.dotnet.jit.compiled_methods", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.jit.compiled_methods", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`JitInfo.GetCompiledMethodCount()`](https://learn.microsoft.com/dotnet/api/system.runtime.jitinfo.getcompiledmethodcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{method}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "The amount of time the JIT compiler has spent compiling methods since the process has started.\n", + "id": "metric.dotnet.jit.compilation.time", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.jit.compilation.time", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`JitInfo.GetCompilationTime()`](https://learn.microsoft.com/dotnet/api/system.runtime.jitinfo.getcompilationtime).\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of times there was contention when trying to acquire a monitor lock since the process has started.\n", + "id": "metric.dotnet.monitor.lock_contentions", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.monitor.lock_contentions", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`Monitor.LockContentionCount`](https://learn.microsoft.com/dotnet/api/system.threading.monitor.lockcontentioncount).\n", + "stability": "stable", + "type": "metric", + "unit": "{contention}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of thread pool threads that currently exist.", + "id": "metric.dotnet.thread_pool.thread.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.thread_pool.thread.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`ThreadPool.ThreadCount`](https://learn.microsoft.com/dotnet/api/system.threading.threadpool.threadcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{thread}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of work items that the thread pool has completed since the process has started.\n", + "id": "metric.dotnet.thread_pool.work_item.count", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.thread_pool.work_item.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`ThreadPool.CompletedWorkItemCount`](https://learn.microsoft.com/dotnet/api/system.threading.threadpool.completedworkitemcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{work_item}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of work items that are currently queued to be processed by the thread pool.\n", + "id": "metric.dotnet.thread_pool.queue.length", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.thread_pool.queue.length", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`ThreadPool.PendingWorkItemCount`](https://learn.microsoft.com/dotnet/api/system.threading.threadpool.pendingworkitemcount).\n", + "stability": "stable", + "type": "metric", + "unit": "{work_item}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of timer instances that are currently active.", + "id": "metric.dotnet.timer.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.timer.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`Timer.ActiveCount`](https://learn.microsoft.com/dotnet/api/system.threading.timer.activecount).\n", + "stability": "stable", + "type": "metric", + "unit": "{timer}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "The number of .NET assemblies that are currently loaded.", + "id": "metric.dotnet.assembly.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.assembly.count", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as calling [`AppDomain.CurrentDomain.GetAssemblies().Length`](https://learn.microsoft.com/dotnet/api/system.appdomain.getassemblies).\n", + "stability": "stable", + "type": "metric", + "unit": "{assembly}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "System.OperationCanceledException", + "Contoso.MyException" + ], + "name": "error.type", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The number of exceptions that have been thrown in managed code.", + "id": "metric.dotnet.exceptions", + "instrument": "counter", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/dotnet/runtime-metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "dotnet.exceptions", + "note": "Meter name: `System.Runtime`; Added in: .NET 9.0.\nThis metric reports the same values as counting calls to [`AppDomain.CurrentDomain.FirstChanceException`](https://learn.microsoft.com/dotnet/api/system.appdomain.firstchanceexception).\n", + "stability": "stable", + "type": "metric", + "unit": "{exception}" + }, + { + "attributes": [ + { + "brief": "Logical name of the service.\n", + "examples": [ + "shoppingcart" + ], + "name": "service.name", + "note": "MUST be the same for all instances of horizontally scaled services. If the value was not specified, SDKs MUST fallback to `unknown_service:` concatenated with [`process.executable.name`](process.md), e.g. `unknown_service:bash`. If `process.executable.name` is not available, the value MUST be set to `unknown_service`.\n", + "requirement_level": "required", + "role": "identifying", + "stability": "stable", + "type": "string" + }, + { + "brief": "The version string of the service API or implementation. The format is not defined by these conventions.\n", + "examples": [ + "2.0.0", + "a01dbef8a" + ], + "name": "service.version", + "requirement_level": "recommended", + "role": "descriptive", + "stability": "stable", + "type": "string" + } + ], + "brief": "A service instance.\n", + "id": "entity.service", + "lineage": { + "attributes": { + "service.instance.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.service" + }, + "service.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.service" + }, + "service.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.service" + }, + "service.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "role" + ], + "source_group": "registry.service" + } + }, + "provenance": { + "path": "/home/weaver/source/service/entities.yaml", + "registry_id": "main" + } + }, + "name": "service", + "stability": "stable", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The database management system (DBMS) product as identified by the client instrumentation.", + "name": "db.system.name", + "note": "The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "[MariaDB](https://mariadb.org/)", + "id": "mariadb", + "stability": "stable", + "value": "mariadb" + }, + { + "brief": "[Microsoft SQL Server](https://www.microsoft.com/sql-server)", + "id": "microsoft.sql_server", + "stability": "stable", + "value": "microsoft.sql_server" + }, + { + "brief": "[MySQL](https://www.mysql.com/)", + "id": "mysql", + "stability": "stable", + "value": "mysql" + }, + { + "brief": "[PostgreSQL](https://www.postgresql.org/)", + "id": "postgresql", + "stability": "stable", + "value": "postgresql" + } + ] + } + } + ], + "brief": "This group defines the attributes used to describe telemetry in the context of databases.\n", + "display_name": "General Database Attributes", + "id": "registry.db", + "lineage": { + "provenance": { + "path": "/home/weaver/source/database/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "This document defines the shared attributes used to report an error.\n", + "display_name": "Error Attributes", + "id": "registry.error", + "lineage": { + "provenance": { + "path": "/home/weaver/source/error/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Local port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.local.port", + "requirement_level": "recommended", + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + } + ], + "brief": "These attributes may be used for any network related operation.\n", + "id": "network-core", + "lineage": { + "attributes": { + "network.local.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.local.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/network/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the telemetry SDK as defined above.\n", + "examples": [ + "opentelemetry" + ], + "name": "telemetry.sdk.name", + "note": "The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute to `opentelemetry`.\nIf another SDK, like a fork or a vendor-provided implementation, is used, this SDK MUST set the\n`telemetry.sdk.name` attribute to the fully-qualified class or module name of this SDK\u0027s main entry point\nor another suitable identifier depending on the language.\nThe identifier `opentelemetry` is reserved and MUST NOT be used in this case.\nAll custom identifiers SHOULD be stable across different versions of an implementation.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The language of the telemetry SDK.\n", + "name": "telemetry.sdk.language", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "id": "cpp", + "stability": "stable", + "value": "cpp" + }, + { + "id": "dotnet", + "stability": "stable", + "value": "dotnet" + }, + { + "id": "erlang", + "stability": "stable", + "value": "erlang" + }, + { + "id": "go", + "stability": "stable", + "value": "go" + }, + { + "id": "java", + "stability": "stable", + "value": "java" + }, + { + "id": "nodejs", + "stability": "stable", + "value": "nodejs" + }, + { + "id": "php", + "stability": "stable", + "value": "php" + }, + { + "id": "python", + "stability": "stable", + "value": "python" + }, + { + "id": "ruby", + "stability": "stable", + "value": "ruby" + }, + { + "id": "rust", + "stability": "stable", + "value": "rust" + }, + { + "id": "swift", + "stability": "stable", + "value": "swift" + }, + { + "id": "webjs", + "stability": "stable", + "value": "webjs" + } + ] + } + }, + { + "brief": "The version string of the telemetry SDK.\n", + "examples": [ + "1.2.3" + ], + "name": "telemetry.sdk.version", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "This document defines attributes for telemetry SDK.\n", + "display_name": "Telemetry Attributes", + "id": "registry.telemetry", + "lineage": { + "provenance": { + "path": "/home/weaver/source/telemetry/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component\n", + "examples": [ + "SemConv" + ], + "name": "url.fragment", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\n", + "examples": [ + "/search" + ], + "name": "url.path", + "note": "Sensitive content provided in `url.path` SHOULD be scrubbed when instrumentations can identify it.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "https", + "ftp", + "telnet" + ], + "name": "url.scheme", + "requirement_level": "recommended", + "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\nis not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`.\nIn such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed).\n\nSensitive content provided in `url.full` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the\nvalue `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`https://www.example.com/path?color=blue\u0026sig=REDACTED`.\n", + "requirement_level": "recommended", + "stability": "stable", + "tag": "sensitive-information", + "type": "string" + }, + { + "brief": "The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\n", + "examples": [ + "q=OpenTelemetry" + ], + "name": "url.query", + "note": "Sensitive content provided in `url.query` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the value `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`q=OpenTelemetry\u0026sig=REDACTED`.\n", + "requirement_level": "recommended", + "stability": "stable", + "tag": "sensitive-information", + "type": "string" + } + ], + "brief": "Attributes describing URL.", + "id": "url", + "lineage": { + "attributes": { + "url.fragment": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.url" + }, + "url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "tag" + ], + "source_group": "registry.url" + }, + "url.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.url" + }, + "url.query": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "tag" + ], + "source_group": "registry.url" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/url/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the garbage collector managed heap generation.", + "examples": [ + "gen0", + "gen1", + "gen2" + ], + "name": "dotnet.gc.heap.generation", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Generation 0", + "id": "gen0", + "stability": "stable", + "value": "gen0" + }, + { + "brief": "Generation 1", + "id": "gen1", + "stability": "stable", + "value": "gen1" + }, + { + "brief": "Generation 2", + "id": "gen2", + "stability": "stable", + "value": "gen2" + }, + { + "brief": "Large Object Heap", + "id": "loh", + "stability": "stable", + "value": "loh" + }, + { + "brief": "Pinned Object Heap", + "id": "poh", + "stability": "stable", + "value": "poh" + } + ] + } + } + ], + "brief": "This document defines .NET related attributes.\n", + "display_name": ".NET Attributes", + "id": "registry.dotnet", + "lineage": { + "provenance": { + "path": "/home/weaver/source/dotnet/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group describes GenAI metrics attributes", + "id": "metric_attributes.gen_ai", + "lineage": { + "attributes": { + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI service,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group describes GenAI server metrics attributes", + "id": "metric_attributes.gen_ai.server", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.provider.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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": "Describes JVM memory metric attributes.", + "id": "attributes.jvm.memory", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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.", + "id": "metric.jvm.memory.used", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.memory.used", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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.", + "id": "metric.jvm.memory.committed", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.memory.committed", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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.", + "id": "metric.jvm.memory.limit", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.memory.limit", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The type of memory.", + "examples": [ + "heap", + "non_heap" + ], + "name": "jvm.memory.type", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Heap memory.", + "id": "heap", + "stability": "stable", + "value": "heap" + }, + { + "brief": "Non-heap memory", + "id": "non_heap", + "stability": "stable", + "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.", + "id": "metric.jvm.memory.used_after_last_gc", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.memory.pool.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.memory.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.memory.used_after_last_gc", + "stability": "stable", + "type": "metric", + "unit": "By" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "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": "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": "Duration of JVM garbage collection actions.", + "id": "metric.jvm.gc.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "jvm.gc.action": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.gc.cause": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.gc.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.gc.duration", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "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": { + "members": [ + { + "brief": "A thread that has not yet started is in this state.", + "id": "new", + "stability": "stable", + "value": "new" + }, + { + "brief": "A thread executing in the Java virtual machine is in this state.", + "id": "runnable", + "stability": "stable", + "value": "runnable" + }, + { + "brief": "A thread that is blocked waiting for a monitor lock is in this state.", + "id": "blocked", + "stability": "stable", + "value": "blocked" + }, + { + "brief": "A thread that is waiting indefinitely for another thread to perform a particular action is in this state.", + "id": "waiting", + "stability": "stable", + "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.", + "id": "timed_waiting", + "stability": "stable", + "value": "timed_waiting" + }, + { + "brief": "A thread that has exited is in this state.", + "id": "terminated", + "stability": "stable", + "value": "terminated" + } + ] + } + } + ], + "brief": "Number of executing platform threads.", + "id": "metric.jvm.thread.count", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "jvm.thread.daemon": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + }, + "jvm.thread.state": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.jvm" + } + }, + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.thread.count", + "stability": "stable", + "type": "metric", + "unit": "{thread}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of classes loaded since JVM start.", + "id": "metric.jvm.class.loaded", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.class.loaded", + "stability": "stable", + "type": "metric", + "unit": "{class}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of classes unloaded since JVM start.", + "id": "metric.jvm.class.unloaded", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.class.unloaded", + "stability": "stable", + "type": "metric", + "unit": "{class}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of classes currently loaded.", + "id": "metric.jvm.class.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.class.count", + "stability": "stable", + "type": "metric", + "unit": "{class}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "brief": "Number of processors available to the Java virtual machine.", + "id": "metric.jvm.cpu.count", + "instrument": "updowncounter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.cpu.count", + "stability": "stable", + "type": "metric", + "unit": "{cpu}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "CPU time used by the process as reported by the JVM.", + "id": "metric.jvm.cpu.time", + "instrument": "counter", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.cpu.time", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "brief": "Recent CPU utilization for the process as reported by the JVM.", + "id": "metric.jvm.cpu.recent_utilization", + "instrument": "gauge", + "lineage": { + "provenance": { + "path": "/home/weaver/source/jvm/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "jvm.cpu.recent_utilization", + "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", + "stability": "stable", + "type": "metric", + "unit": "1" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Common attributes for all GenAI spans.\n", + "id": "attributes.gen_ai.common.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Describes GenAI inference attributes.\n", + "id": "attributes.gen_ai.inference.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the error code returned by the Generative AI provider or the client library,\nthe canonical name of exception that occurred, or another low-cardinality error identifier.\nInstrumentations SHOULD document the list of errors they report.\n", + "requirement_level": { + "conditionally_required": "if the operation ended in an error" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "GenAI server address.", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "GenAI server port.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Describes attributes that are common to OpenAI-based Generative AI services.\n", + "id": "attributes.gen_ai.inference.openai_based", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "gen_ai.conversation.id": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.input.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.operation.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.messages": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.output.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.choice.count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.frequency_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.max_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.presence_penalty": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.seed": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.stop_sequences": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.temperature": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.request.top_p": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.finish_reasons": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.id": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.response.model": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.system_instructions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.tool.definitions": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.input_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "gen_ai.usage.output_tokens": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.gen_ai" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/gen-ai/spans.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The method or function fully-qualified name without arguments. The value should fit the natural representation of the language runtime, which is also likely the same used within `code.stacktrace` attribute value. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Function\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": [ + "com.example.MyHttpService.serveRequest", + "GuzzleHttp\\Client::transfer", + "fopen" + ], + "name": "code.function.name", + "note": "Values and format depends on each language runtime, thus it is impossible to provide an exhaustive list of examples.\nThe values are usually the same (or prefixes of) the ones found in native stack trace representation stored in\n`code.stacktrace` without information on arguments.\n\nExamples:\n\n* Java method: `com.example.MyHttpService.serveRequest`\n* Java anonymous class method: `com.mycompany.Main$1.myMethod`\n* Java lambda method: `com.mycompany.Main$$Lambda/0x0000748ae4149c00.myMethod`\n* PHP function: `GuzzleHttp\\Client::transfer`\n* Go function: `github.com/my/repo/pkg.foo.func5`\n* Elixir: `OpenTelemetry.Ctx.new`\n* Erlang: `opentelemetry_ctx:new`\n* Rust: `playground::my_module::my_cool_func`\n* C function: `fopen`\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The source code file name that identifies the code unit as uniquely as possible (preferably an absolute file path). This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Function\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": "/usr/local/MyApplication/content_root/app/index.php", + "name": "code.file.path", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The line number in `code.file.path` best representing the operation. It SHOULD point within the code unit named in `code.function.name`. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Line\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": 42, + "name": "code.line.number", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "The column number in `code.file.path` best representing the operation. It SHOULD point within the code unit named in `code.function.name`. This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Line\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": 16, + "name": "code.column.number", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "A stacktrace as a string in the natural representation for the language runtime. The representation is identical to [`exception.stacktrace`](/docs/exceptions/exceptions-spans.md#stacktrace-representation). This attribute MUST NOT be used on the Profile signal since the data is already captured in \u0027message Location\u0027. This constraint is imposed to prevent redundancy and maintain data integrity.\n", + "examples": "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)\n", + "name": "code.stacktrace", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "These attributes provide context about source code\n", + "display_name": "Code Attributes", + "id": "registry.code", + "lineage": { + "provenance": { + "path": "/home/weaver/source/code/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "udp" + ], + "name": "network.transport", + "note": "Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n", + "examples": [ + [ + "application/json" + ], + [ + "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.\nIncluding all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nThe `User-Agent` header is already captured in the `user_agent.original` attribute.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` SHOULD be recorded as the `http.request.header.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` SHOULD be recorded as the `http.request.header.x-forwarded-for`\n attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]` or `[\"1.2.3.4, 1.2.3.5\"]` depending on the HTTP library.\n", + "requirement_level": "opt_in", + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "sampling_relevant": true, + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "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": { + "conditionally_required": "If and only if it\u0027s different than `http.request.method`." + }, + "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": "if and only if request was retried." + }, + "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": [ + [ + "application/json" + ], + [ + "abc", + "def" + ] + ], + "name": "http.response.header", + "note": "Instrumentations SHOULD require an explicit configuration of which headers are to be captured.\nIncluding all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` header SHOULD be recorded as the `http.request.response.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `My-custom-header: abc, def` header SHOULD be recorded as the `http.response.header.my-custom-header`\n attribute with value `[\"abc\", \"def\"]` or `[\"abc, def\"]` depending on the HTTP library.\n", + "requirement_level": "opt_in", + "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": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "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\nis not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`.\nIn such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed).\n\nSensitive content provided in `url.full` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the\nvalue `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`https://www.example.com/path?color=blue\u0026sig=REDACTED`.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "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", + "YourApp/1.0.0 grpc-java-okhttp/1.27.2" + ], + "name": "user_agent.original", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + } + ], + "brief": "This span represents an outbound HTTP request.\n", + "id": "span.http.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.header": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.http" + }, + "http.request.method_original": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.resend_count": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.header": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "url.full": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.url" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + }, + "user_agent.original": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/spans.yaml", + "registry_id": "main" + } + }, + "note": "There are two ways HTTP client spans can be implemented in an instrumentation:\n\n1. Instrumentations SHOULD create an HTTP span for each attempt to send an HTTP request over the wire.\n In case the request is resent, the resend attempts MUST follow the [HTTP resend spec](#http-request-retries-and-redirects).\n In this case, instrumentations SHOULD NOT (also) emit a logical encompassing HTTP client span.\n\n2. If for some reason it is not possible to emit a span for each send attempt (because e.g. the instrumented library does not expose hooks that would allow this),\n instrumentations MAY create an HTTP span for the top-most operation of the HTTP client.\n In this case, the `url.full` MUST be the absolute URL that was originally requested, before any HTTP-redirects that may happen when executing the request.\n\n**Span name:** refer to the [Span Name](/docs/http/http-spans.md#name) section.\n\n**Span kind** MUST be `CLIENT`.\n\n**Span status:** refer to the [Span Status](/docs/http/http-spans.md#status) section.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "udp" + ], + "name": "network.transport", + "note": "Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Local socket address. Useful in case of a multi-IP host.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.local.address", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Local socket port. Useful in case of a multi-port host.", + "examples": [ + 65123 + ], + "name": "network.local.port", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "sampling_relevant": true, + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "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": { + "conditionally_required": "If and only if it\u0027s different than `http.request.method`." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "HTTP response headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n", + "examples": [ + [ + "application/json" + ], + [ + "abc", + "def" + ] + ], + "name": "http.response.header", + "note": "Instrumentations SHOULD require an explicit configuration of which headers are to be captured.\nIncluding all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` header SHOULD be recorded as the `http.request.response.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `My-custom-header: abc, def` header SHOULD be recorded as the `http.response.header.my-custom-header`\n attribute with value `[\"abc\", \"def\"]` or `[\"abc, def\"]` depending on the HTTP library.\n", + "requirement_level": "opt_in", + "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": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "83.164.160.102" + ], + "name": "client.address", + "note": "The IP address of the original client behind all proxies, if known (e.g. from [Forwarded#for](https://developer.mozilla.org/docs/Web/HTTP/Headers/Forwarded#for), [X-Forwarded-For](https://developer.mozilla.org/docs/Web/HTTP/Headers/X-Forwarded-For), or a similar header). Otherwise, the immediate client peer address.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The port of whichever client was captured in `client.address`.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "brief": "HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n", + "examples": [ + [ + "application/json" + ], + [ + "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.\nIncluding all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nThe `User-Agent` header is already captured in the `user_agent.original` attribute.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` SHOULD be recorded as the `http.request.header.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` SHOULD be recorded as the `http.request.header.x-forwarded-for`\n attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]` or `[\"1.2.3.4, 1.2.3.5\"]` depending on the HTTP library.\n", + "requirement_level": "opt_in", + "sampling_relevant": true, + "stability": "stable", + "type": "template[string[]]" + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n", + "requirement_level": { + "conditionally_required": "If available and `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\n", + "examples": [ + "/search" + ], + "name": "url.path", + "note": "Sensitive content provided in `url.path` SHOULD be scrubbed when instrumentations can identify it.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\n", + "examples": [ + "q=OpenTelemetry" + ], + "name": "url.query", + "note": "Sensitive content provided in `url.query` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the value `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`q=OpenTelemetry\u0026sig=REDACTED`.\n", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "sampling_relevant": true, + "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", + "YourApp/1.0.0 grpc-java-okhttp/1.27.2" + ], + "name": "user_agent.original", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + } + ], + "brief": "This span represents an inbound HTTP request.\n", + "id": "span.http.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "sampling_relevant" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.header": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.http" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.http" + }, + "http.request.method_original": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.request.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.body.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.header": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.local.address": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.local.port": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "url.path": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.url" + }, + "url.query": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.url" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.url" + }, + "user_agent.original": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "sampling_relevant" + ], + "source_group": "registry.user_agent" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/spans.yaml", + "registry_id": "main" + } + }, + "note": "**Span name:** refer to the [Span Name](/docs/http/http-spans.md#name) section.\n\n**Span kind** MUST be `SERVER`.\n\n**Span status:** refer to the [Span Status](/docs/http/http-spans.md#status) section.\n", + "span_kind": "server", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + } + ], + "brief": "General server attributes.\n", + "id": "server", + "lineage": { + "attributes": { + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/server/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "SignalR HTTP connection closure status.", + "examples": [ + "app_shutdown", + "timeout" + ], + "name": "signalr.connection.status", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The connection was closed normally.", + "id": "normal_closure", + "stability": "stable", + "value": "normal_closure" + }, + { + "brief": "The connection was closed due to a timeout.", + "id": "timeout", + "stability": "stable", + "value": "timeout" + }, + { + "brief": "The connection was closed because the app is shutting down.", + "id": "app_shutdown", + "stability": "stable", + "value": "app_shutdown" + } + ] + } + }, + { + "brief": "[SignalR transport type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md)", + "examples": [ + "web_sockets", + "long_polling" + ], + "name": "signalr.transport", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "ServerSentEvents protocol", + "id": "server_sent_events", + "stability": "stable", + "value": "server_sent_events" + }, + { + "brief": "LongPolling protocol", + "id": "long_polling", + "stability": "stable", + "value": "long_polling" + }, + { + "brief": "WebSockets protocol", + "id": "web_sockets", + "stability": "stable", + "value": "web_sockets" + } + ] + } + } + ], + "brief": "SignalR attributes", + "display_name": "SignalR Attributes", + "id": "registry.signalr", + "lineage": { + "provenance": { + "path": "/home/weaver/source/signalr/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Database Client attributes", + "id": "attributes.db.client.minimal", + "lineage": { + "attributes": { + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Cosmos DB container name.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Azure Cosmos DB Client attributes", + "id": "attributes.azure.cosmosdb.minimal", + "lineage": { + "attributes": { + "azure.cosmosdb.consistency.level": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "azure.cosmosdb.response.sub_status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.azure.cosmosdb" + }, + "db.collection.name": { + "inherited_fields": [ + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/common.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group defines the attributes describing database operations that may have queries.", + "id": "attributes.db.client.with_query", + "lineage": { + "attributes": { + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group defines the attributes describing database operations that have operation name, collection name and query.", + "id": "attributes.db.client.with_query_and_collection", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "amqp:decode-error", + "KAFKA_STORAGE_ERROR", + "channel-error" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the messaging operation has failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "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" + ], + "name": "server.address", + "note": "Server domain name of the broker if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Common cross-signal messaging attributes.", + "id": "attributes.messaging.common.minimal", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.error" + }, + "messaging.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.messaging" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/messaging/common.yaml", + "registry_id": "main" + } + }, + "stability": "development", + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Indicates that the exception is escaping the scope of the span.\n", + "deprecated": { + "note": "It\u0027s no longer recommended to record exceptions that are handled and do not escape the scope of a span.\n", + "reason": "obsoleted" + }, + "name": "exception.escaped", + "requirement_level": "recommended", + "stability": "stable", + "type": "boolean" + } + ], + "brief": "Deprecated exception attributes.\n", + "display_name": "Deprecated Exception Attributes", + "id": "registry.exception.deprecated", + "lineage": { + "provenance": { + "path": "/home/weaver/source/exceptions/deprecated/registry-deprecated.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + } + ], + "brief": "These attributes may be used to describe the server in a connection-based network interaction where there is one side that initiates the connection (the client is the side that initiates the connection). This covers all TCP network interactions since TCP is connection-based and one side initiates the connection (an exception is made for peer-to-peer communication over TCP where the \"user-facing\" surface of the protocol / API doesn\u0027t expose a clear notion of client and server). This also covers UDP network interactions where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS.\n", + "display_name": "Server Attributes", + "id": "registry.server", + "lineage": { + "provenance": { + "path": "/home/weaver/source/server/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + } + ], + "brief": "These attributes may be used to describe the client in a connection-based network interaction where there is one side that initiates the connection (the client is the side that initiates the connection). This covers all TCP network interactions since TCP is connection-based and one side initiates the connection (an exception is made for peer-to-peer communication over TCP where the \"user-facing\" surface of the protocol / API doesn\u0027t expose a clear notion of client and server). This also covers UDP network interactions where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS.\n", + "display_name": "Client Attributes", + "id": "registry.client", + "lineage": { + "provenance": { + "path": "/home/weaver/source/client/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "HTTP server attributes", + "id": "metric_attributes.http.server", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.url" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "HTTP client attributes", + "id": "metric_attributes.http.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "HTTP client experimental attributes", + "id": "metric_attributes.http.client.experimental", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n\u003e **Warning**\n\u003e Since this attribute is based on HTTP headers, opting in to it may allow an attacker\n\u003e to trigger cardinality limits, degrading the usefulness of the metric.\n", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "Duration of HTTP server requests.", + "id": "metric.http.server.request.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.url" + }, + "user_agent.synthetic.type": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.user_agent.os" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.server.request.duration", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Duration of HTTP client requests.", + "id": "metric.http.client.request.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "http.client.request.duration", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "attributes": [ + { + "brief": "The name of the telemetry SDK as defined above.\n", + "examples": [ + "opentelemetry" + ], + "name": "telemetry.sdk.name", + "note": "The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute to `opentelemetry`.\nIf another SDK, like a fork or a vendor-provided implementation, is used, this SDK MUST set the\n`telemetry.sdk.name` attribute to the fully-qualified class or module name of this SDK\u0027s main entry point\nor another suitable identifier depending on the language.\nThe identifier `opentelemetry` is reserved and MUST NOT be used in this case.\nAll custom identifiers SHOULD be stable across different versions of an implementation.\n", + "requirement_level": "required", + "role": "identifying", + "stability": "stable", + "type": "string" + }, + { + "brief": "The language of the telemetry SDK.\n", + "name": "telemetry.sdk.language", + "requirement_level": "required", + "role": "identifying", + "stability": "stable", + "type": { + "members": [ + { + "id": "cpp", + "stability": "stable", + "value": "cpp" + }, + { + "id": "dotnet", + "stability": "stable", + "value": "dotnet" + }, + { + "id": "erlang", + "stability": "stable", + "value": "erlang" + }, + { + "id": "go", + "stability": "stable", + "value": "go" + }, + { + "id": "java", + "stability": "stable", + "value": "java" + }, + { + "id": "nodejs", + "stability": "stable", + "value": "nodejs" + }, + { + "id": "php", + "stability": "stable", + "value": "php" + }, + { + "id": "python", + "stability": "stable", + "value": "python" + }, + { + "id": "ruby", + "stability": "stable", + "value": "ruby" + }, + { + "id": "rust", + "stability": "stable", + "value": "rust" + }, + { + "id": "swift", + "stability": "stable", + "value": "swift" + }, + { + "id": "webjs", + "stability": "stable", + "value": "webjs" + } + ] + } + }, + { + "brief": "The version string of the telemetry SDK.\n", + "examples": [ + "1.2.3" + ], + "name": "telemetry.sdk.version", + "requirement_level": "required", + "role": "descriptive", + "stability": "stable", + "type": "string" + } + ], + "brief": "The telemetry SDK used to capture data recorded by the instrumentation libraries.\n", + "id": "entity.telemetry.sdk", + "lineage": { + "attributes": { + "telemetry.sdk.language": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.telemetry" + }, + "telemetry.sdk.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.telemetry" + }, + "telemetry.sdk.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "role" + ], + "source_group": "registry.telemetry" + } + }, + "provenance": { + "path": "/home/weaver/source/telemetry/entities.yaml", + "registry_id": "main" + } + }, + "name": "telemetry.sdk", + "stability": "stable", + "type": "entity" + }, + { + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If applicable." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "Describes RPC metric attributes.", + "id": "attributes.metrics.rpc.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "requirement_level": "opt_in", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "requirement_level": "opt_in", + "stability": "stable", + "type": "int" + } + ], + "brief": "Describes RPC metric attributes.", + "id": "attributes.metrics.rpc.server", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.rpc" + }, + "rpc.system": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This document defines semantic conventions for remote procedure calls.", + "id": "rpc", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This document defines semantic conventions for remote procedure calls.", + "id": "rpc_service", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This document defines semantic conventions for remote procedure calls.", + "id": "rpc.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "If `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or Unix domain socket name.", + "examples": [ + "client.example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "client.address", + "note": "When observed from the server side, and when communicating through an intermediary, `client.address` SHOULD represent the client address behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Client port number.", + "examples": [ + 65123 + ], + "name": "client.port", + "note": "When observed from the server side, and when communicating through an intermediary, `client.port` SHOULD represent the client port behind any intermediaries, for example proxies, if it\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD be predictable, and SHOULD have low cardinality.\n\nWhen `error.type` is set to a type (e.g., an exception type), its\ncanonical class name identifying the type within the artifact SHOULD be used.\n\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low.\nTelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time when no\nadditional filters are applied.\n\nIf the operation has completed successfully, instrumentations SHOULD NOT set `error.type`.\n\nIf a specific domain defines its own set of error identifiers (such as HTTP or gRPC status codes),\nit\u0027s RECOMMENDED to:\n\n- Use a domain-specific attribute\n- Set `error.type` to capture all errors, regardless of whether they are defined within the domain-specific set or not.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "RPC server [host name](https://grpc.github.io/grpc/core/md_doc_naming.html).\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "May contain server IP address, DNS name, or local socket name. When host component is an IP address, instrumentations SHOULD NOT do a reverse proxy lookup to obtain DNS name and SHOULD set `server.address` to the IP address provided in the host component.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "if the port is supported by the network transport used for communication." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This document defines semantic conventions for remote procedure calls.", + "id": "rpc_service.server", + "lineage": { + "attributes": { + "client.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "client.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.client" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "rpc.method": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "rpc.service": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.rpc" + }, + "server.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/rpc/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Common ASP.NET Core rate-limiting metrics attributes", + "id": "aspnetcore.common.rate_limiting.metrics.attributes", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException" + ], + "name": "error.type", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Common ASP.NET Core authentication metrics attributes", + "id": "aspnetcore.common.authentication.metrics.attributes", + "lineage": { + "attributes": { + "aspnetcore.authentication.scheme": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "A value that indicates whether the matched route is a fallback route.", + "examples": [ + true + ], + "name": "aspnetcore.routing.is_fallback", + "requirement_level": { + "conditionally_required": "if and only if a route was successfully matched." + }, + "stability": "stable", + "type": "boolean" + }, + { + "brief": "Match result - success or failure", + "examples": [ + "success", + "failure" + ], + "name": "aspnetcore.routing.match_status", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Match succeeded", + "id": "success", + "stability": "stable", + "value": "success" + }, + { + "brief": "Match failed", + "id": "failure", + "stability": "stable", + "value": "failure" + } + ] + } + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "if and only if a route was successfully matched." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Number of requests that were attempted to be matched to an endpoint.", + "id": "metric.aspnetcore.routing.match_attempts", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.routing.is_fallback": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.routing.match_status": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.routing.match_attempts", + "note": "Meter name: `Microsoft.AspNetCore.Routing`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{match_attempt}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException", + "Contoso.MyException" + ], + "name": "error.type", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Full type name of the [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) implementation that handled the exception.", + "examples": [ + "Contoso.MyHandler" + ], + "name": "aspnetcore.diagnostics.handler.type", + "requirement_level": { + "conditionally_required": "if and only if the exception was handled by this handler." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "ASP.NET Core exception middleware handling result.", + "examples": [ + "handled", + "unhandled" + ], + "name": "aspnetcore.diagnostics.exception.result", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Exception was handled by the exception handling middleware.", + "id": "handled", + "stability": "stable", + "value": "handled" + }, + { + "brief": "Exception was not handled by the exception handling middleware.", + "id": "unhandled", + "stability": "stable", + "value": "unhandled" + }, + { + "brief": "Exception handling was skipped because the response had started.", + "id": "skipped", + "stability": "stable", + "value": "skipped" + }, + { + "brief": "Exception handling didn\u0027t run because the request was aborted.", + "id": "aborted", + "stability": "stable", + "value": "aborted" + } + ] + } + } + ], + "brief": "Number of exceptions caught by exception handling middleware.", + "id": "metric.aspnetcore.diagnostics.exceptions", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.diagnostics.exception.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.diagnostics.handler.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.diagnostics.exceptions", + "note": "Meter name: `Microsoft.AspNetCore.Diagnostics`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{exception}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Number of requests that are currently active on the server that hold a rate limiting lease.", + "id": "metric.aspnetcore.rate_limiting.active_request_leases", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.active_request_leases", + "note": "Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "The duration of rate limiting lease held by requests on the server.", + "id": "metric.aspnetcore.rate_limiting.request_lease.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.request_lease.duration", + "note": "Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Rate-limiting result, shows whether the lease was acquired or contains a rejection reason", + "examples": [ + "acquired", + "request_canceled" + ], + "name": "aspnetcore.rate_limiting.result", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Lease was acquired", + "id": "acquired", + "stability": "stable", + "value": "acquired" + }, + { + "brief": "Lease request was rejected by the endpoint limiter", + "id": "endpoint_limiter", + "stability": "stable", + "value": "endpoint_limiter" + }, + { + "brief": "Lease request was rejected by the global limiter", + "id": "global_limiter", + "stability": "stable", + "value": "global_limiter" + }, + { + "brief": "Lease request was canceled", + "id": "request_canceled", + "stability": "stable", + "value": "request_canceled" + } + ] + } + } + ], + "brief": "The time the request spent in a queue waiting to acquire a rate limiting lease.", + "id": "metric.aspnetcore.rate_limiting.request.time_in_queue", + "instrument": "histogram", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.rate_limiting.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.request.time_in_queue", + "note": "Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Number of requests that are currently queued, waiting to acquire a rate limiting lease.", + "id": "metric.aspnetcore.rate_limiting.queued_requests", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.queued_requests", + "note": "Meter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "Rate limiting policy name.", + "examples": [ + "fixed", + "sliding", + "token" + ], + "name": "aspnetcore.rate_limiting.policy", + "requirement_level": { + "conditionally_required": "if the matched endpoint for the request had a rate-limiting policy." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Rate-limiting result, shows whether the lease was acquired or contains a rejection reason", + "examples": [ + "acquired", + "request_canceled" + ], + "name": "aspnetcore.rate_limiting.result", + "requirement_level": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "Lease was acquired", + "id": "acquired", + "stability": "stable", + "value": "acquired" + }, + { + "brief": "Lease request was rejected by the endpoint limiter", + "id": "endpoint_limiter", + "stability": "stable", + "value": "endpoint_limiter" + }, + { + "brief": "Lease request was rejected by the global limiter", + "id": "global_limiter", + "stability": "stable", + "value": "global_limiter" + }, + { + "brief": "Lease request was canceled", + "id": "request_canceled", + "stability": "stable", + "value": "request_canceled" + } + ] + } + } + ], + "brief": "Number of requests that tried to acquire a rate limiting lease.", + "id": "metric.aspnetcore.rate_limiting.requests", + "instrument": "counter", + "lineage": { + "attributes": { + "aspnetcore.rate_limiting.policy": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + }, + "aspnetcore.rate_limiting.result": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.aspnetcore" + } + }, + "provenance": { + "path": "/home/weaver/source/aspnetcore/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "aspnetcore.rate_limiting.requests", + "note": "Requests could be:\n\n* Rejected by global or endpoint rate limiting policies\n* Canceled while waiting for the lease.\n\nMeter name: `Microsoft.AspNetCore.RateLimiting`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{request}" + }, + { + "attributes": [ + { + "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", + "stability": "stable", + "type": "string" + }, + { + "brief": "The exception message.", + "examples": [ + "Division by zero", + "Can\u0027t convert \u0027int\u0027 object to str implicitly" + ], + "name": "exception.message", + "requirement_level": "recommended", + "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)\n", + "name": "exception.stacktrace", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "This document defines the shared attributes used to report a single exception associated with a span or log.\n", + "display_name": "Exception Attributes", + "id": "registry.exception", + "lineage": { + "provenance": { + "path": "/home/weaver/source/exceptions/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "Describes HTTP attributes.", + "id": "attributes.http.common", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + } + }, + "provenance": { + "path": "/home/weaver/source/http/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "note": "In HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.address` SHOULD match the host component of the request target.\n\nIn all other cases, `server.address` SHOULD match the host component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "In the case of HTTP/1.1, when the [request target](https://www.rfc-editor.org/rfc/rfc9112.html#name-request-target)\nis passed in its [absolute-form](https://www.rfc-editor.org/rfc/rfc9112.html#section-3.2.2),\nthe `server.port` SHOULD match the port component of the request target.\n\nIn all other cases, `server.port` SHOULD match the port component of the\n`Host` header in HTTP/1.1 or the `:authority` pseudo-header in HTTP/2 and HTTP/3.\n", + "requirement_level": "required", + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "requirement_level": "opt_in", + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "HTTP Client attributes", + "id": "attributes.http.client", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.url" + }, + "url.template": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "If the request fails with an error before response status code was sent or received,\n`error.type` SHOULD be set to exception type (its fully-qualified class name, if applicable)\nor a component-specific low cardinality error identifier.\n\nIf response status code was sent or received and status indicates an error according to [HTTP span status definition](/docs/http/http-spans.md),\n`error.type` SHOULD be set to the status code number (represented as a string), an exception type (if thrown) or a component-specific error identifier.\n\nThe `error.type` value SHOULD be predictable and SHOULD have low cardinality.\nInstrumentations SHOULD document the list of errors they report.\n\nThe cardinality of `error.type` within one instrumentation library SHOULD be low, but\ntelemetry consumers that aggregate data from multiple instrumentation libraries and applications\nshould be prepared for `error.type` to have high cardinality at query time, when no\nadditional filters are applied.\n\nIf the request has completed successfully, instrumentations SHOULD NOT set `error.type`.\n", + "requirement_level": { + "conditionally_required": "If request has ended with an error." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "spdy" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "conditionally_required": "If not `http` and `network.protocol.version` is set." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.0", + "1.1", + "2", + "3" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the local HTTP server that received the request.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Port of the local HTTP server that received the request.\n", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "note": "See [Setting `server.address` and `server.port` attributes](/docs/http/http-spans.md#setting-serveraddress-and-serverport-attributes).\n", + "requirement_level": { + "conditionally_required": "If available and `server.address` is set." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "[HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6).", + "examples": [ + 200 + ], + "name": "http.response.status_code", + "requirement_level": { + "conditionally_required": "If and only if one was received/sent." + }, + "stability": "stable", + "type": "int" + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": { + "conditionally_required": "If and only if it\u0027s available" + }, + "stability": "stable", + "type": "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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": "required", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "http", + "https" + ], + "name": "url.scheme", + "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.\n", + "requirement_level": "required", + "stability": "stable", + "type": "string" + } + ], + "brief": "HTTP Server attributes", + "id": "attributes.http.server", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "http.request.method": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "http.route": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.http" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.server" + }, + "url.scheme": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.url" + } + }, + "provenance": { + "path": "/home/weaver/source/http/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Common kestrel attributes", + "id": "common.kestrel.attributes", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of connections that are currently active on the server.", + "id": "metric.kestrel.active_connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.active_connections", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "The full name of exception type.", + "examples": [ + "connection_reset", + "invalid_handshake" + ], + "name": "error.type", + "note": "Starting from .NET 9, Kestrel `kestrel.connection.duration` metric reports\nthe following errors types when a corresponding error occurs:\n\n| Value | Description | Stability |\n|---|---|---|\n| `aborted_by_app` | The HTTP/1.1 connection was aborted when app code aborted an HTTP request with `HttpContext.Abort()`. |\n| `app_shutdown_timeout` | The connection was aborted during app shutdown. During shutdown, the server stops accepting new connections and HTTP requests, and it is given time for active requests to complete. If the app shutdown timeout is exceeded, all remaining connections are aborted. |\n| `closed_critical_stream` | A critical control stream for an HTTP/3 connection was closed. |\n| `connection_reset` | The connection was reset while there were active HTTP/2 or HTTP/3 streams on the connection. |\n| `error_after_starting_response` | An error such as an unhandled application exception or invalid request body occurred after the response was started, causing an abort of the HTTP/1.1 connection. |\n| `error_reading_headers` | An error occurred when decoding HPACK headers in an HTTP/2 `HEADERS` frame. |\n| `error_writing_headers` | An error occurred when encoding HPACK headers in an HTTP/2 `HEADERS` frame. |\n| `flow_control_queue_size_exceeded` | The connection exceeded the outgoing flow control maximum queue size and was closed with `INTERNAL_ERROR`. This can be caused by an excessive number of HTTP/2 stream resets. For more information, see [Microsoft Security Advisory CVE-2023-44487](https://github.com/dotnet/runtime/issues/93303). |\n| `flow_control_window_exceeded` | The client sent more data than allowed by the current flow-control window. |\n| `frame_after_stream_close` | An HTTP/2 frame was received on a closed stream. |\n| `insufficient_tls_version` | The connection doesn\u0027t have TLS 1.2 or greater, as required by HTTP/2. |\n| `invalid_body_reader_state` | An error occurred when draining the request body, aborting the HTTP/1.1 connection. This could be caused by app code reading the request body and missing a call to `PipeReader.AdvanceTo` in a finally block. |\n| `invalid_data_padding` | An HTTP/2 `HEADER` or `DATA` frame has an invalid amount of padding. |\n| `invalid_frame_length` | An HTTP/2 frame was received with an invalid frame payload length. The frame could contain a payload that is not valid for the type, or a `DATA` frame payload does not match the length specified in the frame header. |\n| `invalid_handshake` | An invalid HTTP/2 handshake was received. |\n| `invalid_http_version` | The connection received an HTTP request with the wrong version. For example, a browser sends an HTTP/1.1 request to a plain-text HTTP/2 connection. |\n| `invalid_request_headers` | The HTTP request contains invalid headers. This error can occur in a number of scenarios: a header might not be allowed by the HTTP protocol, such as a pseudo-header in the `HEADERS` frame of an HTTP/2 request. A header could also have an invalid value, such as a non-integer `content-length`, or a header name or value might contain invalid characters. |\n| `invalid_request_line` | The first line of an HTTP/1.1 request was invalid, potentially due to invalid content or exceeding the allowed limit. Configured by `KestrelServerLimits.MaxRequestLineSize`. |\n| `invalid_settings` | The connection received an HTTP/2 or HTTP/3 `SETTINGS` frame with invalid settings. |\n| `invalid_stream_id` | An HTTP/2 stream with an invalid stream ID was received. |\n| `invalid_window_update_size` | The server received an HTTP/2 `WINDOW_UPDATE` frame with a zero increment, or an increment that caused a flow-control window to exceed the maximum size. |\n| `io_error` | An `IOException` occurred while reading or writing HTTP/2 or HTTP/3 connection data. |\n| `keep_alive_timeout` | There was no activity on the connection, and the keep-alive timeout configured by `KestrelServerLimits.KeepAliveTimeout` was exceeded. |\n| `max_concurrent_connections_exceeded` | The connection exceeded the maximum concurrent connection limit. Configured by `KestrelServerLimits.MaxConcurrentConnections`. |\n| `max_frame_length_exceeded` | The connection received an HTTP/2 frame that exceeded the size limit specified by `Http2Limits.MaxFrameSize`. |\n| `max_request_body_size_exceeded` | The HTTP request body exceeded the maximum request body size limit. Configured by `KestrelServerLimits.MaxRequestBodySize`. |\n| `max_request_header_count_exceeded` | The HTTP request headers exceeded the maximum count limit. Configured by `KestrelServerLimits.MaxRequestHeaderCount`. |\n| `max_request_headers_total_size_exceeded` | The HTTP request headers exceeded the maximum total size limit. Configured by `KestrelServerLimits.MaxRequestHeadersTotalSize`. |\n| `min_request_body_data_rate` | Reading the request body timed out due to data arriving too slowly. Configured by `KestrelServerLimits.MinRequestBodyDataRate`. |\n| `min_response_data_rate` | Writing the response timed out because the client did not read it at the specified minimum data rate. Configured by `KestrelServerLimits.MinResponseDataRate`. |\n| `missing_stream_end` | The connection received an HTTP/2 `HEADERS` frame for trailers without a stream end flag. |\n| `output_queue_size_exceeded` | The connection exceeded the output queue size and was closed with `INTERNAL_ERROR`. This can be caused by an excessive number of HTTP/2 stream resets. For more information, see [Microsoft Security Advisory CVE-2023-44487](https://github.com/dotnet/runtime/issues/93303). |\n| `request_headers_timeout` | Request headers timed out while waiting for headers to be received after the request started. Configured by `KestrelServerLimits.RequestHeadersTimeout`. |\n| `response_content_length_mismatch` | The HTTP response body sent data that didn\u0027t match the response\u0027s `content-length` header. |\n| `server_timeout` | The connection timed out with the `IConnectionTimeoutFeature`. |\n| `stream_creation_error` | The HTTP/3 connection received a stream that it wouldn\u0027t accept. For example, the client created duplicate control streams. |\n| `stream_reset_limit_exceeded` | The connection received an excessive number of HTTP/2 stream resets and was closed with `ENHANCE_YOUR_CALM`. For more information, see [Microsoft Security Advisory CVE-2023-44487](https://github.com/dotnet/runtime/issues/93303). |\n| `stream_self_dependency` | The connection received an HTTP/2 frame that caused a frame to depend on itself. |\n| `tls_handshake_failed` | An error occurred during the TLS handshake for a connection. Only reported for HTTP/1.1 and HTTP/2 connections. The TLS handshake for HTTP/3 is internal to QUIC transport. ![Development](https://img.shields.io/badge/-development-blue) |\n| `tls_not_supported` | A TLS handshake was received by an endpoint that isn\u0027t configured to support TLS. |\n| `unexpected_end_of_request_content` | The HTTP/1.1 request body ended before the data specified by the `content-length` header or chunked transfer encoding mechanism was received. |\n| `unexpected_frame` | An unexpected HTTP/2 or HTTP/3 frame type was received. The frame type is either unknown, unsupported, or invalid for the current stream state. |\n| `unknown_stream` | An HTTP/2 frame was received on an unknown stream. |\n| `write_canceled` | The cancellation of a response body write aborted the HTTP/1.1 connection. |\n\nIn other cases, `error.type` contains the fully qualified type name of the exception.\n", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "web_sockets" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "The duration of connections on the server.", + "id": "metric.kestrel.connection.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "tls.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.tls" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.connection.duration", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of connections rejected by the server.", + "id": "metric.kestrel.rejected_connections", + "instrument": "counter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.rejected_connections", + "note": "Connections are rejected when the currently active count exceeds the value configured with `MaxConcurrentConnections`.\nMeter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of connections that are currently queued and are waiting to start.", + "id": "metric.kestrel.queued_connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.queued_connections", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "brief": "The actual version of the protocol used for network communication.", + "examples": [ + "1.1", + "2" + ], + "name": "network.protocol.version", + "note": "If protocol version is subject to negotiation (for example using [ALPN](https://www.rfc-editor.org/rfc/rfc7301.html)), this attribute SHOULD be set to the negotiated version. If the actual protocol version is not known, this attribute SHOULD NOT be set.\n", + "requirement_level": "recommended", + "stability": "stable", + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "[OSI application layer](https://wikipedia.org/wiki/Application_layer) or non-OSI equivalent.", + "examples": [ + "http", + "web_sockets" + ], + "name": "network.protocol.name", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Number of HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are currently queued and are waiting to start.", + "id": "metric.kestrel.queued_requests", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.protocol.name": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.protocol.version": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.queued_requests", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{request}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of connections that are currently upgraded (WebSockets). .", + "id": "metric.kestrel.upgraded_connections", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.upgraded_connections", + "note": "The counter only tracks HTTP/1.1 connections.\n\nMeter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{connection}" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "double" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + }, + { + "brief": "The full name of exception type.", + "examples": [ + "System.OperationCanceledException", + "Contoso.MyException" + ], + "name": "error.type", + "note": "Captures the exception type when a TLS handshake fails.", + "requirement_level": { + "conditionally_required": "if and only if an error has occurred." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + } + ], + "brief": "The duration of TLS handshakes on the server.", + "id": "metric.kestrel.tls_handshake.duration", + "instrument": "histogram", + "lineage": { + "attributes": { + "error.type": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "tls.protocol.version": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.tls" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.tls_handshake.duration", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "s" + }, + { + "annotations": { + "code_generation": { + "metric_value_type": "int" + } + }, + "attributes": [ + { + "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" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "[OSI network layer](https://wikipedia.org/wiki/Network_layer) or non-OSI equivalent.", + "examples": [ + "ipv4", + "ipv6" + ], + "name": "network.type", + "note": "The value SHOULD be normalized to lowercase.", + "requirement_level": { + "recommended": "if the transport is `tcp` or `udp`" + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "IPv4", + "id": "ipv4", + "stability": "stable", + "value": "ipv4" + }, + { + "brief": "IPv6", + "id": "ipv6", + "stability": "stable", + "value": "ipv6" + } + ] + } + }, + { + "brief": "[OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication).\n", + "examples": [ + "tcp", + "unix" + ], + "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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "TCP", + "id": "tcp", + "stability": "stable", + "value": "tcp" + }, + { + "brief": "UDP", + "id": "udp", + "stability": "stable", + "value": "udp" + }, + { + "brief": "Named or anonymous pipe.", + "id": "pipe", + "stability": "stable", + "value": "pipe" + }, + { + "brief": "Unix domain socket", + "id": "unix", + "stability": "stable", + "value": "unix" + }, + { + "brief": "QUIC", + "id": "quic", + "stability": "stable", + "value": "quic" + } + ] + } + } + ], + "brief": "Number of TLS handshakes that are currently in progress on the server.", + "id": "metric.kestrel.active_tls_handshakes", + "instrument": "updowncounter", + "lineage": { + "attributes": { + "network.transport": { + "inherited_fields": [ + "brief", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "examples" + ], + "source_group": "registry.network" + }, + "network.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/kestrel/metrics.yaml", + "registry_id": "main" + } + }, + "metric_name": "kestrel.active_tls_handshakes", + "note": "Meter name: `Microsoft.AspNetCore.Server.Kestrel`; Added in: ASP.NET Core 8.0\n", + "stability": "stable", + "type": "metric", + "unit": "{handshake}" + }, + { + "attributes": [ + { + "brief": "Name of the code, either \"OK\" or \"ERROR\". MUST NOT be set if the status code is UNSET.", + "name": "otel.status_code", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The operation has been validated by an Application developer or Operator to have completed successfully.", + "id": "ok", + "stability": "stable", + "value": "OK" + }, + { + "brief": "The operation contains an error.", + "id": "error", + "stability": "stable", + "value": "ERROR" + } + ] + } + }, + { + "brief": "Description of the Status if it has a value, otherwise not set.", + "examples": [ + "resource not found" + ], + "name": "otel.status_description", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Attributes reserved for OpenTelemetry", + "display_name": "OTel Attributes", + "id": "registry.otel", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The name of the instrumentation scope - (`InstrumentationScope.Name` in OTLP).", + "examples": [ + "io.opentelemetry.contrib.mongodb" + ], + "name": "otel.scope.name", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The version of the instrumentation scope - (`InstrumentationScope.Version` in OTLP).", + "examples": [ + "1.0.0" + ], + "name": "otel.scope.version", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Attributes used by non-OTLP exporters to represent OpenTelemetry Scope\u0027s concepts.", + "display_name": "OTel Scope Attributes", + "id": "registry.otel.scope", + "lineage": { + "provenance": { + "path": "/home/weaver/source/otel/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The [URI fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component\n", + "examples": [ + "SemConv" + ], + "name": "url.fragment", + "requirement_level": "recommended", + "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\nis not transmitted over HTTP, but if it is known, it SHOULD be included nevertheless.\n\n`url.full` MUST NOT contain credentials passed via URL in form of `https://username:password@www.example.com/`.\nIn such case username and password SHOULD be redacted and attribute\u0027s value SHOULD be `https://REDACTED:REDACTED@www.example.com/`.\n\n`url.full` SHOULD capture the absolute URL when it is available (or can be reconstructed).\n\nSensitive content provided in `url.full` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the\nvalue `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`https://www.example.com/path?color=blue\u0026sig=REDACTED`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component\n", + "examples": [ + "/search" + ], + "name": "url.path", + "note": "Sensitive content provided in `url.path` SHOULD be scrubbed when instrumentations can identify it.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component\n", + "examples": [ + "q=OpenTelemetry" + ], + "name": "url.query", + "note": "Sensitive content provided in `url.query` SHOULD be scrubbed when instrumentations can identify it.\n\n![Development](https://img.shields.io/badge/-development-blue)\nQuery string values for the following keys SHOULD be redacted by default and replaced by the value `REDACTED`:\n\n* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`Signature`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth)\n* [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token)\n* [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls)\n\nThis list is subject to change over time.\n\nWhen a query string value is redacted, the query string key SHOULD still be preserved, e.g.\n`q=OpenTelemetry\u0026sig=REDACTED`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + }, + { + "brief": "The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol.\n", + "examples": [ + "https", + "ftp", + "telnet" + ], + "name": "url.scheme", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Attributes describing URL.", + "display_name": "URL Attributes", + "id": "registry.url", + "lineage": { + "provenance": { + "path": "/home/weaver/source/url/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group defines the attributes used to perform database client calls.", + "id": "trace.db.common.minimal", + "lineage": { + "attributes": { + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + } + ], + "brief": "This group defines the attributes used to perform database client calls.", + "id": "trace.db.common.query", + "lineage": { + "attributes": { + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + } + ], + "brief": "This group defines the attributes used to perform database client calls.", + "id": "trace.db.common.query_and_collection", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database management system (DBMS) product as identified by the client instrumentation.", + "name": "db.system.name", + "note": "The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": { + "members": [ + { + "brief": "[MariaDB](https://mariadb.org/)", + "id": "mariadb", + "stability": "stable", + "value": "mariadb" + }, + { + "brief": "[Microsoft SQL Server](https://www.microsoft.com/sql-server)", + "id": "microsoft.sql_server", + "stability": "stable", + "value": "microsoft.sql_server" + }, + { + "brief": "[MySQL](https://www.mysql.com/)", + "id": "mysql", + "stability": "stable", + "value": "mysql" + }, + { + "brief": "[PostgreSQL](https://www.postgresql.org/)", + "id": "postgresql", + "stability": "stable", + "value": "postgresql" + } + ] + } + }, + { + "brief": "Peer address of the database node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "Semantic conventions for individual database systems SHOULD document whether `network.peer.*` attributes are applicable. Network peer address and port are useful when the application interacts with individual database nodes directly.\nIf a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": { + "recommended": "If applicable for this database system." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "if and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This group documents attributes that describe database call along with network information.", + "id": "trace.db.common.full", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.system.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Database response status code.", + "examples": [ + "102", + "ORA-17002", + "08P01", + "404" + ], + "name": "db.response.status_code", + "note": "The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.\nSemantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.\n", + "requirement_level": { + "conditionally_required": "If the operation failed and status code is available." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "findAndModify", + "HMSET", + "SELECT" + ], + "name": "db.operation.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe operation name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple operations\nin non-batch operations.\n\nIf spaces can occur in the operation name, multiple consecutive spaces\nSHOULD be normalized to a single space.\n\nFor batch operations, if the individual operations are known to have the same operation name\nthen that operation name SHOULD be used prepended by `BATCH `,\notherwise `db.operation.name` SHOULD be `BATCH` or some other database\nsystem specific term if more applicable.\n", + "requirement_level": { + "conditionally_required": "If readily available and if there is a single operation name that describes the database call.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nThe collection name SHOULD NOT be extracted from `db.query.text`,\nwhen the database system supports query text with multiple collections\nin non-batch operations.\n\nFor batch operations, if the individual operations are known to have the same\ncollection name then that collection name SHOULD be used.\n", + "requirement_level": { + "conditionally_required": "If readily available and if a database call is performed on a single collection.\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the database, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components, they SHOULD be concatenated from the most general to the most specific namespace component, using `|` as a separator between the components. Any missing components (and their associated separators) SHOULD be omitted.\nSemantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system.\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database management system (DBMS) product as identified by the client instrumentation.", + "name": "db.system.name", + "note": "The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation\u0027s best knowledge.\n", + "requirement_level": "required", + "sampling_relevant": true, + "stability": "stable", + "type": { + "members": [ + { + "brief": "[MariaDB](https://mariadb.org/)", + "id": "mariadb", + "stability": "stable", + "value": "mariadb" + }, + { + "brief": "[Microsoft SQL Server](https://www.microsoft.com/sql-server)", + "id": "microsoft.sql_server", + "stability": "stable", + "value": "microsoft.sql_server" + }, + { + "brief": "[MySQL](https://www.mysql.com/)", + "id": "mysql", + "stability": "stable", + "value": "mysql" + }, + { + "brief": "[PostgreSQL](https://www.postgresql.org/)", + "id": "postgresql", + "stability": "stable", + "value": "postgresql" + } + ] + } + }, + { + "brief": "Peer address of the database node where the operation was performed.", + "examples": [ + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "network.peer.address", + "note": "Semantic conventions for individual database systems SHOULD document whether `network.peer.*` attributes are applicable. Network peer address and port are useful when the application interacts with individual database nodes directly.\nIf a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used.\n", + "requirement_level": { + "recommended": "If applicable for this database system." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Peer port number of the network connection.", + "examples": [ + 65123 + ], + "name": "network.peer.port", + "requirement_level": { + "recommended": "if and only if `network.peer.address` is set." + }, + "stability": "stable", + "type": "int" + } + ], + "brief": "This span describes database client call.", + "id": "span.db.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.system.name": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "network.peer.address": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.network" + }, + "network.peer.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.network" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "Instrumentations SHOULD, when possible, record database spans that cover the duration of\nthe corresponding API call as if it was observed by the caller (such as client application).\nFor example, if a transient issue happened and was retried within this database call, the corresponding\nspan should cover the duration of the logical operation with all retries.\n\nWhen a database client provides higher-level convenience APIs for specific operations\n(e.g., calling a stored procedure), which internally generate and execute a generic query,\nit is RECOMMENDED to instrument the higher-level convenience APIs.\nThese often allow setting `db.operation.*` attributes, which usually are not\nreadily available at the generic query level.\n\n**Span name** is covered in the [Name](/docs/database/database-spans.md#name) section.\n\n**Span kind** SHOULD be `CLIENT`. It MAY be set to `INTERNAL` on spans representing\nin-memory database calls.\nIt\u0027s RECOMMENDED to use `CLIENT` kind when database system being instrumented usually\nruns in a different process than its client or when database calls happen over\ninstrumented protocol such as HTTP.\n\n**Span status** SHOULD follow the [Recording Errors](/docs/general/recording-errors.md) document.\nSemantic conventions for individual systems SHOULD specify which values of `db.response.status_code`\nclassify as errors.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database associated with the connection, qualified by the instance name.\n", + "examples": [ + "instance1\\|products", + "customers" + ], + "name": "db.namespace", + "note": "When connected to a default instance, `db.namespace` SHOULD be set to the name of\nthe database. When connected to a [named instance](https://learn.microsoft.com/sql/connect/jdbc/building-the-connection-url#named-and-multiple-sql-server-instances),\n`db.namespace` SHOULD be set to the combination of instance and database name following the `{instance_name}|{database_name}` pattern.\n\nA connection\u0027s currently associated database may change during its lifetime, e.g. from executing `USE \u003cdatabase\u003e`.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated database on each query\nwithout triggering an additional query to be executed (e.g. `SELECT DB_NAME()`),\nthen it is RECOMMENDED to fallback and use the database provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the database provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "[Microsoft SQL Server error](https://learn.microsoft.com/sql/relational-databases/errors-events/database-engine-events-and-errors) number represented as a string.\n", + "examples": [ + "102", + "40020" + ], + "name": "db.response.status_code", + "note": "Microsoft SQL Server does not report SQLSTATE.\nInstrumentations SHOULD use [error severity](https://learn.microsoft.com/sql/relational-databases/errors-events/database-engine-error-severities) returned along with the status code to determine the status of the span. Response codes with severity 11 or higher SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to Microsoft SQL Server adhere to the general [Semantic Conventions for Database Client Spans](database-spans.md).\n", + "id": "span.db.sql_server.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"microsoft.sql_server\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The schema associated with the connection, qualified by the database name.\n", + "examples": [ + "mydatabase.products", + "mydatabase.customers" + ], + "name": "db.namespace", + "note": "`db.namespace` SHOULD be set to the combination of database and schema name following the `{database}|{schema}` pattern.\nIf either `{database}` or `{schema}` is unavailable, `db.namespace` SHOULD be set to the other (without any `|` separator).\n\nA connection\u0027s currently associated database may change during its lifetime, e.g. from executing `SET search_path TO \u003cschema\u003e`.\nIf the search path has multiple schemas, the first schema in the search path SHOULD be used.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated schema on each query\nwithout triggering an additional query to be executed (e.g. `SELECT current_schema()`),\nthen it is RECOMMENDED to fallback and use the schema provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the schema provided when the connection was established.\n\nInstrumentation MAY use the user name when the connection was established as a stand-in for the schema name.\n\nInstrumentation SHOULD document if `db.namespace` reflects the user provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "[PostgreSQL error code](https://www.postgresql.org/docs/current/errcodes-appendix.html).\n", + "examples": [ + "08000", + "08P01" + ], + "name": "db.response.status_code", + "note": "PostgreSQL follows SQL standard conventions for [SQLSTATE](https://wikipedia.org/wiki/SQLSTATE). Response codes of \"Class 02\" or higher SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to a PostgreSQL database adhere to the general [Semantic Conventions for Database Client Spans](database-spans.md).\n", + "id": "span.db.postgresql.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"postgresql\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database associated with the connection.", + "examples": [ + "products", + "customers" + ], + "name": "db.namespace", + "note": "A connection\u0027s currently associated database may change during its lifetime, e.g. from executing `USE \u003cdatabase\u003e`.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated database on each query\nwithout triggering an additional query to be executed (e.g. `SELECT DATABASE()`),\nthen it is RECOMMENDED to fallback and use the database provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the database provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "[MySQL error number](https://dev.mysql.com/doc/mysql-errors/9.0/en/error-reference-introduction.html) recorded as a string.\n", + "examples": [ + "1005", + "MY-010016" + ], + "name": "db.response.status_code", + "note": "MySQL error codes are vendor specific error codes and don\u0027t follow [SQLSTATE](https://wikipedia.org/wiki/SQLSTATE) conventions. All MySQL error codes SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to a MySQL Server adhere to the general [Semantic Conventions for Database Client Spans](database-spans.md).\n", + "id": "span.db.mysql.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"mysql\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database associated with the connection.", + "examples": [ + "products", + "customers" + ], + "name": "db.namespace", + "note": "A connection\u0027s currently associated database may change during its lifetime, e.g. from executing `USE \u003cdatabase\u003e`.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated database on each query\nwithout triggering an additional query to be executed (e.g. `SELECT DATABASE()`),\nthen it is RECOMMENDED to fallback and use the database provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the database provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "[Maria DB error code](https://mariadb.com/kb/en/mariadb-error-code-reference/) represented as a string.\n", + "examples": [ + "1008", + "3058" + ], + "name": "db.response.status_code", + "note": "MariaDB uses vendor-specific error codes on all errors and reports [SQLSTATE](https://mariadb.com/kb/en/sqlstate/) in some cases.\nMariaDB error codes are more granular than SQLSTATE, so MariaDB instrumentations SHOULD set the `db.response.status_code` to this known error code.\nWhen SQLSTATE is available, SQLSTATE of \"Class 02\" or higher SHOULD be considered errors. When SQLSTATE is not available, all MariaDB error codes SHOULD be considered errors.\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "Spans representing calls to MariaDB adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/README.md).\n", + "id": "span.db.mariadb.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "`db.system.name` MUST be set to `\"mariadb\"` and SHOULD be provided **at span creation time**.\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "brief": "The number of queries included in a batch operation.", + "examples": [ + 2, + 3, + 4 + ], + "name": "db.operation.batch.size", + "note": "Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "int" + }, + { + "brief": "Describes a class of error the operation ended with.\n", + "examples": [ + "timeout", + "java.net.UnknownHostException", + "server_certificate_invalid", + "500" + ], + "name": "error.type", + "note": "The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.\nWhen using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.\nInstrumentations SHOULD document how `error.type` is populated.\n", + "requirement_level": { + "conditionally_required": "If and only if the operation failed." + }, + "stability": "stable", + "type": { + "members": [ + { + "brief": "A fallback error value to be used when the instrumentation doesn\u0027t define a custom value.\n", + "id": "other", + "stability": "stable", + "value": "_OTHER" + } + ] + } + }, + { + "brief": "Name of the database host.\n", + "examples": [ + "example.com", + "10.1.2.80", + "/tmp/my.sock" + ], + "name": "server.address", + "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\u0027s available.\n", + "requirement_level": "recommended", + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "Server port number.", + "examples": [ + 80, + 8080, + 443 + ], + "name": "server.port", + "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\u0027s available.\n", + "requirement_level": { + "conditionally_required": "If using a port other than the default port for this DBMS and if `server.address` is set." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "int" + }, + { + "brief": "Low cardinality summary of a database query.\n", + "examples": [ + "SELECT wuser_table", + "INSERT shipping_details SELECT orders", + "get user by id" + ], + "name": "db.query.summary", + "note": "The query summary describes a class of database queries and is useful\nas a grouping key, especially when analyzing telemetry for database\ncalls involving complex queries.\n\nSummary may be available to the instrumentation through\ninstrumentation hooks or other means. If it is not available, instrumentations\nthat support query parsing SHOULD generate a summary following\n[Generating query summary](/docs/database/database-spans.md#generating-a-summary-of-the-query)\nsection.\n", + "requirement_level": { + "recommended": "if available through instrumentation hooks or if the instrumentation supports generating a query summary." + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database query being executed.\n", + "examples": [ + "SELECT * FROM wuser_table where username = ?", + "SET mykey ?" + ], + "name": "db.query.text", + "note": "For sanitization see [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nFor batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used, otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.\nParameterized query text SHOULD NOT be sanitized. Even though parameterized query text can potentially have sensitive data, by using a parameterized query the user is giving a strong signal that any sensitive data will be passed as parameter values, and the benefit to observability of capturing the static part of the query text by default outweighs the risk.\n", + "requirement_level": { + "recommended": "Non-parameterized query text SHOULD NOT be collected by default unless there is sanitization that excludes sensitive data, e.g. by redacting all literal values present in the query text. See [Sanitization of `db.query.text`](/docs/database/database-spans.md#sanitization-of-dbquerytext).\nParameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.\u003ckey\u003e`](/docs/registry/attributes/db.md)).\n" + }, + "sampling_relevant": true, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a stored procedure within the database.", + "examples": [ + "GetCustomer" + ], + "name": "db.stored_procedure.name", + "note": "It is RECOMMENDED to capture the value as provided by the application\nwithout attempting to do any case normalization.\n\nFor batch operations, if the individual operations are known to have the same\nstored procedure name then that stored procedure name SHOULD be used.\n", + "requirement_level": { + "recommended": "If operation applies to a specific stored procedure." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of a collection (table, container) within the database.", + "examples": [ + "public.users", + "customers" + ], + "name": "db.collection.name", + "note": "The collection name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple collection names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The name of the operation or command being executed.\n", + "examples": [ + "EXECUTE", + "INSERT" + ], + "name": "db.operation.name", + "note": "The operation name SHOULD NOT be extracted from `db.query.text`.\n", + "requirement_level": { + "recommended": "If the operation is executed via a higher-level API that does not support multiple operation names." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The database associated with the connection, fully qualified within the server address and port.\n", + "examples": [ + "customers", + "test.users" + ], + "name": "db.namespace", + "note": "If a database system has multiple namespace components (e.g. schema name and database name), they SHOULD be concatenated\nfrom the most general to the most specific namespace component,\nusing `|` as a separator between the components.\nAny missing components (and their associated separators) SHOULD be omitted.\n\nSemantic conventions for individual database systems SHOULD document what `db.namespace`\nmeans in the context of that system.\n\nA connection\u0027s currently associated database may change during its lifetime, e.g. from executing `USE \u003cdatabase\u003e`.\n\nIf instrumentation is unable to capture the connection\u0027s currently associated database on each query\nwithout triggering an additional query to be executed (e.g. `SELECT DATABASE()`),\nthen it is RECOMMENDED to fallback and use the database provided when the connection was established.\n\nInstrumentation SHOULD document if `db.namespace` reflects the database provided when the connection was established.\n\nIt is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization.\n", + "requirement_level": { + "conditionally_required": "If available without an additional network call." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "Database response code recorded as a string.\n", + "examples": [ + "ORA-17027", + "1052", + "2201B" + ], + "name": "db.response.status_code", + "note": "SQL defines [SQLSTATE](https://wikipedia.org/wiki/SQLSTATE) as a database\nreturn code which is adopted by some database systems like PostgreSQL.\nSee [PostgreSQL error codes](https://www.postgresql.org/docs/current/errcodes-appendix.html)\nfor the details.\n\nOther systems like MySQL, Oracle, or MS SQL Server define vendor-specific\nerror codes. Database SQL drivers usually provide access to both properties.\nFor example, in Java, the [`SQLException`](https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html)\nclass reports them with `getSQLState()` and `getErrorCode()` methods.\n\nInstrumentations SHOULD populate the `db.response.status_code` with the\nthe most specific code available to them.\n\nHere\u0027s a non-exhaustive list of databases that report vendor-specific\ncodes with granularity higher than SQLSTATE (or don\u0027t report SQLSTATE\nat all):\n\n- [DB2 SQL codes](https://www.ibm.com/docs/db2-for-zos/12?topic=codes-sql).\n- [Maria DB error codes](https://mariadb.com/kb/en/mariadb-error-code-reference/)\n- [Microsoft SQL Server errors](https://docs.microsoft.com/sql/relational-databases/errors-events/database-engine-events-and-errors)\n- [MySQL error codes](https://dev.mysql.com/doc/mysql-errors/9.0/en/error-reference-introduction.html)\n- [Oracle error codes](https://docs.oracle.com/cd/B28359_01/server.111/b28278/toc.htm)\n- [SQLite result codes](https://www.sqlite.org/rescode.html)\n\nThese systems SHOULD set the `db.response.status_code` to a\nknown vendor-specific error code. If only SQLSTATE is available,\nit SHOULD be used.\n\nWhen multiple error codes are available and specificity is unclear,\ninstrumentation SHOULD set the `db.response.status_code` to the\nconcatenated string of all codes with \u0027/\u0027 used as a separator.\n\nFor example, generic DB instrumentation that detected an error and has\nSQLSTATE `\"42000\"` and vendor-specific `1071` should set\n`db.response.status_code` to `\"42000/1071\"`.\"\n", + "requirement_level": { + "conditionally_required": "If response has ended with warning or an error." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "The SQL databases Semantic Conventions describes how common [Database Semantic Conventions](/docs/database/database-spans.md) apply to SQL databases.\n", + "id": "span.db.sql.client", + "lineage": { + "attributes": { + "db.collection.name": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.namespace": { + "inherited_fields": [ + "examples", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.operation.batch.size": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.db" + }, + "db.operation.name": { + "inherited_fields": [ + "brief", + "stability" + ], + "locally_overridden_fields": [ + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.parameter": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.query.summary": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.query.text": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.db" + }, + "db.response.returned_rows": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.response.status_code": { + "inherited_fields": [ + "stability" + ], + "locally_overridden_fields": [ + "brief", + "examples", + "note", + "requirement_level" + ], + "source_group": "registry.db" + }, + "db.stored_procedure.name": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.db" + }, + "error.type": { + "inherited_fields": [ + "brief", + "examples", + "stability" + ], + "locally_overridden_fields": [ + "note", + "requirement_level" + ], + "source_group": "registry.error" + }, + "server.address": { + "inherited_fields": [ + "examples", + "note", + "requirement_level", + "stability" + ], + "locally_overridden_fields": [ + "brief", + "sampling_relevant" + ], + "source_group": "registry.server" + }, + "server.port": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level", + "sampling_relevant" + ], + "source_group": "registry.server" + } + }, + "provenance": { + "path": "/home/weaver/source/database/spans.yaml", + "registry_id": "main" + } + }, + "note": "The following database systems (defined in the\n[`db.system.name`](/docs/database/database-spans.md#notes-and-well-known-identifiers-for-dbsystemname) set)\nare known to use SQL as their primary query language:\n\n- `actian.ingres`\n- `cockroachdb`\n- `derby`\n- `firebirdsql`\n- `h2database`\n- `hsqldb`\n- `ibm.db2`\n- `mariadb`\n- `microsoft.sql_server`\n- `mysql`\n- `oracle.db`\n- `other_sql`\n- `postgresql`\n- `sap.maxdb`\n- `sqlite`\n- `trino`\n\nMany other database systems support SQL and can be accessed via generic database driver such as JDBC or ODBC.\nInstrumentations applied to generic SQL drivers SHOULD adhere to SQL semantic conventions.\n\n**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name)\n", + "span_kind": "client", + "stability": "stable", + "type": "span" + }, + { + "attributes": [ + { + "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)\n", + "name": "exception.stacktrace", + "requirement_level": "recommended", + "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": { + "conditionally_required": "Required if `exception.message` is not set, recommended otherwise." + }, + "stability": "stable", + "type": "string" + }, + { + "brief": "The exception message.", + "examples": [ + "Division by zero", + "Can\u0027t convert \u0027int\u0027 object to str implicitly" + ], + "name": "exception.message", + "requirement_level": { + "conditionally_required": "Required if `exception.type` is not set, recommended otherwise." + }, + "stability": "stable", + "type": "string" + } + ], + "brief": "This document defines attributes for exceptions represented using Log Records.\n", + "id": "log-exception", + "lineage": { + "attributes": { + "exception.message": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.exception" + }, + "exception.stacktrace": { + "inherited_fields": [ + "brief", + "examples", + "note", + "requirement_level", + "stability" + ], + "source_group": "registry.exception" + }, + "exception.type": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.exception" + } + }, + "provenance": { + "path": "/home/weaver/source/exceptions/logs.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "HTTP request headers, `\u003ckey\u003e` being the normalized HTTP Header name (lowercase), the value being the header values.\n", + "examples": [ + [ + "application/json" + ], + [ + "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.\nIncluding all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nThe `User-Agent` header is already captured in the `user_agent.original` attribute.\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` SHOULD be recorded as the `http.request.header.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` SHOULD be recorded as the `http.request.header.x-forwarded-for`\n attribute with value `[\"1.2.3.4\", \"1.2.3.5\"]` or `[\"1.2.3.4, 1.2.3.5\"]` depending on the HTTP library.\n", + "requirement_level": "recommended", + "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),\nthe PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html)\nand the QUERY method defined in [httpbis-safe-method-w-body](https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/?include_text=1).\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", + "stability": "stable", + "type": { + "members": [ + { + "brief": "CONNECT method.", + "id": "connect", + "stability": "stable", + "value": "CONNECT" + }, + { + "brief": "DELETE method.", + "id": "delete", + "stability": "stable", + "value": "DELETE" + }, + { + "brief": "GET method.", + "id": "get", + "stability": "stable", + "value": "GET" + }, + { + "brief": "HEAD method.", + "id": "head", + "stability": "stable", + "value": "HEAD" + }, + { + "brief": "OPTIONS method.", + "id": "options", + "stability": "stable", + "value": "OPTIONS" + }, + { + "brief": "PATCH method.", + "id": "patch", + "stability": "stable", + "value": "PATCH" + }, + { + "brief": "POST method.", + "id": "post", + "stability": "stable", + "value": "POST" + }, + { + "brief": "PUT method.", + "id": "put", + "stability": "stable", + "value": "PUT" + }, + { + "brief": "TRACE method.", + "id": "trace", + "stability": "stable", + "value": "TRACE" + }, + { + "brief": "Any HTTP method that the instrumentation has no prior knowledge of.", + "id": "other", + "stability": "stable", + "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", + "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", + "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": [ + [ + "application/json" + ], + [ + "abc", + "def" + ] + ], + "name": "http.response.header", + "note": "Instrumentations SHOULD require an explicit configuration of which headers are to be captured.\nIncluding all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information.\n\nUsers MAY explicitly configure instrumentations to capture them even though it is not recommended.\n\nThe attribute value MUST consist of either multiple header values as an array of strings\nor a single-item array containing a possibly comma-concatenated string, depending on the way\nthe HTTP library provides access to headers.\n\nExamples:\n\n- A header `Content-Type: application/json` header SHOULD be recorded as the `http.request.response.content-type`\n attribute with value `[\"application/json\"]`.\n- A header `My-custom-header: abc, def` header SHOULD be recorded as the `http.response.header.my-custom-header`\n attribute with value `[\"abc\", \"def\"]` or `[\"abc, def\"]` depending on the HTTP library.\n", + "requirement_level": "recommended", + "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", + "stability": "stable", + "type": "int" + }, + { + "brief": "The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with placeholders.\n", + "examples": [ + "/users/:userID?", + "my-controller/my-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.\n\nA static path segment is a part of the route template with a fixed, low-cardinality value. This includes literal strings like `/users/` and placeholders that\nare constrained to a finite, predefined set of values, e.g. `{controller}` or `{action}`.\n\nA dynamic path segment is a placeholder for a value that can have high cardinality and is not constrained to a predefined list like static path segments.\n\nInstrumentations SHOULD use routing information provided by the corresponding web framework. They SHOULD pick the most precise source of routing information and MAY\nsupport custom route formatting. Instrumentations SHOULD document the format and the API used to obtain the route string.\n", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "This document defines semantic convention attributes in the HTTP namespace.", + "display_name": "HTTP Attributes", + "id": "registry.http", + "lineage": { + "provenance": { + "path": "/home/weaver/source/http/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "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", + "YourApp/1.0.0 grpc-java-okhttp/1.27.2" + ], + "name": "user_agent.original", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Describes user-agent attributes.", + "display_name": "User-agent Attributes", + "id": "registry.user_agent", + "lineage": { + "provenance": { + "path": "/home/weaver/source/user-agent/registry.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + }, + { + "attributes": [ + { + "brief": "Name of the code, either \"OK\" or \"ERROR\". MUST NOT be set if the status code is UNSET.", + "name": "otel.status_code", + "requirement_level": "recommended", + "stability": "stable", + "type": { + "members": [ + { + "brief": "The operation has been validated by an Application developer or Operator to have completed successfully.", + "id": "ok", + "stability": "stable", + "value": "OK" + }, + { + "brief": "The operation contains an error.", + "id": "error", + "stability": "stable", + "value": "ERROR" + } + ] + } + }, + { + "brief": "Description of the Status if it has a value, otherwise not set.", + "examples": [ + "resource not found" + ], + "name": "otel.status_description", + "requirement_level": "recommended", + "stability": "stable", + "type": "string" + } + ], + "brief": "Span attributes used by non-OTLP exporters or on metrics to represent OpenTelemetry Span\u0027s concepts.", + "id": "otel_span", + "lineage": { + "attributes": { + "otel.status_code": { + "inherited_fields": [ + "brief", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.otel" + }, + "otel.status_description": { + "inherited_fields": [ + "brief", + "examples", + "note", + "stability" + ], + "locally_overridden_fields": [ + "requirement_level" + ], + "source_group": "registry.otel" + } + }, + "provenance": { + "path": "/home/weaver/source/otel/common.yaml", + "registry_id": "main" + } + }, + "type": "attribute_group" + } + ] +} +