diff --git a/.chloggen/3919.yaml b/.chloggen/3919.yaml new file mode 100644 index 0000000000..3e729c7ec2 --- /dev/null +++ b/.chloggen/3919.yaml @@ -0,0 +1,7 @@ +change_type: enhancement +component: rpc +note: > + Clarify how to populate `server.address` and `server.port` on RPC server spans. + Change requirement level of `server.address` to `opt_in` on `rpc.server.call.duration` + metric and to `recommended` on server spans. +issues: [3784] diff --git a/.chloggen/3921.yaml b/.chloggen/3921.yaml new file mode 100644 index 0000000000..ff20ca52c0 --- /dev/null +++ b/.chloggen/3921.yaml @@ -0,0 +1,4 @@ +change_type: breaking +component: rpc +note: Rename `rpc.response.status_code` to `rpc.status_code`. +issues: [3870] diff --git a/.chloggen/add-messaging-cluster-id.yaml b/.chloggen/add-messaging-cluster-id.yaml deleted file mode 100644 index 054c250693..0000000000 --- a/.chloggen/add-messaging-cluster-id.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Use this changelog template to create an entry for release notes. -# -# If your change doesn't affect end users you should instead start -# your pull request title with [chore] or use the "Skip Changelog" label. - -# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' -change_type: enhancement - -# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) -component: messaging - -# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: Add `messaging.kafka.cluster.id` attribute identifying the Kafka cluster a client is connected to, and reference it from Kafka spans. - -# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. -# The values here must be integers. -issues: [32] - -# (Optional) One or more lines of additional information to render under the primary note. -# These lines will be padded with 2 spaces and then inserted directly into the document. -# Use pipe (|) for multiline entries. -subtext: diff --git a/.chloggen/add-system-process-limit.yaml b/.chloggen/add-system-process-limit.yaml deleted file mode 100644 index 5f235c58d7..0000000000 --- a/.chloggen/add-system-process-limit.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Use this changelog template to create an entry for release notes. -# -# If your change doesn't affect end users you should instead start -# your pull request title with [chore] or use the "Skip Changelog" label. - -# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' -change_type: enhancement - -# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) -component: system - -# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: "Add `system.process.limit` metric representing the maximum number of concurrent tasks/threads allowed by the operating system." - -# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. -# The values here must be integers. -issues: [3859] - -# (Optional) One or more lines of additional information to render under the primary note. -# These lines will be padded with 2 spaces and then inserted directly into the document. -# Use pipe (|) for multiline entries. -subtext: diff --git a/.chloggen/clarify-db-parameter-sanitization.yaml b/.chloggen/clarify-db-parameter-sanitization.yaml deleted file mode 100644 index 6c46e2b53b..0000000000 --- a/.chloggen/clarify-db-parameter-sanitization.yaml +++ /dev/null @@ -1,10 +0,0 @@ -change_type: enhancement - -component: db - -note: > - Clarify `db.query.parameter.` semantics around sensitive data handling. - -issues: [3831] - -subtext: diff --git a/.chloggen/clarify-log-created-intake.yaml b/.chloggen/clarify-log-created-intake.yaml new file mode 100644 index 0000000000..bf4e9b27de --- /dev/null +++ b/.chloggen/clarify-log-created-intake.yaml @@ -0,0 +1,10 @@ +change_type: enhancement + +component: otel + +note: > + Clarify that `otel.sdk.log.created` counts log records at intake on an enabled `Logger`, before per-record filtering. + +issues: [3506] + +subtext: diff --git a/.chloggen/error-type-conditionally-required.yaml b/.chloggen/error-type-conditionally-required.yaml new file mode 100644 index 0000000000..50d3b3bb61 --- /dev/null +++ b/.chloggen/error-type-conditionally-required.yaml @@ -0,0 +1,13 @@ +change_type: enhancement + +component: otel + +note: > + Mark `error.type` as conditionally required on + `otel.sdk.processor.{span,log}.processed` and + `otel.sdk.exporter.{span,log,metric_data_point}.exported`, matching + `otel.sdk.exporter.operation.duration`. + +issues: [3954] + +subtext: diff --git a/.chloggen/faas-spans-v2.yaml b/.chloggen/fix-multiline-brief-table-cell.yaml similarity index 82% rename from .chloggen/faas-spans-v2.yaml rename to .chloggen/fix-multiline-brief-table-cell.yaml index f946c50d9e..aabdfa257d 100644 --- a/.chloggen/faas-spans-v2.yaml +++ b/.chloggen/fix-multiline-brief-table-cell.yaml @@ -4,17 +4,17 @@ # your pull request title with [chore] or use the "Skip Changelog" label. # One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' -change_type: enhancement +change_type: bug_fix # The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) -component: faas +component: docs # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: The general FaaS attributes are now defined on the FaaS spans that use them, so each span documents its full attribute set. +note: Fix broken Markdown tables when an attribute, metric, or enum-member brief spans multiple lines in YAML. # Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. # The values here must be integers. -issues: [3905] +issues: [3073] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. diff --git a/.chloggen/fix-rpc-reverse-dns-lookup.yaml b/.chloggen/fix-rpc-reverse-dns-lookup.yaml deleted file mode 100644 index 5d618405b9..0000000000 --- a/.chloggen/fix-rpc-reverse-dns-lookup.yaml +++ /dev/null @@ -1,11 +0,0 @@ -change_type: bug_fix - -component: rpc - -note: > - Fix wording in `server.address` note to say "reverse DNS lookup" instead of - "reverse proxy lookup". - -issues: [3871] - -subtext: diff --git a/.chloggen/host-detection-improvements.yaml b/.chloggen/host-detection-improvements.yaml deleted file mode 100644 index 831083af53..0000000000 --- a/.chloggen/host-detection-improvements.yaml +++ /dev/null @@ -1,11 +0,0 @@ -change_type: enhancement - -component: host - -note: > - Update the recommendations to use full path to commands - when collecting `host.id` attribute value. - -issues: [3896] - -subtext: diff --git a/.chloggen/add-k8s-node-inode-metrics.yaml b/.chloggen/http-request-response-body.yaml similarity index 76% rename from .chloggen/add-k8s-node-inode-metrics.yaml rename to .chloggen/http-request-response-body.yaml index b077d1a62c..939f60bf64 100644 --- a/.chloggen/add-k8s-node-inode-metrics.yaml +++ b/.chloggen/http-request-response-body.yaml @@ -4,19 +4,20 @@ # your pull request title with [chore] or use the "Skip Changelog" label. # One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' -change_type: enhancement +change_type: 'enhancement' # The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) -component: k8s +component: 'http' # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: "Add `k8s.node.filesystem.inode.count` and `k8s.node.filesystem.inode.free` metrics to track Kubernetes node root filesystem inode capacity and usage." +note: "Add opt-in `http.request.body.content` and `http.response.body.content` attributes to capture HTTP request and response bodies" # Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. # The values here must be integers. -issues: [3858] +issues: [ 857 ] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. # Use pipe (|) for multiline entries. -subtext: +subtext: | + These attributes may contain sensitive information. diff --git a/.chloggen/hw-metrics-refinements.yaml b/.chloggen/hw-metrics-refinements.yaml deleted file mode 100644 index 57f362d79a..0000000000 --- a/.chloggen/hw-metrics-refinements.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# Use this changelog template to create an entry for release notes. -# -# If your change doesn't affect end users you should instead start -# your pull request title with [chore] or use the "Skip Changelog" label. - -# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' -change_type: enhancement - -# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) -component: hw - -# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: > - Per-component `hw.errors` and `hw.status` metrics now document the full set of - component-specific attributes (e.g. `hw.model`, `hw.vendor`) alongside the generic ones. - -# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. -# The values here must be integers. -issues: [3808] - -# (Optional) One or more lines of additional information to render under the primary note. -# These lines will be padded with 2 spaces and then inserted directly into the document. -subtext: diff --git a/.chloggen/rc_mem_metrics.yaml b/.chloggen/k8s_uptime_rc.yaml similarity index 68% rename from .chloggen/rc_mem_metrics.yaml rename to .chloggen/k8s_uptime_rc.yaml index 7d76a639af..6245a36abd 100644 --- a/.chloggen/rc_mem_metrics.yaml +++ b/.chloggen/k8s_uptime_rc.yaml @@ -10,26 +10,19 @@ change_type: enhancement component: k8s # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: Promote a selection of container and K8s memory metrics to release_candidate +note: Promote `container.uptime`, `k8s.pod.uptime` and `k8s.node.uptime` metrics to `release_candidate` # Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. # The values here must be integers. -issues: [3882] +issues: [3945] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. # Use pipe (|) for multiline entries. subtext: | The following metrics are being promoted to release_candidate: - - container.memory.usage - - container.memory.available - - container.memory.rss - - container.memory.working_set - - k8s.pod.memory.usage - - k8s.pod.memory.available - - k8s.pod.memory.rss - - k8s.pod.memory.working_set - - k8s.node.memory.usage - - k8s.node.memory.available - - k8s.node.memory.rss - - k8s.node.memory.working_set + - container.uptime + - k8s.pod.uptime + - k8s.node.uptime + Notes referencing the Kubelet stats summary API fields (`ContainerStats.StartTime`, + `PodStats.StartTime`, `NodeStats.StartTime`) have been added to each metric. diff --git a/.chloggen/messaging-spans-per-operation.yaml b/.chloggen/messaging-spans-per-operation.yaml deleted file mode 100644 index cb5d6b994d..0000000000 --- a/.chloggen/messaging-spans-per-operation.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Use this changelog template to create an entry for release notes. -# -# If your change doesn't affect end users you should instead start -# your pull request title with [chore] or use the "Skip Changelog" label. - -# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' -change_type: enhancement - -# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) -component: messaging - -# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: Define a span per messaging operation type (create, send, receive, process, settle) and refine them for each messaging system. - -# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. -# The values here must be integers. -issues: [3904] - -# (Optional) One or more lines of additional information to render under the primary note. -# These lines will be padded with 2 spaces and then inserted directly into the document. -# Use pipe (|) for multiline entries. -subtext: diff --git a/.chloggen/oracledb-app-context.yaml b/.chloggen/oracledb-app-context.yaml new file mode 100644 index 0000000000..fd5e41ee9e --- /dev/null +++ b/.chloggen/oracledb-app-context.yaml @@ -0,0 +1,7 @@ +change_type: enhancement +component: db +note: Add application context propagation to Oracle DB via piggybacking +issues: [3863] +subtext: | + Also recommends driver-provided APIs for updating `V$SESSION.ACTION` + instead of issuing SQL or PL/SQL directly. diff --git a/.chloggen/rename-k8s-container-paging-faults.yaml b/.chloggen/rename-k8s-container-paging-faults.yaml deleted file mode 100644 index bf354ae4cb..0000000000 --- a/.chloggen/rename-k8s-container-paging-faults.yaml +++ /dev/null @@ -1,28 +0,0 @@ -# Use this changelog template to create an entry for release notes. -# -# If your change doesn't affect end users you should instead start -# your pull request title with [chore] or use the "Skip Changelog" label. - -# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' -change_type: breaking - -# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) -component: k8s - -# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: > - Rename `k8s.node.memory.paging.faults`, `k8s.pod.memory.paging.faults` and - `container.memory.paging.faults` metrics by dropping the `memory` namespace segment. - -# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. -# The values here must be integers. -issues: [3805] - -# (Optional) One or more lines of additional information to render under the primary note. -# These lines will be padded with 2 spaces and then inserted directly into the document. -# Use pipe (|) for multiline entries. -subtext: | - Renamed metrics: - - k8s.pod.memory.paging.faults -> k8s.pod.paging.faults - - k8s.node.memory.paging.faults -> k8s.node.paging.faults - - container.memory.paging.faults -> container.paging.faults diff --git a/.chloggen/fix_mem_usage_instr.yaml b/.chloggen/restore-sigv2-cloudfront-redaction.yaml similarity index 85% rename from .chloggen/fix_mem_usage_instr.yaml rename to .chloggen/restore-sigv2-cloudfront-redaction.yaml index 2bcf6727b1..c9106170c7 100644 --- a/.chloggen/fix_mem_usage_instr.yaml +++ b/.chloggen/restore-sigv2-cloudfront-redaction.yaml @@ -4,17 +4,17 @@ # your pull request title with [chore] or use the "Skip Changelog" label. # One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' -change_type: breaking +change_type: bug_fix # The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) -component: k8s +component: url # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: Change {container, k8s.pod, k8s.node}.memory.usage to updowncounter +note: Restore `AWSAccessKeyId` and `Signature` to the default list of sensitive query parameter keys. # Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. # The values here must be integers. -issues: [3889] +issues: [3989] # (Optional) One or more lines of additional information to render under the primary note. # These lines will be padded with 2 spaces and then inserted directly into the document. diff --git a/.chloggen/rpc-method-original-metrics.yaml b/.chloggen/rpc-method-original-metrics.yaml deleted file mode 100644 index 864796f206..0000000000 --- a/.chloggen/rpc-method-original-metrics.yaml +++ /dev/null @@ -1,11 +0,0 @@ -change_type: bug_fix - -component: rpc - -note: > - Remove tracing-only `rpc.method_original` guidance from the shared - `rpc.method` definition. - -issues: [3872] - -subtext: diff --git a/.chloggen/web_vital-attributes.yaml b/.chloggen/web_vital-attributes.yaml deleted file mode 100644 index e5611925cf..0000000000 --- a/.chloggen/web_vital-attributes.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Use this changelog template to create an entry for release notes. -# -# If your change doesn't affect end users you should instead start -# your pull request title with [chore] or use the "Skip Changelog" label. - -# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' -change_type: 'breaking' - -# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db) -component: browser - -# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: Reworked the `browser.web_vital` event - moved `name`/`value`/`delta`/`id` from the event body to `browser.web_vital.*` attributes, and added new attributes per current instrumentation. - -# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. -# The values here must be integers. -issues: [3401] - -# (Optional) One or more lines of additional information to render under the primary note. -# These lines will be padded with 2 spaces and then inserted directly into the document. -# Use pipe (|) for multiline entries. -subtext: diff --git a/.github/scripts/link-check.sh b/.github/scripts/link-check.sh index d685e93cd4..d8269f57d8 100755 --- a/.github/scripts/link-check.sh +++ b/.github/scripts/link-check.sh @@ -10,6 +10,7 @@ DEPENDENCIES_DOCKERFILE="$ROOT_DIR/dependencies.Dockerfile" # Parse command line arguments LOCAL_LINKS_ONLY=false +CONFIG_FILE=".github/scripts/lychee-config.toml" TARGET="" while [[ $# -gt 0 ]]; do @@ -18,6 +19,14 @@ while [[ $# -gt 0 ]]; do LOCAL_LINKS_ONLY=true shift ;; + --config) + if [[ $# -lt 2 ]]; then + echo "Missing value for --config" >&2 + exit 1 + fi + CONFIG_FILE=$2 + shift 2 + ;; *) # Treat any other arguments as file paths TARGET="$TARGET $1" @@ -44,7 +53,7 @@ fi if [[ "$LOCAL_LINKS_ONLY" == "true" ]]; then CMD="$CMD --scheme file --include-fragments" else - CMD="$CMD --config .github/scripts/lychee-config.toml" + CMD="$CMD --config $CONFIG_FILE" fi CMD="$CMD $TARGET" diff --git a/.github/scripts/lychee-spec-links-config.toml b/.github/scripts/lychee-spec-links-config.toml new file mode 100644 index 0000000000..486a336186 --- /dev/null +++ b/.github/scripts/lychee-spec-links-config.toml @@ -0,0 +1,12 @@ +include = ["^https://opentelemetry\\.io/docs/specs/otel/"] +exclude = [".*"] + +# Fail when a rendered spec page moves so links can be updated to its canonical URL. +max_redirects = 0 +include_fragments = true + +accept = ["200..=299"] +max_retries = 6 +retry_wait_time = 5 +timeout = 60 +max_concurrency = 4 diff --git a/.github/scripts/triage/package-lock.json b/.github/scripts/triage/package-lock.json index a370c11f2c..e327c60aa4 100644 --- a/.github/scripts/triage/package-lock.json +++ b/.github/scripts/triage/package-lock.json @@ -52,16 +52,16 @@ } }, "node_modules/@octokit/core": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.6.tgz", - "integrity": "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.7.tgz", + "integrity": "sha512-DcB0M3KFgr9ECI328lhBMVsyFT2DnmNucSBTqEN3exyNKUzkkpUSCHmTRcunF41Eou2TIQKW4seewri8ON9bSA==", "license": "MIT", "dependencies": { "@octokit/auth-token": "^6.0.0", - "@octokit/graphql": "^9.0.3", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", + "@octokit/graphql": "^9.0.4", + "@octokit/request": "^10.0.13", + "@octokit/request-error": "^7.1.1", + "@octokit/types": "^17.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" }, @@ -69,33 +69,78 @@ "node": ">= 20" } }, + "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { + "version": "28.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-28.0.0.tgz", + "integrity": "sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==", + "license": "MIT" + }, + "node_modules/@octokit/core/node_modules/@octokit/types": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-17.0.0.tgz", + "integrity": "sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^28.0.0" + } + }, "node_modules/@octokit/endpoint": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.3.tgz", - "integrity": "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.4.tgz", + "integrity": "sha512-f1cOWoHPmxryJFknxbtDdjODWfV8A9tc8Aae6ermXPNgHFZ/x91AtHIz4gicEjL8hkJiip+u21QHJORfBv/qiA==", "license": "MIT", "dependencies": { - "@octokit/types": "^16.0.0", + "@octokit/types": "^17.0.0", "universal-user-agent": "^7.0.2" }, "engines": { "node": ">= 20" } }, + "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { + "version": "28.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-28.0.0.tgz", + "integrity": "sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==", + "license": "MIT" + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-17.0.0.tgz", + "integrity": "sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^28.0.0" + } + }, "node_modules/@octokit/graphql": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.3.tgz", - "integrity": "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.4.tgz", + "integrity": "sha512-5s15CCiY8XXQ+FG+b1YQcl6Z2FA++nwAz/tg2VUrTmnMncP+2nnGUEYANImdnxsA2Fnq+Mbl7hDjUTw7cFAwcg==", "license": "MIT", "dependencies": { - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", + "@octokit/request": "^10.0.13", + "@octokit/types": "^17.0.0", "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 20" } }, + "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { + "version": "28.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-28.0.0.tgz", + "integrity": "sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==", + "license": "MIT" + }, + "node_modules/@octokit/graphql/node_modules/@octokit/types": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-17.0.0.tgz", + "integrity": "sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^28.0.0" + } + }, "node_modules/@octokit/openapi-types": { "version": "27.0.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-27.0.0.tgz", @@ -133,16 +178,16 @@ } }, "node_modules/@octokit/request": { - "version": "10.0.11", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.11.tgz", - "integrity": "sha512-+s7HUxjfFqOMS9VlIwDffq0MikjSAK0gSpG73W+meAvVAvX4MBrHYTK5Bj3Uot55qFT4gzUtfzE4mGWY4Br8/Q==", + "version": "10.0.14", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.14.tgz", + "integrity": "sha512-bgWgiSfFS689/AxQDarU+b3Qu1FYewfVr5vI/jhV84s7GQ3C2OsdRxukGGYKB37MCgwcS50UrfBLlHzhiG13sw==", "license": "MIT", "dependencies": { "@octokit/endpoint": "^11.0.3", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", + "@octokit/request-error": "^7.1.1", + "@octokit/types": "^17.0.0", "content-type": "^2.0.0", - "json-with-bigint": "^3.5.3", + "json-with-bigint": "^3.5.12", "universal-user-agent": "^7.0.2" }, "engines": { @@ -150,17 +195,47 @@ } }, "node_modules/@octokit/request-error": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.0.tgz", - "integrity": "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.1.tgz", + "integrity": "sha512-+eaY7G2VVpSf2pc5Gn1+mph837V/d/TYTJAgWL9Tb0ogGYcpN3IlAVFgjL+Vv93F/sevrxkvsYCedtpLdcFLzA==", "license": "MIT", "dependencies": { - "@octokit/types": "^16.0.0" + "@octokit/types": "^17.0.0" }, "engines": { "node": ">= 20" } }, + "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { + "version": "28.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-28.0.0.tgz", + "integrity": "sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==", + "license": "MIT" + }, + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-17.0.0.tgz", + "integrity": "sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^28.0.0" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "28.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-28.0.0.tgz", + "integrity": "sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==", + "license": "MIT" + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-17.0.0.tgz", + "integrity": "sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^28.0.0" + } + }, "node_modules/@octokit/types": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-16.0.0.tgz", @@ -187,9 +262,9 @@ "license": "Apache-2.0" }, "node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "license": "MIT", "engines": { "node": ">=18" @@ -200,9 +275,9 @@ } }, "node_modules/json-with-bigint": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.10.tgz", - "integrity": "sha512-Vcx+JVNEBts/xfcoCS69sKrOhOk/3TVlvlT+XzUOefVKnnrbYSCKpDCm10pohsJFtsJVYnwa/cXRZ4eElzaM6w==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.12.tgz", + "integrity": "sha512-uwbF/wSSuOgC7qqlq27Xp5B6a2MHVug3t0idZdTqu0JnlFvgJuH7ju+KAk/J06C7GfhoYy2gnb9wz2INqcne7w==", "license": "MIT" }, "node_modules/undici": { diff --git a/.github/scripts/update-spec-repo-links.sh b/.github/scripts/update-spec-repo-links.sh index 28fc5e77ea..0e297c2818 100755 --- a/.github/scripts/update-spec-repo-links.sh +++ b/.github/scripts/update-spec-repo-links.sh @@ -25,9 +25,9 @@ fix_file() { " "$1" } -important_files=("docs" "model" "README.md") - -# TODO - limit to markdown/yaml files? -find "${important_files[@]}" -type f -not -path '*/.*' -not -path '*.png' -print0 | while read -d $'\0' file; do +# Update every tracked markdown and YAML file so that new spec references cannot +# be missed. CHANGELOG.md is excluded because it intentionally links to the spec +# version that was current at the time of each release. +git ls-files -z -- '*.md' '*.yaml' '*.yml' ':(exclude)CHANGELOG.md' | while read -d $'\0' file; do fix_file "$file" done diff --git a/.github/workflows/auto-update-spec-repo-links.yml b/.github/workflows/auto-update-spec-repo-links.yml index b70e479254..a592f9f0cf 100644 --- a/.github/workflows/auto-update-spec-repo-links.yml +++ b/.github/workflows/auto-update-spec-repo-links.yml @@ -16,7 +16,7 @@ jobs: latest-version: ${{ steps.check-versions.outputs.latest-version }} already-opened: ${{ steps.check-versions.outputs.already-opened }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -51,7 +51,7 @@ jobs: needs: - check-versions steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # zizmor: ignore[artipacked] Credentials are required by the branch push below. persist-credentials: true diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index 19d54076c9..cbc349fa8c 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -32,12 +32,12 @@ jobs: }} steps: - name: Checkout Repo - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 persist-credentials: false - name: Setup Go - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 with: go-version: ~1.26.0 - name: Cache Go diff --git a/.github/workflows/check-changes-ownership.yml b/.github/workflows/check-changes-ownership.yml index 77d08b0e7a..dd46c8559d 100644 --- a/.github/workflows/check-changes-ownership.yml +++ b/.github/workflows/check-changes-ownership.yml @@ -54,13 +54,13 @@ jobs: if: ${{ needs.get-changed-files.outputs.any_changed == 'true' && github.repository_owner == 'open-telemetry' }} steps: # Checkout the base branch (main, secure context) - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.event.pull_request.base.ref }} persist-credentials: false # uses node 22 to be able to use Typescript - - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: cache: 'npm' cache-dependency-path: | diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 9582a49fb7..abc4109a06 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -26,7 +26,7 @@ jobs: run: make check-file-and-folder-names-in-docs - name: run markdownlint - uses: DavidAnson/markdownlint-cli2-action@ded1f9488f68a970bc66ea5619e13e9b52e601cd # v23.2.0 + uses: DavidAnson/markdownlint-cli2-action@6bf21b07787794f89a243495939cd651942aeabe # v24.1.0 with: globs: '**/*.md' @@ -34,11 +34,11 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0 + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 - name: check YAML file extensions run: make check-yaml-extension @@ -56,7 +56,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -70,11 +70,11 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: streetsidesoftware/cspell-action@9cd41bb518a24fefdafd9880cbab8f0ceba04d28 # v8.3.0 + - uses: streetsidesoftware/cspell-action@de2a73e963e7443969755b648a1008f77033c5b2 # v8.4.0 with: incremental_files_only: false # check all files, not just changed files config: .cspell.yaml @@ -85,7 +85,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false @@ -99,7 +99,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: verify semantic convention tables @@ -109,7 +109,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: verify registry tables @@ -121,7 +121,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: verify schemas @@ -130,7 +130,7 @@ jobs: areas-dropdown-check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Components dropdown in issue templates @@ -142,7 +142,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: verify semantic conventions yaml definitions @@ -152,7 +152,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: verify semantic conventions yaml definitions @@ -162,7 +162,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: find signals defined in yaml files that are not used in the markdown files @@ -172,7 +172,7 @@ jobs: runs-on: ubuntu-latest steps: - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: check if the areas table is out-of-date diff --git a/.github/workflows/downstream-codegen-check.yml b/.github/workflows/downstream-codegen-check.yml new file mode 100644 index 0000000000..b5d6633589 --- /dev/null +++ b/.github/workflows/downstream-codegen-check.yml @@ -0,0 +1,156 @@ +# Generates semantic convention code in downstream language repositories from the +# model in this repository (instead of their pinned version of semconv), then compiles and +# lints the result. This catches changes that break code generation before they +# are released. +# +# Java and Go share a single job so that pull requests only get one check. +name: Downstream codegen check + +on: + schedule: + # Daily at 03:00 UTC + - cron: "0 3 * * *" + workflow_dispatch: + # Only release preparation PRs are checked, other pull requests skip the job. + pull_request: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + downstream-codegen: + name: downstream-codegen + if: >- + github.repository_owner == 'open-telemetry' && + (github.event_name != 'pull_request' || startsWith(github.head_ref, 'otelbot/prepare-release-')) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + path: semantic-conventions + persist-credentials: false + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: open-telemetry/semantic-conventions-java + path: semantic-conventions-java + persist-credentials: false + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: open-telemetry/opentelemetry-go + path: opentelemetry-go + persist-credentials: false + + - name: Set up Java + uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0 + with: + distribution: temurin + java-version: 21 + + - uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 + + - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0 + with: + go-version-file: opentelemetry-go/go.mod + cache-dependency-path: opentelemetry-go/**/go.sum + + # The Java build normally generates from the latest released semconv zip; point it + # at the model in this repository instead. + - name: Java - use local model + working-directory: semantic-conventions-java + run: | + if ! grep -q 'val modelPath = layout.buildDirectory' build.gradle.kts; then + echo "::error::semantic-conventions-java build.gradle.kts no longer defines modelPath as expected, update this workflow" + exit 1 + fi + sed -i "s|^\( *val modelPath = \).*$|\1File(\"$GITHUB_WORKSPACE/semantic-conventions/model\")|" build.gradle.kts + grep -n 'val modelPath' build.gradle.kts + + - name: Java - generate + working-directory: semantic-conventions-java + run: ./gradlew generateSemanticConventions --console=plain + + # Generated code is formatted by spotless, as in the downstream release workflow. + - name: Java - format + working-directory: semantic-conventions-java + run: ./gradlew spotlessApply + + - name: Java - build + working-directory: semantic-conventions-java + run: ./gradlew build + + # Go steps run even when Java failed, so that one run reports both languages. + - name: Go - resolve version + id: version + if: ${{ !cancelled() }} + run: | + # The version the next release will use, e.g. "1.45.0-unreleased" -> "v1.45.0". + version=$(sed -n 's|^schema_url: https://opentelemetry.io/schemas/\(.*\)$|\1|p' semantic-conventions/model/manifest.yaml) + version=${version%-unreleased} + if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "::error::could not resolve version from model/manifest.yaml, got '$version'" + exit 1 + fi + echo "tag=v$version" >> "$GITHUB_OUTPUT" + + # Mirrors the "semconv-generate" target of the opentelemetry-go Makefile, except + # that the registry is the model in this repository rather than a released zip. + - name: Go - generate + working-directory: opentelemetry-go + if: ${{ !cancelled() && steps.version.outcome == 'success' }} + env: + TAG: ${{ steps.version.outputs.tag }} + run: | + weaver_image=$(awk '$4=="weaver" {print $2}' dependencies.Dockerfile) + mkdir -p "semconv/$TAG" ~/.weaver + docker run --rm \ + -u "$(id -u):$(id -g)" \ + --env HOME=/tmp/weaver \ + --mount "type=bind,source=$PWD/semconv/templates,target=/home/weaver/templates,readonly" \ + --mount "type=bind,source=$PWD/semconv/$TAG,target=/home/weaver/target" \ + --mount "type=bind,source=$GITHUB_WORKSPACE/semantic-conventions/model,target=/home/weaver/source,readonly" \ + --mount "type=bind,source=$HOME/.weaver,target=/tmp/weaver/.weaver" \ + "$weaver_image" registry generate \ + --registry=/home/weaver/source \ + --templates=/home/weaver/templates \ + --param tag="$TAG" \ + go \ + /home/weaver/target + (cd internal/tools && go build -o ../../.tools/semconvkit ./semconvkit) + ./.tools/semconvkit -semconv semconv/ -tag "$TAG" + + - name: Go - build + working-directory: opentelemetry-go + if: ${{ !cancelled() && steps.version.outcome == 'success' }} + env: + TAG: ${{ steps.version.outputs.tag }} + run: | + go build "./semconv/$TAG/..." + go vet "./semconv/$TAG/..." + + - name: Go - lint + working-directory: opentelemetry-go + if: ${{ !cancelled() && steps.version.outcome == 'success' }} + env: + TAG: ${{ steps.version.outputs.tag }} + run: | + make "$PWD/.tools/golangci-lint" + ./.tools/golangci-lint run --allow-serial-runners "./semconv/$TAG/..." + + # Scheduled runs open (or comment on) a tracking issue; on release preparation PRs + # the failing job is signal enough. + workflow-notification: + permissions: # required by the reusable workflow + contents: read + issues: write + needs: + - downstream-codegen + if: always() && github.event_name != 'pull_request' && github.repository_owner == 'open-telemetry' + uses: ./.github/workflows/reusable-workflow-notification.yml + with: + success: ${{ needs.downstream-codegen.result == 'success' }} diff --git a/.github/workflows/fossa.yml b/.github/workflows/fossa.yml index e6b4182226..0576c2019c 100644 --- a/.github/workflows/fossa.yml +++ b/.github/workflows/fossa.yml @@ -12,7 +12,7 @@ jobs: fossa: runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/generate-registry-area-labels.yml b/.github/workflows/generate-registry-area-labels.yml index c84ed02289..9a0e2a31bb 100644 --- a/.github/workflows/generate-registry-area-labels.yml +++ b/.github/workflows/generate-registry-area-labels.yml @@ -20,7 +20,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.repository_owner == 'open-telemetry' }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/ossf-scorecard.yml b/.github/workflows/ossf-scorecard.yml index 1564cbd59b..53697e299f 100644 --- a/.github/workflows/ossf-scorecard.yml +++ b/.github/workflows/ossf-scorecard.yml @@ -8,40 +8,12 @@ on: - cron: "43 6 * * 5" # weekly at 06:43 (UTC) on Friday workflow_dispatch: -permissions: read-all +permissions: {} jobs: analysis: - runs-on: ubuntu-latest permissions: - # Needed for Code scanning upload - security-events: write - # Needed for GitHub OIDC token if publish_results is true - id-token: write - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - persist-credentials: false - - - uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3 - with: - results_file: results.sarif - results_format: sarif - publish_results: true - - # Upload the results as artifacts (optional). Commenting out will disable - # uploads of run results in SARIF format to the repository Actions tab. - # https://docs.github.com/en/actions/advanced-guides/storing-workflow-data-as-artifacts - - name: "Upload artifact" - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - with: - name: SARIF file - path: results.sarif - retention-days: 5 - - # Upload the results to GitHub's code scanning dashboard (optional). - # Commenting out will disable upload of results to your repo's Code Scanning dashboard - - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3 - with: - sarif_file: results.sarif + contents: read # for actions/checkout + id-token: write # for Scorecard to publish results + security-events: write # for the SARIF upload to code scanning + uses: open-telemetry/shared-workflows/.github/workflows/scorecard.yml@f13d0cb656d7244ca8c1638b6996dbaef1083bdd # v0.6.0 diff --git a/.github/workflows/podman-check.yml b/.github/workflows/podman-check.yml index 51c9c994f7..1b483966d7 100644 --- a/.github/workflows/podman-check.yml +++ b/.github/workflows/podman-check.yml @@ -29,7 +29,7 @@ jobs: run: sudo apt-get install -y podman podman-docker - name: check out code - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/post-release.yml b/.github/workflows/post-release.yml index ab113e4841..9a61fd0f94 100644 --- a/.github/workflows/post-release.yml +++ b/.github/workflows/post-release.yml @@ -14,7 +14,7 @@ jobs: permissions: contents: write # required for pushing changes steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: main # zizmor: ignore[artipacked] Credentials are required by the branch push below. diff --git a/.github/workflows/prepare-new-issue.yml b/.github/workflows/prepare-new-issue.yml index 0e70e5c64c..04af7bfdd5 100644 --- a/.github/workflows/prepare-new-issue.yml +++ b/.github/workflows/prepare-new-issue.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.repository_owner == 'open-telemetry' }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/prepare-new-pr.yml b/.github/workflows/prepare-new-pr.yml index 05534d78eb..a301f6691e 100644 --- a/.github/workflows/prepare-new-pr.yml +++ b/.github/workflows/prepare-new-pr.yml @@ -21,7 +21,7 @@ jobs: # We do NOT check out the fork PR code: this workflow runs in the # "pull_request_target" context, so the changelog file is read via the # GitHub API inside the script instead. - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 60843d454a..54ff6f656a 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -15,7 +15,7 @@ jobs: contents: write # required for pushing changes runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: # zizmor: ignore[artipacked] Credentials are required by the branch push below. persist-credentials: true diff --git a/.github/workflows/reusable-link-check.yml b/.github/workflows/reusable-link-check.yml index dac0a3b4f0..7f355c3090 100644 --- a/.github/workflows/reusable-link-check.yml +++ b/.github/workflows/reusable-link-check.yml @@ -10,7 +10,7 @@ jobs: link-check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 # needed for merge-base below persist-credentials: false diff --git a/.github/workflows/reusable-workflow-notification.yml b/.github/workflows/reusable-workflow-notification.yml index 1d43a88654..b8230a8166 100644 --- a/.github/workflows/reusable-workflow-notification.yml +++ b/.github/workflows/reusable-workflow-notification.yml @@ -19,7 +19,7 @@ jobs: issues: write runs-on: ubuntu-latest steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/.github/workflows/stale-pr.yml b/.github/workflows/stale-pr.yml index 6badc0cf45..f02c492396 100644 --- a/.github/workflows/stale-pr.yml +++ b/.github/workflows/stale-pr.yml @@ -14,7 +14,7 @@ jobs: pull-requests: write # required for closing stale PRs runs-on: ubuntu-latest steps: - - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0 + - uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11.0.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-pr-message: > diff --git a/.github/workflows/validate-prerelease.yml b/.github/workflows/validate-prerelease.yml index 44acbb12ba..96091c7b74 100644 --- a/.github/workflows/validate-prerelease.yml +++ b/.github/workflows/validate-prerelease.yml @@ -14,7 +14,7 @@ jobs: issues: write # required to open an issue on failure steps: - name: Check out release tag - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ github.event.release.tag_name }} persist-credentials: false diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ec06388be..b8ca303020 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,75 @@ +## v1.44.0 + +### 🛑 Breaking changes 🛑 + +- `browser`: Reworked the `browser.web_vital` event - moved `name`/`value`/`delta`/`id` from the event body to `browser.web_vital.*` attributes, and added new attributes per current instrumentation. ([#3401](https://github.com/open-telemetry/semantic-conventions/issues/3401)) +- `k8s`: Rename `k8s.node.memory.paging.faults`, `k8s.pod.memory.paging.faults` and `container.memory.paging.faults` metrics by dropping the `memory` namespace segment. + ([#3805](https://github.com/open-telemetry/semantic-conventions/issues/3805)) + Renamed metrics: + - k8s.pod.memory.paging.faults -> k8s.pod.paging.faults + - k8s.node.memory.paging.faults -> k8s.node.paging.faults + - container.memory.paging.faults -> container.paging.faults +- `k8s`: Change {container, k8s.pod, k8s.node}.memory.usage to updowncounter ([#3889](https://github.com/open-telemetry/semantic-conventions/issues/3889)) + +### 💡 Enhancements 💡 + +- `cloud`: Add Scaleway Cloud to cloud.provider and scaleway_cloud_compute to cloud.platform ([#2773](https://github.com/open-telemetry/semantic-conventions/issues/2773)) +- `db`: Clarify `db.query.parameter.` semantics around sensitive data handling. + ([#3831](https://github.com/open-telemetry/semantic-conventions/issues/3831)) +- `faas`: The general FaaS attributes are now defined on the FaaS spans that use them, so each span documents its full attribute set. ([#3905](https://github.com/open-telemetry/semantic-conventions/issues/3905)) +- `host`: Update the recommendations to use full path to commands when collecting `host.id` attribute value. + ([#3896](https://github.com/open-telemetry/semantic-conventions/issues/3896)) +- `hw`: Per-component `hw.errors` and `hw.status` metrics now document the full set of component-specific attributes (e.g. `hw.model`, `hw.vendor`) alongside the generic ones. + ([#3808](https://github.com/open-telemetry/semantic-conventions/issues/3808)) +- `k8s`: Add `k8s.node.filesystem.inode.count` and `k8s.node.filesystem.inode.free` metrics to track Kubernetes node root filesystem inode capacity and usage. ([#3858](https://github.com/open-telemetry/semantic-conventions/issues/3858)) +- `k8s`: Promote a selection of container and K8s memory metrics to release_candidate ([#3882](https://github.com/open-telemetry/semantic-conventions/issues/3882)) + The following metrics are being promoted to release_candidate: + - container.memory.usage + - container.memory.available + - container.memory.rss + - container.memory.working_set + - k8s.pod.memory.usage + - k8s.pod.memory.available + - k8s.pod.memory.rss + - k8s.pod.memory.working_set + - k8s.node.memory.usage + - k8s.node.memory.available + - k8s.node.memory.rss + - k8s.node.memory.working_set + +- `k8s`: Clarify how `cpu.usage` is calculated for K8s and container entities. ([#2418](https://github.com/open-telemetry/semantic-conventions/issues/2418)) + CPU usage is measured in cores/CPUs and is calculated based on the formula: + `usageCores = (cpuTimeEnd - cpuTimeStart) / elapsedSeconds` + This PR improves the description making it aligned with the corresponding + system and process metrics. + +- `messaging`: Add `messaging.kafka.cluster.id` attribute identifying the Kafka cluster a client is connected to, and reference it from Kafka spans. ([#32](https://github.com/open-telemetry/semantic-conventions/issues/32)) +- `messaging`: Define a span per messaging operation type (create, send, receive, process, settle) and refine them for each messaging system. ([#3904](https://github.com/open-telemetry/semantic-conventions/issues/3904)) +- `network`: Promote `network.interface.name` attribute to `release_candidate` ([#3953](https://github.com/open-telemetry/semantic-conventions/issues/3953)) +- `otel`: Clarify that `otel.sdk.processor.span.processed` and `otel.sdk.processor.log.processed` are recorded when the processor passes items to the exporter, not when an item is accepted into a queue or when the export operation completes, and that the export outcome does not affect these metrics. + ([#3902](https://github.com/open-telemetry/semantic-conventions/issues/3902)) +- `process`: Add process.disk.operations, process.memory.utilization, and process.signals_pending metrics ([#3937](https://github.com/open-telemetry/semantic-conventions/issues/3937)) + Process namespace has been made release candidate. During migration of process metrics to release + candidate in hostmetrics receiver, it was discovered that the following process metrics were not + present in process semantic conventions: process.disk.operations, process.memory.utilization, + and process.signals_pending. + +- `server, client, source, destination`: The descriptions of the `server`, `client`, `source`, and `destination` attribute groups are now documented in [General attributes](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/general/attributes.md) instead of the attribute registry pages. + ([#3935](https://github.com/open-telemetry/semantic-conventions/issues/3935)) +- `system`: Add `system.process.limit` metric representing the maximum number of concurrent tasks/threads allowed by the operating system. ([#3859](https://github.com/open-telemetry/semantic-conventions/issues/3859)) + +### 🧰 Bug fixes 🧰 + +- `otel`: Clarify that `already_shutdown` on `otel.sdk.processor.span.processed` and `otel.sdk.processor.log.processed` is a value-only requirement for the `error.type` attribute: whether and when a processor drops records because it has already been shut down is governed by the SDK specification, not by this metric. + ([#3957](https://github.com/open-telemetry/semantic-conventions/issues/3957)) +- `rpc`: Fix wording in `server.address` note to say "reverse DNS lookup" instead of "reverse proxy lookup". + ([#3871](https://github.com/open-telemetry/semantic-conventions/issues/3871)) +- `rpc`: Remove tracing-only `rpc.method_original` guidance from the shared `rpc.method` definition. + ([#3872](https://github.com/open-telemetry/semantic-conventions/issues/3872)) + ## v1.43.0 ### 🚩 Deprecations 🚩 @@ -27,7 +96,7 @@ The `network.io.direction` brief was updated based on review feedback to clarify that it describes traffic at the observing interface boundary and is not intended to represent logical connection or network flow direction. - + - `otel`: Clarify that the `otel.span.sampling_result` attribute of `otel.sdk.span.live` can only take values `RECORD_ONLY` and `RECORD_AND_SAMPLE`, not `DROP`, since the metric does not count non-recording spans. ([#3782](https://github.com/open-telemetry/semantic-conventions/issues/3782)) - `process`: Promote process metrics and entity to release_candidate ([#3041](https://github.com/open-telemetry/semantic-conventions/issues/3041)) @@ -41,7 +110,7 @@ - `db`: Align Oracle Database `db.query.text` guidance with other SQL database conventions. ([#3790](https://github.com/open-telemetry/semantic-conventions/issues/3790)) Parameterized query text is now recommended to be collected by default, while query parameter values remain opt-in. - + ## v1.42.0 ### 🛑 Breaking changes 🛑 @@ -51,10 +120,10 @@ `model/gen-ai/`, `model/openai/`, and `model/mcp/` (and documented under `docs/gen-ai/`) are deprecated in this repository and have moved to the [OpenTelemetry GenAI semantic conventions repository](https://github.com/open-telemetry/semantic-conventions-genai). - + Instrumentations following the new repository's conventions should refer to it for the corresponding `schema_url` to use. - + - `http`: Change `network.peer.address` attribute requirement level from Recommended to Opt-In on the `http.client.open_connections` and `http.client.connection.duration` metrics. ([#3279](https://github.com/open-telemetry/semantic-conventions/issues/3279)) `network.peer.address` is typically high-cardinality (one time series per remote IP) and causes unbounded growth of metric streams over the lifetime of the process when @@ -62,7 +131,7 @@ since it is an UpDownCounter, and possible for `http.client.connection.duration` when the histogram is configured for cumulative). Operators that need this attribute can still opt-in. - + - `v8js`: Rename `v8js.memory.heap.limit` to `v8js.memory.heap.space.size` (per-space pre-allocated size from `v8.getHeapSpaceStatistics()`), and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute heap size limit from `v8.getHeapStatistics().heap_size_limit` (controlled by `--max-old-space-size` or V8 defaults). @@ -75,7 +144,7 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h the browser runtime attributes (brands, platform, language) are immutable for the SDK lifetime, while the document URL changes on every navigation. The new attribute follows RFC3986 and has `Recommended` requirement level at `Development` stability. - + ### 💡 Enhancements 💡 - `app`: Defines a basic crash of an end-user facing app that requires a minimal amount of information. ([#3448](https://github.com/open-telemetry/semantic-conventions/issues/3448)) @@ -87,7 +156,7 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h - `k8s`: Promote `k8s.pod.cpu.time`, `k8s.node.cpu.time` and `container.cpu.time` metrics to `release_candidate` ([#3001](https://github.com/open-telemetry/semantic-conventions/issues/3001)) - `k8s`: Add metric `k8s.container.ephemeral_storage.usage` to track ephemeral storage usage by containers. ([#3681](https://github.com/open-telemetry/semantic-conventions/issues/3681)) This metric includes an attribute `k8s.container.ephemeral_storage.fs_type` to distinguish between `rootfs` and `logs` usage. - + - `k8s`: Promote a selection of k8s and container registry attributes to `stable` ([#3382](https://github.com/open-telemetry/semantic-conventions/issues/3382)) - `otel`: Clarify semantics of SDK exporter metrics when the exporter performs retries: an export operation is considered finished only after the final attempt has concluded, items are counted exactly once per operation, and `otel.sdk.exporter.operation.duration` records one observation per operation covering all attempts and backoff. Also drop a spurious `error.type` note from the `*.inflight` metrics, which do not carry an `error.type` attribute. ([#3770](https://github.com/open-telemetry/semantic-conventions/issues/3770)) @@ -98,7 +167,7 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h - `service`: Mark `service.criticality` attribute as alpha. ([#2986](https://github.com/open-telemetry/semantic-conventions/issues/2986)) The `service.criticality` attribute and its allowed values (`critical`, `high`, `medium`, `low`) are now in alpha status. - + - `system, file`: Add support for filesystem lock counts ([#3611](https://github.com/open-telemetry/semantic-conventions/issues/3611)) - `v8js`: Update `v8js.gc.duration` metric to match bucket boundaries used by Node.js instrumentation. ([#3761](https://github.com/open-telemetry/semantic-conventions/issues/3761)) @@ -119,7 +188,7 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h potentially unbounded in length, and high-cardinality. Moving from Recommended to Opt-In ensures operators make an informed decision before enabling this attribute. Also updated the note to use SHOULD for stronger normative language regarding sanitization. - + - `process`: Move process.executable to its own entity. ([#3535](https://github.com/open-telemetry/semantic-conventions/issues/3535)) - Move process.executable to its own entity - Identifying attribute: @@ -130,11 +199,11 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h - process.executable.build_id.gnu - process.executable.path - process.executable.name - + - `process`: Update requirement levels for process attributes to ensure consistent identification and description across platforms. ([#864](https://github.com/open-telemetry/semantic-conventions/issues/864)) - Changed `process.pid` and `process.creation.time` to be `Required` (Identity). - Changed process descriptive attributes to be `Optional`. - + - `rpc`: Remove `client.address` and `client.port` attributes from RPC server spans. ([#3487](https://github.com/open-telemetry/semantic-conventions/issues/3487), [#3488](https://github.com/open-telemetry/semantic-conventions/issues/3488)) ### 💡 Enhancements 💡 @@ -149,10 +218,10 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h - `db`: Clarify database client span duration. ([#3479](https://github.com/open-telemetry/semantic-conventions/issues/3479)) - `deployment`: Stabilize `deployment.environment.name` attribute. ([#3339](https://github.com/open-telemetry/semantic-conventions/issues/3339)) The `deployment.environment.name` attribute is promoted from development to stable. - + - `deployment`: Add enum values for `deployment.environment.name` attribute. ([#2910](https://github.com/open-telemetry/semantic-conventions/issues/2910)) The `deployment.environment.name` attribute now has well-known enum values: Production, Staging, Test, and Development. - + - `exception`: Improve exception event definition: add guidance on how to set event name and severity. ([#3311](https://github.com/open-telemetry/semantic-conventions/issues/3311)) - `exceptions`: Add guidance that `error.type` and `exception.type` may unwrap uninformative wrapper types. ([#3588](https://github.com/open-telemetry/semantic-conventions/issues/3588), [#3623](https://github.com/open-telemetry/semantic-conventions/issues/3623)) @@ -160,26 +229,26 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h This domain-specific exception event provides a structured way to record exceptions that occur during FaaS function invocations: - `faas.invocation.exception` for exceptions during function execution - + - `gen-ai`: Enhance the definition of `gen_ai.tool.definitions` attribute. ([#2721](https://github.com/open-telemetry/semantic-conventions/issues/2721), [#1835](https://github.com/open-telemetry/semantic-conventions/issues/1835)) The schema of `gen_ai.tool.definitions` attribute is now enhanced to: - Add JSON schema of `gen_ai.tool.definitions` attribute. - Document the behavior of capturing tool definitions. - Capture the tool definitions in a simplified format if the content capturing is disabled. - + - `gen-ai`: Add `gen_ai.usage.reasoning.output_tokens` attribute for reasoning tokens ([#3194](https://github.com/open-telemetry/semantic-conventions/issues/3194)) - Add `gen_ai.usage.reasoning.output_tokens` for tokens used for reasoning - + - `gen-ai`: Define `gen_ai.client.operation.exception` event for recording exceptions during Generative AI client operations ([#3436](https://github.com/open-telemetry/semantic-conventions/issues/3436)) This domain-specific exception event provides a structured way to record exceptions that occur during Generative AI client operations (API errors, rate limiting, timeouts). - + - `gen-ai`: Add invoke workflow operation name support to the gen-ai semantic conventions. ([#2912](https://github.com/open-telemetry/semantic-conventions/issues/2912)) - `gen-ai`: Add `gen_ai.client.operation.time_to_first_chunk` and `gen_ai.client.operation.time_per_output_chunk` metrics. ([#3113](https://github.com/open-telemetry/semantic-conventions/issues/3113)) - Add `gen_ai.client.operation.time_to_first_chunk` metric to track time from client request to first chunk of response. - Add `gen_ai.client.operation.time_per_output_chunk` metric to track time per output chunk of response. - + - `gen-ai`: Split `invoke_agent` into separate client and internal spans, and split attributes from inference hierarchy. ([#2632](https://github.com/open-telemetry/semantic-conventions/issues/2632)) The `invoke_agent` client span now extends a dedicated `attributes.gen_ai.invoke_agent.client` attribute group instead of `attributes.gen_ai.inference.client`. This removes @@ -187,12 +256,12 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h and adds `gen_ai.agent.version`. A new `invoke_agent` internal span is added for in-process agents (e.g., LangChain, CrewAI), which does not include `server.address`, `server.port`, or token usage attributes. - + - `gen-ai`: Added `gen_ai.response.model` attribute to embeddings spans. ([#3499](https://github.com/open-telemetry/semantic-conventions/issues/3499)) - `gen_ai`: Add streaming attributes for GenAI inference spans ([#3598](https://github.com/open-telemetry/semantic-conventions/issues/3598)) Adds `gen_ai.request.stream` (boolean) and `gen_ai.response.time_to_first_chunk` (double) attributes for streaming inference operations. - + - `go`: Add the go.cpu.time opt-in metric, and add go.cpu.detailed_state and go.memory.detailed_type attributes to CPU and memory metrics respectively with wildcard values. ([#3354](https://github.com/open-telemetry/semantic-conventions/issues/3354)) - `go`: Add the opt-in go.memory.gc.cycles metric. ([#3353](https://github.com/open-telemetry/semantic-conventions/issues/3353)) - `http`: Clarify that intentional client-side cancellation of HTTP requests SHOULD NOT be treated as an error. ([#3495](https://github.com/open-telemetry/semantic-conventions/issues/3495)) @@ -204,16 +273,16 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h - `k8s.persistentvolume.status.phase`, `k8s.persistentvolume.storage.capacity` - `k8s.persistentvolumeclaim.status.phase`, `k8s.persistentvolumeclaim.storage.request`, `k8s.persistentvolumeclaim.storage.capacity` - + - `k8s`: Update CPU metrics for container CPU limit and request to handle resize. ([#3558](https://github.com/open-telemetry/semantic-conventions/issues/3558)) Introduced new metrics for container CPU limit and request that account for KEP 1287 allowing for in-place updates of container resources. - + - `k8s`: Promote a selection of k8s/container attributes to release_candidate ([#3491](https://github.com/open-telemetry/semantic-conventions/issues/3491), [#3380](https://github.com/open-telemetry/semantic-conventions/issues/3380)) - `k8s`: Split container memory limit/request into desired/current to handle in-place resize ([#3558](https://github.com/open-telemetry/semantic-conventions/issues/3558)) Introduced new metrics for container memory limit and request that account for KEP 1287 allowing for in-place updates of container resources. - + - `k8s`: Add `k8s.node.system_container.*` metrics to capture node-level system daemon metrics. ([#3531](https://github.com/open-telemetry/semantic-conventions/issues/3531)) - `messaging`: Define domain-specific exception events for messaging ([#3435](https://github.com/open-telemetry/semantic-conventions/issues/3435)) These domain-specific exception events provide a structured way to record @@ -223,14 +292,14 @@ and add a new `v8js.memory.heap.limit` UpDownCounter representing the absolute h - `messaging.receive.exception` for messaging receive operations - `messaging.settle.exception` for messaging settle operations - `messaging.process.exception` for messaging process operations - + - `otel`: Stabilize the `otel.event.name` attribute. ([#2913](https://github.com/open-telemetry/semantic-conventions/issues/2913)) - `process`: Added specific requirement levels to all attribute refs within process metrics. ([#864](https://github.com/open-telemetry/semantic-conventions/issues/864)) - `process`: Update process.executable.build_id.htlhash description to be generic ([#3563](https://github.com/open-telemetry/semantic-conventions/issues/3563)) - `system`: Add Linux HugePages system memory metrics. ([#3362](https://github.com/open-telemetry/semantic-conventions/issues/3362)) - `telemetry`: Promote `telemetry.distro.name` and `telemetry.distro.version` attributes to 'stable'. ([#3650](https://github.com/open-telemetry/semantic-conventions/issues/3650)) The `telemetry.distro.name` and `telemetry.distro.version` attributes and the `telemetry.distro` entity are promoted from development to stable. - + - `v8js`: Add `v8js.resource.active` gauge for tracking resources that keep the event loop active. ([#3445](https://github.com/open-telemetry/semantic-conventions/issues/3445)) ## v1.40.0 @@ -271,7 +340,7 @@ PDB name, instance name, and service name — has been moved to dedicated attrib exceptions that occur during operations in each area: - `db.client.operation.exception` for database client operations - `rpc.client.call.exception` and `rpc.server.call.exception` for RPC - + - `docs`: Add how-to guide for defining spans ([#3240](https://github.com/open-telemetry/semantic-conventions/issues/3240)) - `event`: Allow event body to represent a display message. ([#3343](https://github.com/open-telemetry/semantic-conventions/issues/3343)) - `exception`: Indicate that `exception.message` attribute may contain sensitive information. ([#2967](https://github.com/open-telemetry/semantic-conventions/issues/2967), [#3310](https://github.com/open-telemetry/semantic-conventions/issues/3310)) @@ -286,7 +355,7 @@ PDB name, instance name, and service name — has been moved to dedicated attrib - Add `gen_ai.usage.cache_creation.input_tokens` attribute for tokens written to provider cache - Add provider-specific token handling notes to OpenAI span - Add Anthropic span with computation guidance for `gen_ai.usage.input_tokens` - + - `gen_ai`: Added `sampling-relevant` flag to relevant GenAI span attributes to indicate their importance for sampling decisions. ([#2994](https://github.com/open-telemetry/semantic-conventions/issues/2994)) - `http`: Defined declarative configuration for overriding known HTTP methods. ([#3394](https://github.com/open-telemetry/semantic-conventions/issues/3394)) - `http`: Define declarative configuration for sensitive query parameters. ([#3403](https://github.com/open-telemetry/semantic-conventions/issues/3403)) @@ -294,7 +363,7 @@ PDB name, instance name, and service name — has been moved to dedicated attrib These domain-specific exception events provide a structured way to record exceptions that occur during HTTP client requests (network failures, timeouts) and HTTP server request processing (application errors, internal failures). - + - `jvm`: Add `jvm.file_descriptor.limit` as an in-development metric to track the maximum number of open file descriptors as reported by the JVM. ([#3430](https://github.com/open-telemetry/semantic-conventions/issues/3430)) - `k8s`: Promote a selection of k8s and container attributes to beta ([#3120](https://github.com/open-telemetry/semantic-conventions/issues/3120)) - `k8s`: Add k8s.service entity with endpoint and load balancer ingress metrics ([#3294](https://github.com/open-telemetry/semantic-conventions/issues/3294)) @@ -306,7 +375,7 @@ PDB name, instance name, and service name — has been moved to dedicated attrib - `k8s.service.traffic_distribution`, `k8s.service.publish_not_ready_addresses` New entity: - `entity.k8s.service`: k8s service entity with identifying and descriptive attributes - + - `openai`: Add `openai.api.type` attribute to distinguish between different OpenAI API types for similar operations. ([#3337](https://github.com/open-telemetry/semantic-conventions/issues/3337)) - `pprof`: add `pprof.scope.default_sample_type` and `pprof.scope.sample_type_order` attributes to support lossless conversion of pprof profiles. ([#3078](https://github.com/open-telemetry/semantic-conventions/issues/3078)) - `rpc`: Mark core RPC (plus gRPC and Apache Dubbo) semantic conventions as release candidate. ([#3446](https://github.com/open-telemetry/semantic-conventions/issues/3446)) @@ -321,10 +390,10 @@ PDB name, instance name, and service name — has been moved to dedicated attrib - `service`: Add `service.criticality` attribute to classify services based on operational importance ([#2986](https://github.com/open-telemetry/semantic-conventions/issues/2986)) This attribute enables observability platforms to implement criticality-aware tracing, monitoring, and sampling strategies. Supports four levels: critical, high, medium, and low. - + - `service`: Stabilize `service.instance.id` attribute. ([#1519](https://github.com/open-telemetry/semantic-conventions/issues/1519)) The `service.instance.id` attribute and entity are promoted from development to stable. - + - `service`: Stabilize `service.namespace` attribute. ([#3254](https://github.com/open-telemetry/semantic-conventions/issues/3254)) The `service.namespace` attribute is promoted from development to stable. @@ -372,20 +441,20 @@ Deprecate `process.open_file_descriptor.count` - `k8s`: Promote a selection of k8s and container attributes to alpha ([#3120](https://github.com/open-telemetry/semantic-conventions/issues/3120)) The selected attributes being promoted are used by the Collector Contrib components that are targeting stability. See [opentelemetry-collector-contrib/#44130](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/44130) - + - `k8s`: Define roles for k8s entities' attributes ([#3017](https://github.com/open-telemetry/semantic-conventions/issues/3017)) - `mcp`: Add MCP semantic conventions ([#2043](https://github.com/open-telemetry/semantic-conventions/issues/2043), [#2083](https://github.com/open-telemetry/semantic-conventions/issues/2083)) - `otel`: Add `otel.event.name` attribute for use by non-OTLP exporters and logging libraries. ([#2913](https://github.com/open-telemetry/semantic-conventions/issues/2913)) The `otel.event.name` attribute can be used by: - Non-OTLP exporters to emit the `EventName` - Applications using existing logging libraries to add event name information that can be used to set the `EventName` field by Collector or SDK components - + - `pprof`: add various pprof attributes to support lossless conversion from and to OTel profiles. ([#3078](https://github.com/open-telemetry/semantic-conventions/issues/3078)) - `rpc`: Use consistent set of attributes between RPC spans and metrics ([#2922](https://github.com/open-telemetry/semantic-conventions/issues/2922), [#3197](https://github.com/open-telemetry/semantic-conventions/issues/3197)) - Use `rpc.response.status_code` on common metrics and spans. - Make `error.type` note consistent between metrics and spans. - Promote notes on `rpc.method` and `rpc.service` to attribute definition. - + - `rpc`: Mark `rpc.system.name`, `rpc.method`, `rpc.service`, `server.address`, and `server.port` as sampling relevant attributes in RPC spans. ([#3202](https://github.com/open-telemetry/semantic-conventions/issues/3202)) - `service`: Splits service into three entities: namespace, service and instance. ([#2880](https://github.com/open-telemetry/semantic-conventions/issues/2880)) @@ -406,7 +475,7 @@ Deprecate `process.open_file_descriptor.count` - k8s.node.allocatable.cpu -> k8s.node.cpu.allocatable - k8s.node.allocatable.memory -> k8s.node.memory.allocatable - k8s.node.allocatable.ephemeral_storage -> k8s.node.ephemeral_storage.allocatable - + - `k8s`: Fix plural-named updowncounter k8s metrics ([#2301](https://github.com/open-telemetry/semantic-conventions/issues/2301)) Renamed metrics: - k8s.node.allocatable.pods -> k8s.node.pod.allocatable @@ -434,7 +503,7 @@ Deprecate `process.open_file_descriptor.count` - k8s.hpa.current_pods -> k8s.hpa.pod.current - k8s.hpa.max_pods -> k8s.hpa.pod.max - k8s.hpa.min_pods -> k8s.hpa.pod.min - + - `process`: Renames process.context_switch_type to process.context_switch.type ([#1501](https://github.com/open-telemetry/semantic-conventions/issues/1501)) - `rpc`: Attributes for rpc metric are now explicitly associated with metrics. ([#2311](https://github.com/open-telemetry/semantic-conventions/issues/2311)) The breaking change is due to the removal of network.type from the metrics. @@ -471,7 +540,7 @@ Rename metric `v8js.heap.space.physical_size` to `v8js.memory.heap.space.physica - `gen_ai`: Add `gen_ai.embeddings.dimension.count` attribute to capture the dimension count of embeddings. ([#2361](https://github.com/open-telemetry/semantic-conventions/issues/2361)) The `gen_ai.embeddings.dimension.count` is added to the `span.gen_ai.embeddings.client` span and `gen_ai.client.operation.duration` metric. - + - `gen_ai`: Add multimodal `uri`, `file`, and `blob` parts to GenAI JSON Schemas ([#1556](https://github.com/open-telemetry/semantic-conventions/issues/1556)) - `gen_ai, db, enduser, messaging`: Fix deprecation reasons - use uncategorized when attribute type is changing. Fix missing/invalid deprecations on (deprecated) `gen_ai.system` attribute. ([#2688](https://github.com/open-telemetry/semantic-conventions/issues/2688)) @@ -491,7 +560,7 @@ Rename metric `v8js.heap.space.physical_size` to `v8js.memory.heap.space.physica - `rpc`: Remove `network.type` attribute from RPC spans and metrics ([#2851](https://github.com/open-telemetry/semantic-conventions/issues/2851)) The `network.type` attribute is no longer included in RPC semantic conventions. It remains available in the attribute registry for opt-in usage when needed. - + - `rpc`: Adds in explicitly defined grpc spans. ([#2720](https://github.com/open-telemetry/semantic-conventions/issues/2720)) - `rpc`: Update the RPC stability warning and guidance for instrumentation authors ([#2718](https://github.com/open-telemetry/semantic-conventions/issues/2718)) - `rpc`: The rpc spans now contains the `error.type` attribute to report the type of error that occurred. ([#2812](https://github.com/open-telemetry/semantic-conventions/issues/2812)) @@ -501,7 +570,7 @@ Rename metric `v8js.heap.space.physical_size` to `v8js.memory.heap.space.physica - `dns`: Simplify `dns.question.name` note to remove incorrect custom encoding requirements ([#2143](https://github.com/open-telemetry/semantic-conventions/issues/2143)) The note now simply states that the domain name should be captured as it appears in the DNS query without any additional normalization, removing the previous incorrect custom encoding requirements. - + - `nfs`: nfs/metrics.yaml: nfs.server.net.count: add missing network.transport attribute. Implementation not merged, so not a breaking change. ([#39978](https://github.com/open-telemetry/semantic-conventions/issues/39978)) - `system`: The `system.network.dropped` and `system.network.packets` metrics have been added as deprecated rather than being removed. ([#2828](https://github.com/open-telemetry/semantic-conventions/issues/2828)) @@ -616,13 +685,13 @@ we now have `gen_ai.system_instructions`, `gen_ai.input.messages`, and - `k8s.hpa.scaletargetref.kind` - `k8s.hpa.scaletargetref.name` - `k8s.hpa.scaletargetref.api_version` - + - `k8s`: Adds metrics and attributes to track k8s HPA's metric target values for CPU resources. ([#2182](https://github.com/open-telemetry/semantic-conventions/issues/2182)) Below metrics are introduced to provide insight into HPA scaling configuration for CPU. - `k8s.hpa.metric.target.cpu.value` - `k8s.hpa.metric.target.cpu.average_value` - `k8s.hpa.metric.target.cpu.average_utilization` - + - `k8s`: Explains the rationale behind the Kubernetes resource naming convention. ([#2245](https://github.com/open-telemetry/semantic-conventions/issues/2245)) - `all`: Adds modelling guide for resource and entity. ([#2246](https://github.com/open-telemetry/semantic-conventions/issues/2246)) - `service`: Adds stability policies for Entity groups. ([#2378](https://github.com/open-telemetry/semantic-conventions/issues/2378)) @@ -639,7 +708,7 @@ we now have `gen_ai.system_instructions`, `gen_ai.input.messages`, and - `all`: Convert deprecated text to structured format. ([#2047](https://github.com/open-telemetry/semantic-conventions/issues/2047)) This is a breaking change from the schema perspective, but does not change anything for instrumentations or the end users. It breaks compatibility with the (old) [code generation tooling](https://github.com/open-telemetry/build-tools/issues/322). Please use [weaver](https://github.com/open-telemetry/weaver) to generate Semantic Conventions markdown or code. - + - `feature_flag`: Move the evaluated value from the event body to attributes ([#1990](https://github.com/open-telemetry/semantic-conventions/issues/1990)) - `process`: Require sensitive data sanitization for `process.command_args` and `process.command_line` ([#626](https://github.com/open-telemetry/semantic-conventions/issues/626)) @@ -686,11 +755,11 @@ This release marks the first where the core of database semantic conventions hav Add `cicd.pipeline.action.name`, `cicd.worker.id`, `cicd.worker.name`, `cicd.worker.url.full` and`cicd.pipeline.task.run.result` to attribute registry. Define resources `cicd.pipeline`, `cicd.pipeline.run` and `cicd.worker`. Add entity associations in cicd metrics for these new cicd resources. - + - `vcs`: Add resource conventions for VCS systems and VCS references. ([#1713](https://github.com/open-telemetry/semantic-conventions/issues/1713)) Define resources `vcs.repo` and `vcs.ref`. Add entity associations in vcs metrics for these new vcs resources. - + - `gen-ai`: Adding span for invoke agent ([#1842](https://github.com/open-telemetry/semantic-conventions/issues/1842)) - `gen-ai`: Adding gen_ai.tool.description to the span attributes ([#2087](https://github.com/open-telemetry/semantic-conventions/issues/2087)) - `gen-ai`: Separate inference and embeddings span definitions, remove irrelevant attributes from the create agent span. ([#1924](https://github.com/open-telemetry/semantic-conventions/issues/1924), [#2122](https://github.com/open-telemetry/semantic-conventions/issues/2122)) @@ -761,7 +830,7 @@ This release marks the first where the core of database semantic conventions hav The `device.app.lifecycle` event has been reworked to use attributes instead of event body fields. The `ios.app.state` and `android.app.state` attributes have been reintroduced to the attribute registry. - + - `system`: Move CPU-related system.cpu.* metrics to CPU namespace ([#1873](https://github.com/open-telemetry/semantic-conventions/issues/1873)) - `k8s`: Change k8s.replication_controller metrics to k8s.replicationcontroller ([#1848](https://github.com/open-telemetry/semantic-conventions/issues/1848)) - `db`: Rename `db.system` to `db.system.name` in database metrics, and update the values to be consistent with database spans. ([#1581](https://github.com/open-telemetry/semantic-conventions/issues/1581)) @@ -777,7 +846,7 @@ This release marks the first where the core of database semantic conventions hav Enables recording target number of completions to generate - `enduser`: Undeprecate 'enduser.id' and introduce new attribute `enduser.pseudo.id` ([#1104](https://github.com/open-telemetry/semantic-conventions/issues/1104)) The new attribute `enduser.pseudo.id` is intended to provide a unique identifier of a pseudonymous enduser. - + - `k8s`: Add `k8s.hpa`, `k8s.resourcequota` and `k8s.replicationcontroller` attributes and resources ([#1656](https://github.com/open-telemetry/semantic-conventions/issues/1656)) - `k8s`: How to populate resource attributes based on attributes, labels and transformation ([#236](https://github.com/open-telemetry/semantic-conventions/issues/236)) - `process`: Adjust the semantic expectations for `process.executable.name` ([#1736](https://github.com/open-telemetry/semantic-conventions/issues/1736)) @@ -804,7 +873,7 @@ Rename `db.client.cosmosdb.*` metrics to `azure.cosmosdb.client.*`. `code.lineno` renamed to `code.line.number` `code.column` renamed to `code.column.number` `code.filepath` renamed to `code.file.path` - + - `system`: Replace `system.network.state` with `network.connection.state` ([#308](https://github.com/open-telemetry/semantic-conventions/issues/308)) - `messaging`: RabbitMQ: Specify how to populate `messaging.destination.name` ([#1529](https://github.com/open-telemetry/semantic-conventions/issues/1529)) @@ -818,18 +887,18 @@ Rename `db.client.cosmosdb.*` metrics to `azure.cosmosdb.client.*`. - `gen_ai`: Yamlify gen_ai events and clean up examples. ([#1469](https://github.com/open-telemetry/semantic-conventions/issues/1469)) - `cicd`: Add CICD metrics ([#1600](https://github.com/open-telemetry/semantic-conventions/issues/1600)) Makes the following changes: - + - Add metrics `cicd.pipeline.run.duration`, `cicd.pipeline.run.active`, `cicd.worker.count`, `cicd.pipeline.run.errors` and `cicd.system.errors`. - The CICD attributes `cicd.pipeline.run.state`, `cicd.pipeline.result`, `cicd.system.component`, `cicd.worker.state` have been added to the registry. - + - `gen-ai`: Adds OpenAI API compatible `gen_ai.system` attribute values: `az.ai.openai`, `deepseek`, `gemini`, `groq`, `perplexity` and `xai`. Elaborates that `openai` can be ambiguous due to API emulation. ([#1655](https://github.com/open-telemetry/semantic-conventions/issues/1655)) - `docs`: Update attribute, events, and metrics naming guidance to include new best practices. ([#1694](https://github.com/open-telemetry/semantic-conventions/issues/1694)) - Use namespaces (with `.` delimiter) whenever possible. - Use precise, descriptive, unambiguous names that leave room for expansion. - + - `docs, db`: Add common guidance for recording errors on spans and metrics, clarify DB conventions. ([#1516](https://github.com/open-telemetry/semantic-conventions/issues/1516), [#1536](https://github.com/open-telemetry/semantic-conventions/issues/1536), [#1716](https://github.com/open-telemetry/semantic-conventions/issues/1716)) - `gen-ai`: Adds `mistral_ai` as a `gen_ai.system` attribute value. ([#1719](https://github.com/open-telemetry/semantic-conventions/issues/1719)) - `process`: Update `process.runtime` example for the Python language. ([#1772](https://github.com/open-telemetry/semantic-conventions/issues/1772)) @@ -838,7 +907,7 @@ Rename `db.client.cosmosdb.*` metrics to `azure.cosmosdb.client.*`. This addition focused on providing consistency between these metrics, while also ensuring alignment with recommendations from Kubernetes. More details in [#1637](https://github.com/open-telemetry/semantic-conventions/issues/1637) - + - `k8s`: Add k8s deamonset related metrics ([#1649](https://github.com/open-telemetry/semantic-conventions/issues/1649)) - `k8s`: Add k8s metrics for job and cronjob ([#1660](https://github.com/open-telemetry/semantic-conventions/issues/1660)) - `k8s`: Add k8s.namespace.phase metric along with the respective attribute ([#1668](https://github.com/open-telemetry/semantic-conventions/issues/1668)) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 38136847c0..687ef97e60 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -61,8 +61,14 @@ key, but non-obvious, aspects: - All changes to existing attributes, metrics, etc. MUST be allowed as per our [stability guarantees][stability guarantees] and defined in a schema file. -- Links to the specification repository MUST point to a tag and **not** to the `main` branch. - The tag version MUST match with the one defined in [README](README.md). +- Links to current specification content SHOULD point to the + [rendered OpenTelemetry specification](https://opentelemetry.io/docs/specs/otel/). +- Links into the specification repository MUST point to a tag and **not** to the + `main` branch: + - Use the version defined in [README](README.md) when the content is not + published on the website (e.g. the spec compliance matrix or an OTEP). + - Use the tag of the referenced version when linking to a historical version + on purpose (e.g. migration guidance). These links are not bumped. Please make sure all Pull Requests are compliant with these rules! @@ -515,6 +521,6 @@ exists in some form in ECS, consider the following guidelines: entirely. See the [ECS field reference] for existing namespaces. [nvm]: https://github.com/nvm-sh/nvm/blob/master/README.md#installing-and-updating -[stability guarantees]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.37.0/specification/versioning-and-stability.md#semantic-conventions-stability +[stability guarantees]: https://opentelemetry.io/docs/specs/otel/versioning-and-stability/#semantic-conventions-stability [otep222]: https://github.com/open-telemetry/oteps/pull/222 [ECS field reference]: https://www.elastic.co/guide/en/ecs/current/ecs-field-reference.html diff --git a/Makefile b/Makefile index d7bbadd2fb..5b33fac304 100644 --- a/Makefile +++ b/Makefile @@ -137,13 +137,17 @@ normalized-link-check: fi .PHONY: markdown-link-check -markdown-link-check: normalized-link-check +markdown-link-check: normalized-link-check spec-link-redirect-check .github/scripts/link-check.sh $(FILES) .PHONY: markdown-link-check-local-only markdown-link-check-local-only: normalized-link-check .github/scripts/link-check.sh --local-links-only $(FILES) +.PHONY: spec-link-redirect-check +spec-link-redirect-check: + .github/scripts/link-check.sh --config .github/scripts/lychee-spec-links-config.toml $(FILES) + # This target runs doctoc on all files that contain # a comment . # @@ -390,4 +394,3 @@ areas-table-check: .PHONY: generate-all generate-all: table-generation registry-generation areas-table-generation generate-gh-issue-templates - diff --git a/README.md b/README.md index eabd759aa0..0d3b8dfd14 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Checks](https://github.com/open-telemetry/semantic-conventions/workflows/Checks/badge.svg)](https://github.com/open-telemetry/semantic-conventions/actions?query=workflow%3A%22Checks%22+branch%3Amain) [![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/open-telemetry/semantic-conventions.svg?logo=opentelemetry&&color=f5a800&label=Latest%20release)](https://github.com/open-telemetry/semantic-conventions/releases/latest) -[![Specification Version](https://img.shields.io/badge/OTel_specification_version-v1.59.0-blue?logo=opentelemetry&color=f5a800)](https://github.com/open-telemetry/opentelemetry-specification/releases/tag/v1.59.0) +[![Specification Version](https://img.shields.io/badge/OTel_specification_version-v1.60.0-blue?logo=opentelemetry&color=f5a800)](https://github.com/open-telemetry/opentelemetry-specification/releases/tag/v1.60.0) [![Slack](https://img.shields.io/badge/Slack-%23otel--semantic--conventions-purple)](https://cloud-native.slack.com/archives/C041APFBYQP) Semantic Conventions define a common set of (semantic) attributes which diff --git a/dependencies.Dockerfile b/dependencies.Dockerfile index 87ccb786a8..7cd7cd5052 100644 --- a/dependencies.Dockerfile +++ b/dependencies.Dockerfile @@ -6,7 +6,7 @@ FROM otel/weaver:v0.25.1@sha256:9ad46ca9cd4fa5974b121f886aa3e9946a8ef8ea905001a96c018d21f9db87ca AS weaver # OPA is used to test policies enforced by weaver. -FROM openpolicyagent/opa:1.18.2@sha256:cba27d3c6af2feba1e4d6e6b5e24df5b53db332420d4148a90acccd12efae6ed AS opa +FROM openpolicyagent/opa:1.19.1@sha256:378b7db7218985444b7bc14f0b0f5b05c864b9481fe470e133654a7fc084072c AS opa # Lychee is used for checking links in documentation. FROM lycheeverse/lychee:sha-0a96dc2@sha256:2d397eb32e4add073deb5af328f7d644538cd62c007892c57b57551b073b6a12 AS lychee diff --git a/docs/app/README.md b/docs/app/README.md index 678f84f64a..96fff6edcd 100644 --- a/docs/app/README.md +++ b/docs/app/README.md @@ -10,4 +10,4 @@ Semantic conventions for Apps are defined for the following signals: * [App Events](app-events.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/app/app-events.md b/docs/app/app-events.md index 0c9a33a579..bc32e7d483 100644 --- a/docs/app/app-events.md +++ b/docs/app/app-events.md @@ -200,4 +200,4 @@ Jank happens when the UI is rendered slowly enough for the user to experience so See the [app attributes](/docs/registry/attributes/app.md) registry for all application-related attributes that may appear on telemetry items. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/azure/README.md b/docs/azure/README.md index 0e54f5106d..cf5a240836 100644 --- a/docs/azure/README.md +++ b/docs/azure/README.md @@ -12,5 +12,5 @@ Semantic conventions are defined for the following signals: * [Events](azure-events.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [AzureResourceSchema]: https://learn.microsoft.com/azure/azure-monitor/essentials/resource-logs-schema#top-level-common-schema diff --git a/docs/azure/azure-events.md b/docs/azure/azure-events.md index a65da2a0f2..4a1957a4da 100644 --- a/docs/azure/azure-events.md +++ b/docs/azure/azure-events.md @@ -60,4 +60,4 @@ semantic convention tooling supports complex attributes -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/browser/README.md b/docs/browser/README.md index 9a5470234e..29776918b3 100644 --- a/docs/browser/README.md +++ b/docs/browser/README.md @@ -12,4 +12,4 @@ Semantic conventions are defined for the following signals: * [Events](browser-events.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/browser/browser-events.md b/docs/browser/browser-events.md index b3431a0842..bdf591b0a3 100644 --- a/docs/browser/browser-events.md +++ b/docs/browser/browser-events.md @@ -72,4 +72,4 @@ This event describes the website performance metrics introduced by Google, See [ -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/cicd/README.md b/docs/cicd/README.md index 0e076c63b3..a5dcc21fd4 100644 --- a/docs/cicd/README.md +++ b/docs/cicd/README.md @@ -14,4 +14,4 @@ Semantic conventions for CI/CD are defined for the following signals: * [CI/CD Metrics](cicd-metrics.md): Semantic Conventions for CI/CD *metrics*. * [CI/CD Logs](cicd-logs.md): Semantic Conventions for CI/CD *logs*. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/cicd/cicd-logs.md b/docs/cicd/cicd-logs.md index 6fa9bacffe..7d8145cd23 100644 --- a/docs/cicd/cicd-logs.md +++ b/docs/cicd/cicd-logs.md @@ -18,4 +18,4 @@ When a trace context is available (cf. [CI/CD Spans](cicd-spans.md)) then emitte Any resources of the [CI/CD and VCS resource conventions][cicdres] that apply SHOULD be used. [cicdres]: /docs/resource/cicd.md "CI/CD and VCS resource conventions" -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/cicd/cicd-metrics.md b/docs/cicd/cicd-metrics.md index e5bd3b0841..b7213128b9 100644 --- a/docs/cicd/cicd-metrics.md +++ b/docs/cicd/cicd-metrics.md @@ -997,6 +997,6 @@ the same backends. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricOptIn]: /docs/general/metric-requirement-level.md#opt-in [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/cicd/cicd-spans.md b/docs/cicd/cicd-spans.md index 02add296d3..8d3249f1fd 100644 --- a/docs/cicd/cicd-spans.md +++ b/docs/cicd/cicd-spans.md @@ -35,7 +35,7 @@ This span describes a CI/CD pipeline run. For all pipeline runs, a span with kind `SERVER` SHOULD be created corresponding to the execution of the pipeline run. -**Span name** MUST follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#span). +**Span name** MUST follow the overall [guidelines for span names](https://opentelemetry.io/docs/specs/otel/trace/api/#span). The span name SHOULD be `{action} {pipeline}` if there is a (low-cardinality) pipeline name available. If the pipeline name is not available or is likely to have high cardinality, then the span name SHOULD be `{action}`. @@ -202,4 +202,4 @@ and SHOULD be provided **at span creation time** (if provided at all): -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/cli/README.md b/docs/cli/README.md index ab5258195d..2f61d79981 100644 --- a/docs/cli/README.md +++ b/docs/cli/README.md @@ -10,4 +10,4 @@ Semantic conventions for CLI programs are defined for the following signals: * [CLI Spans](cli-spans.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/cli/cli-spans.md b/docs/cli/cli-spans.md index a9586c5f29..7dde4a4d9f 100644 --- a/docs/cli/cli-spans.md +++ b/docs/cli/cli-spans.md @@ -148,4 +148,4 @@ it's RECOMMENDED to: -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/cloud-providers/README.md b/docs/cloud-providers/README.md index fa7b7a662f..06370b54fe 100644 --- a/docs/cloud-providers/README.md +++ b/docs/cloud-providers/README.md @@ -12,4 +12,4 @@ Semantic conventions exist for the following cloud provider SDKs: - [AWS SDK](aws-sdk.md): Semantic Conventions for the _AWS SDK_. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/cloud-providers/aws-sdk.md b/docs/cloud-providers/aws-sdk.md index 54ffc93627..e5a8914055 100644 --- a/docs/cloud-providers/aws-sdk.md +++ b/docs/cloud-providers/aws-sdk.md @@ -78,4 +78,4 @@ The following Semantic Conventions extend the general AWS SDK attributes for spe - [AWS SNS](/docs/messaging/sns.md): Semantic Conventions for _AWS SNS_. - [AWS SQS](/docs/messaging/sqs.md): Semantic Conventions for _AWS SQS_. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/cloudevents/README.md b/docs/cloudevents/README.md index 2ed3530674..a547734b4b 100644 --- a/docs/cloudevents/README.md +++ b/docs/cloudevents/README.md @@ -12,4 +12,4 @@ Semantic conventions for CloudEvents are defined for the following signals: - [CloudEvents Spans](cloudevents-spans.md): Semantic Conventions for modeling CloudEvents as _spans_. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/cloudevents/cloudevents-spans.md b/docs/cloudevents/cloudevents-spans.md index cde062956e..7656d64790 100644 --- a/docs/cloudevents/cloudevents-spans.md +++ b/docs/cloudevents/cloudevents-spans.md @@ -67,4 +67,4 @@ attributes on spans created from the conventions described above. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/configuration/version-selection.md b/docs/configuration/version-selection.md index f1008a5a5f..1171383636 100644 --- a/docs/configuration/version-selection.md +++ b/docs/configuration/version-selection.md @@ -115,5 +115,5 @@ When an instrumentation supports both declarative configuration and the `OTEL_SEMCONV_STABILITY_OPT_IN` environment variable, the declarative configuration MUST take precedence. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [SemConvStability]: https://opentelemetry.io/docs/specs/otel/versioning-and-stability/#semantic-conventions-stability diff --git a/docs/db/README.md b/docs/db/README.md index b1bae7599e..e85e4a3fe8 100644 --- a/docs/db/README.md +++ b/docs/db/README.md @@ -55,4 +55,4 @@ Technology specific semantic conventions are defined for the following databases * [Redis](redis.md): Semantic Conventions for *Redis*. * [SQL](sql.md): Semantic Conventions for *SQL* databases. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/cassandra.md b/docs/db/cassandra.md index f91be8b0ff..ab4145726b 100644 --- a/docs/db/cassandra.md +++ b/docs/db/cassandra.md @@ -64,7 +64,8 @@ Spans representing calls to a Cassandra database adhere to the general [Semantic **[2] `db.collection.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same collection name +For batch operations, if the individual operations would all have the same +`db.collection.name` when executed as non-batch operations, then that collection name SHOULD be used. **[3] `db.namespace`:** 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. @@ -83,9 +84,10 @@ in non-batch operations. If spaces can occur in the operation name, multiple consecutive spaces SHOULD be normalized to a single space. -For batch operations, if the individual operations are known to have the same operation name -then that operation name SHOULD be used prepended by `BATCH `, -otherwise `db.operation.name` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.operation.name` when executed as non-batch operations, +then that operation name SHOULD be used prepended by `BATCH `. +Otherwise, `db.operation.name` SHOULD be `BATCH` or some other database system specific term if more applicable. **[6] `db.response.status_code`:** If the operation failed and status code is available. @@ -135,16 +137,17 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[14] `db.query.text`:** 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/db/database-spans.md#sanitization-of-dbquerytext). Parameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.`](/docs/registry/attributes/db.md)). **[15] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[16] `db.response.returned_rows`:** The number of rows returned by the database operation as observed @@ -226,4 +229,4 @@ Cassandra client instrumentations SHOULD collect metrics according to the genera `db.system.name` MUST be set to `"cassandra"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/cosmosdb.md b/docs/db/cosmosdb.md index 3e7ba7e596..c417d12da8 100644 --- a/docs/db/cosmosdb.md +++ b/docs/db/cosmosdb.md @@ -233,7 +233,7 @@ A request to execute a batch operation with no operations SHOULD also be treated as a batch operation, and `db.operation.batch.size` SHOULD be set to `0`. **[10] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[11] `db.stored_procedure.name`:** If operation applies to a specific stored procedure. @@ -241,8 +241,9 @@ Parameterized query text SHOULD NOT be sanitized. Even though parameterized quer **[12] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[13] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available. @@ -360,7 +361,7 @@ This metric is [recommended][MetricRecommended]. It captures the Request Units consumed by each operation in Azure Cosmos DB. Since Request Units serve as a form of throughput control within the Azure Cosmos DB database, monitoring their usage is crucial to avoid throttling. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 1, 5, 10, 25, 50, 100, 250, 500, 1000]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 1, 5, 10, 25, 50, 100, 250, 500, 1000]`. Explaining bucket configuration: @@ -403,9 +404,10 @@ in non-batch operations. If spaces can occur in the operation name, multiple consecutive spaces SHOULD be normalized to a single space. -For batch operations, if the individual operations are known to have the same operation name -then that operation name SHOULD be used prepended by `BATCH `, -otherwise `db.operation.name` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.operation.name` when executed as non-batch operations, +then that operation name SHOULD be used prepended by `BATCH `. +Otherwise, `db.operation.name` SHOULD be `BATCH` or some other database system specific term if more applicable. **[2] `db.collection.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. @@ -483,5 +485,5 @@ It captures the number of active instances at any given time. Best practices dic -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/signal-requirement-level.md#recommended diff --git a/docs/db/couchdb.md b/docs/db/couchdb.md index d8c83cef90..47c41bf2fe 100644 --- a/docs/db/couchdb.md +++ b/docs/db/couchdb.md @@ -118,4 +118,4 @@ CouchDB client instrumentations SHOULD collect metrics according to the general `db.system.name` MUST be set to `"couchdb"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/database-exceptions.md b/docs/db/database-exceptions.md index 7ef8306e91..0162adaf29 100644 --- a/docs/db/database-exceptions.md +++ b/docs/db/database-exceptions.md @@ -59,4 +59,4 @@ classify the failure. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/database-metrics.md b/docs/db/database-metrics.md index da88b655a4..6cf6057714 100644 --- a/docs/db/database-metrics.md +++ b/docs/db/database-metrics.md @@ -62,7 +62,7 @@ This metric is [recommended][MetricRecommended]. When this metric is reported alongside a database operation span, the metric value SHOULD be the same as the database operation span duration. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10 ]`. @@ -104,8 +104,9 @@ The collection name SHOULD NOT be extracted from `db.query.text`, when the database system supports query text with multiple collections in non-batch operations. -For batch operations, if the individual operations are known to have the same -collection name then that collection name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.collection.name` when executed as non-batch operations, +then that collection name SHOULD be used. **[4] `db.namespace`:** 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. Semantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system. @@ -123,9 +124,10 @@ in non-batch operations. If spaces can occur in the operation name, multiple consecutive spaces SHOULD be normalized to a single space. -For batch operations, if the individual operations are known to have the same operation name -then that operation name SHOULD be used prepended by `BATCH `, -otherwise `db.operation.name` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.operation.name` when executed as non-batch operations, +then that operation name SHOULD be used prepended by `BATCH `. +Otherwise, `db.operation.name` SHOULD be `BATCH` or some other database system specific term if more applicable. **[7] `db.response.status_code`:** If the operation failed and status code is available. @@ -153,9 +155,10 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[14] `db.stored_procedure.name`:** If operation applies to a specific stored procedure. @@ -163,8 +166,9 @@ system specific term if more applicable. **[15] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[16] `network.peer.address`:** 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. If a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used. @@ -172,7 +176,7 @@ If a database operation involved multiple network calls (for example retries), t **[17] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available. **[18] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. --- @@ -247,7 +251,7 @@ The following metric instruments describe database query response. This metric is [recommended][MetricRecommended]. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000]`. Explaining bucket configuration: @@ -293,8 +297,9 @@ The collection name SHOULD NOT be extracted from `db.query.text`, when the database system supports query text with multiple collections in non-batch operations. -For batch operations, if the individual operations are known to have the same -collection name then that collection name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.collection.name` when executed as non-batch operations, +then that collection name SHOULD be used. **[4] `db.namespace`:** 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. Semantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system. @@ -312,9 +317,10 @@ in non-batch operations. If spaces can occur in the operation name, multiple consecutive spaces SHOULD be normalized to a single space. -For batch operations, if the individual operations are known to have the same operation name -then that operation name SHOULD be used prepended by `BATCH `, -otherwise `db.operation.name` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.operation.name` when executed as non-batch operations, +then that operation name SHOULD be used prepended by `BATCH `. +Otherwise, `db.operation.name` SHOULD be `BATCH` or some other database system specific term if more applicable. **[7] `db.response.status_code`:** If the operation failed and status code is available. @@ -342,9 +348,10 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[14] `network.peer.address`:** 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. @@ -353,7 +360,7 @@ If a database operation involved multiple network calls (for example retries), t **[15] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available. **[16] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. --- @@ -637,5 +644,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/signal-requirement-level.md#recommended diff --git a/docs/db/database-spans.md b/docs/db/database-spans.md index 218d8414af..6ae922742e 100644 --- a/docs/db/database-spans.md +++ b/docs/db/database-spans.md @@ -48,7 +48,7 @@ linkTitle: Spans ## Name -Database spans MUST follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#span). +Database spans MUST follow the overall [guidelines for span names](https://opentelemetry.io/docs/specs/otel/trace/api/#span). The **span name** SHOULD be `{db.query.summary}` if a summary is available. @@ -141,8 +141,9 @@ The collection name SHOULD NOT be extracted from `db.query.text`, when the database system supports query text with multiple collections in non-batch operations. -For batch operations, if the individual operations are known to have the same -collection name then that collection name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.collection.name` when executed as non-batch operations, +then that collection name SHOULD be used. **[4] `db.namespace`:** 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. Semantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system. @@ -160,9 +161,10 @@ in non-batch operations. If spaces can occur in the operation name, multiple consecutive spaces SHOULD be normalized to a single space. -For batch operations, if the individual operations are known to have the same operation name -then that operation name SHOULD be used prepended by `BATCH `, -otherwise `db.operation.name` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.operation.name` when executed as non-batch operations, +then that operation name SHOULD be used prepended by `BATCH `. +Otherwise, `db.operation.name` SHOULD be `BATCH` or some other database system specific term if more applicable. **[7] `db.response.status_code`:** If the operation failed and status code is available. @@ -213,16 +215,17 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[15] `db.query.text`:** 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/db/database-spans.md#sanitization-of-dbquerytext). Parameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.`](/docs/registry/attributes/db.md)). **[16] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[17] `db.stored_procedure.name`:** If operation applies to a specific stored procedure. @@ -230,8 +233,9 @@ Parameterized query text SHOULD NOT be sanitized. Even though parameterized quer **[18] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[19] `network.peer.address`:** 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. If a database operation involved multiple network calls (for example retries), the address of the last contacted node SHOULD be used. @@ -575,4 +579,4 @@ More specific Semantic Conventions are defined for the following database techno * [Redis](redis.md): Semantic Conventions for *Redis*. * [SQL](sql.md): Semantic Conventions for *SQL* databases. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/dynamodb.md b/docs/db/dynamodb.md index 163879145c..a9378f0923 100644 --- a/docs/db/dynamodb.md +++ b/docs/db/dynamodb.md @@ -721,4 +721,4 @@ AWS DynamoDB client instrumentations SHOULD collect metrics according to the gen `db.system.name` MUST be set to `"aws.dynamodb"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/elasticsearch.md b/docs/db/elasticsearch.md index bbcd4fa2cd..159129251d 100644 --- a/docs/db/elasticsearch.md +++ b/docs/db/elasticsearch.md @@ -55,7 +55,7 @@ with the endpoint identifier stored in `db.operation.name`, and the index stored | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Name of the database host. [15] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | **[1] `db.operation.name`:** 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)). -For 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`. +For batch operations, if the individual operations would all have the same `db.operation.name` when executed as non-batch operations, then that operation name SHOULD be used prepended by `bulk `. Otherwise, `db.operation.name` SHOULD be `bulk`. **[2] `http.request.method`:** HTTP request method value SHOULD be "known" to the instrumentation. By default, this convention defines "known" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods), @@ -97,9 +97,15 @@ value `REDACTED`: * [`X-Amz-Signature`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Credential`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Security-Token`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) +* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/developerguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth) +* [`Signature`](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html) * [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token) * [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls) +Several of these keys are used by more than one service or signing scheme. Each link +points to one representative usage rather than an exhaustive list, and does not narrow +the scope of the key to the linked service or signing scheme. + This list is subject to change over time. Matching of query parameter keys against the sensitive list SHOULD be case-sensitive. @@ -157,7 +163,7 @@ as a batch operation, and `db.operation.batch.size` SHOULD be set to `0`. **[12] `db.query.text`:** Should be collected by default for search-type queries and only if there is sanitization that excludes sensitive information. **[13] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[14] `elasticsearch.node.name`:** When communicating with an Elastic Cloud deployment, this should be collected from the "X-Found-Handling-Instance" HTTP response header. @@ -230,4 +236,4 @@ Elasticsearch client instrumentations SHOULD collect metrics according to the ge `db.system.name` MUST be set to `"elasticsearch"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/hbase.md b/docs/db/hbase.md index 09e1d0ed62..1e2d89d019 100644 --- a/docs/db/hbase.md +++ b/docs/db/hbase.md @@ -50,9 +50,10 @@ Spans representing calls to an HBase database adhere to the general [Semantic Co **[1] `db.operation.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same operation name -then that operation name SHOULD be used prepended by `BATCH `, -otherwise `db.operation.name` SHOULD be `BATCH`. +For batch operations, if the individual operations would all have the same +`db.operation.name` when executed as non-batch operations, +then that operation name SHOULD be used prepended by `BATCH `. +Otherwise, `db.operation.name` SHOULD be `BATCH`. **[2] `db.collection.name`:** 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. @@ -124,4 +125,4 @@ HBase client instrumentations SHOULD collect metrics according to the general `db.system.name` MUST be set to `"hbase"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/mariadb.md b/docs/db/mariadb.md index 565301533a..4b9861fdf2 100644 --- a/docs/db/mariadb.md +++ b/docs/db/mariadb.md @@ -113,16 +113,17 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[13] `db.query.text`:** 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/db/database-spans.md#sanitization-of-dbquerytext). Parameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.`](/docs/registry/attributes/db.md)). **[14] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[15] `db.stored_procedure.name`:** If operation applies to a specific stored procedure. @@ -130,8 +131,9 @@ Parameterized query text SHOULD NOT be sanitized. Even though parameterized quer **[16] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[17] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available. @@ -190,4 +192,4 @@ MariaDB client instrumentations SHOULD collect metrics according to the general `db.system.name` MUST be set to `"mariadb"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/mongodb.md b/docs/db/mongodb.md index 2d6716071f..6403dbf7f5 100644 --- a/docs/db/mongodb.md +++ b/docs/db/mongodb.md @@ -48,7 +48,7 @@ Spans representing calls to MongoDB adhere to the general [Semantic Conventions | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Name of the database host. [8] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | **[1] `db.collection.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same collection name then that collection name SHOULD be used. +For batch operations, if the individual operations would all have the same `db.collection.name` when executed as non-batch operations, then that collection name SHOULD be used. **[2] `db.response.status_code`:** If the operation failed and error code is available. @@ -128,4 +128,4 @@ MongoDB client instrumentations SHOULD collect metrics according to the general `db.system.name` MUST be set to `"mongodb"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/mysql.md b/docs/db/mysql.md index 1996b8aaef..3597890019 100644 --- a/docs/db/mysql.md +++ b/docs/db/mysql.md @@ -113,16 +113,17 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[13] `db.query.text`:** 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/db/database-spans.md#sanitization-of-dbquerytext). Parameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.`](/docs/registry/attributes/db.md)). **[14] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[15] `db.stored_procedure.name`:** If operation applies to a specific stored procedure. @@ -130,8 +131,9 @@ Parameterized query text SHOULD NOT be sanitized. Even though parameterized quer **[16] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[17] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available. @@ -190,4 +192,4 @@ MySQL client instrumentations SHOULD collect metrics according to the general `db.system.name` MUST be set to `"mysql"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/oracledb.md b/docs/db/oracledb.md index d100b79bff..e01753792a 100644 --- a/docs/db/oracledb.md +++ b/docs/db/oracledb.md @@ -10,7 +10,10 @@ linkTitle: Oracle Database - [Spans](#spans) - [Context propagation](#context-propagation) + - [Application Context](#application-context) - [V$SESSION.ACTION](#vsessionaction) + - [Choice of Propagation Mechanism](#choice-of-propagation-mechanism) + - [Co-existence & Recommendation Guidance](#co-existence--recommendation-guidance) - [Metrics](#metrics) @@ -112,16 +115,17 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[13] `db.query.text`:** 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/db/database-spans.md#sanitization-of-dbquerytext). Parameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.`](/docs/registry/attributes/db.md)). **[14] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[15] `db.stored_procedure.name`:** If operation applies to a specific stored procedure. @@ -129,8 +133,9 @@ Parameterized query text SHOULD NOT be sanitized. Even though parameterized quer **[16] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[17] `oracle.db.domain`:** This attribute SHOULD be set to the value of the `DB_DOMAIN` initialization parameter, as exposed in `v$parameter`. `DB_DOMAIN` defines the domain portion of the global @@ -214,34 +219,185 @@ and SHOULD be provided **at span creation time** (if provided at all): **Status**: [Development][DocumentStatus] +### Application Context + +Instrumentations MAY propagate context by using an Oracle driver mechanism that piggybacks application context to the server in the same round trip as the SQL statement. Context injection SHOULD NOT be enabled by default, but instrumentations MAY allow users to opt into it. + +When using W3C Trace Context, instrumentations SHOULD inject a valid [`traceparent`](https://www.w3.org/TR/trace-context/#traceparent-header). If a valid [`tracestate`](https://www.w3.org/TR/trace-context/#tracestate-header) is present, instrumentations MAY inject it together with `traceparent` as part of the propagated trace context value. + +Instrumentations that propagate context MUST use the Oracle driver API on the same connection that executes the SQL statement. Instrumentations SHOULD use driver APIs that associate the context with statement execution without requiring an additional database call. + +When the Oracle driver exposes an application context API, instrumentations SHOULD use that API to associate the trace context in the [CLIENTCONTEXT](https://node-oracledb.readthedocs.io/en/latest/user_guide/connection_handling.html#setting-application-contexts-on-a-connection-object) namespace using the key `ora$opentelem$tracectx`. For example, in Java (`oracle.jdbc`), this is supported via [JDBC Connection Tracing APIs](https://docs.oracle.com/en/database/oracle/oracle-database/26/jajdb/oracle/jdbc/OracleConnection.html#Tracing) by enabling server-side telemetry and setting `clientcontext.ora$opentelem$tracectx` using `setClientInfo`. + +The value of `ora$opentelem$tracectx` MUST use this exact field order and syntax: + +```text +traceparent: SP traceparent-value CRLF +[tracestate: SP tracestate-value CRLF] +``` + +`SP` is one ASCII space byte (`0x20`). `CRLF` is the two-byte sequence carriage return (`0x0D`) followed by line feed (`0x0A`), represented as `\r\n`. `traceparent-value` is a value valid under the W3C Trace Context `traceparent` definition. `tracestate-value` is a comma-delimited list of `key=value` list-members valid under the W3C Trace Context `tracestate` definition. The bracketed `tracestate` line is optional as a whole. When `tracestate` is absent or empty, instrumentations MUST NOT emit the `tracestate` line. Instrumentations MUST NOT include any other fields in this value or add whitespace other than the required `SP` or extra line terminators. + +Example payload with both fields present, shown as a quoted string so the line terminators are unambiguous: + +```text +"traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01\r\ntracestate: congo=t61rcWkgMzE\r\n" +``` + +Example payload when `tracestate` is absent: + +```text +"traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01\r\n" +``` + +Although `Application Context` is not constrained by the 64-byte limit of `V$SESSION.ACTION`, it is subject to a 4000-byte application-context limit (see the [`SYS_CONTEXT`](https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/SYS_CONTEXT.html) documentation). This mechanism requires support from both the database client driver and the database server version in use. If the encoded value would exceed 4000 bytes, instrumentations MUST NOT truncate it at an arbitrary byte boundary; they MAY omit the `tracestate` line or remove whole `tracestate` list-members as permitted by W3C Trace Context. End-to-end tracing works only when the database server is also explicitly configured to enable tracing. + +Compared with `V$SESSION.ACTION`, `Application Context` avoids overloading a field that applications may already use. + +`Application Context` stores trace context in the Oracle `CLIENTCONTEXT` namespace and does not expose the propagated values through `V$SESSION.ACTION`. + +The values stored in `CLIENTCONTEXT` are session state and can persist across statement executions unless the underlying driver automatically scopes or clears their lifetime. + +When the underlying driver automatically manages the lifetime of `CLIENTCONTEXT`, instrumentations do not need to perform additional cleanup. Otherwise, instrumentations SHOULD manage the lifecycle of `ora$opentelem$tracectx` to prevent stale trace context from propagating across statement executions or pooled connections—including [Database Resident Connection Pooling (DRCP)](https://docs.oracle.com/en/database/oracle/oracle-database/26/adfns/performance-and-scalability.html#GUID-015CA8C1-2386-4626-855D-CC546DDC1086). + +- **Post-Execution Cleanup:** Instrumentations SHOULD clear or reset the `ora$opentelem$tracectx` entry immediately following statement execution (for example, in a `finally` block). + +If explicit post-execution teardown is not supported by the underlying driver API, instrumentations SHOULD clear or overwrite `ora$opentelem$tracectx` prior to executing any subsequent statement where active context propagation is disabled or absent. + +For guidance on selecting between mechanisms, legacy fallbacks, or running both concurrently, see [Choice of Propagation Mechanism](#choice-of-propagation-mechanism). + +Note that Oracle database drivers in different languages expose different APIs for enabling `Application Context`. In .NET, users enable server-side propagation with the `DatabaseOpenTelemetryTracing` property on an ODP.NET connection. The following example targets [ODP.NET Core](https://docs.oracle.com/en/database/oracle/oracle-database/26/odpnt/featOpenTelemetry.html#GUID-498BB919-43C4-494F-A73B-74980C40CFF3), version 23.26.2 or later. + +Example: + +```csharp +using OpenTelemetry; +using OpenTelemetry.Trace; +using Oracle.ManagedDataAccess.Client; + +// 1. Setup the OpenTelemetry Tracer Provider targeting the Oracle driver source +using var tracerProvider = Sdk.CreateTracerProviderBuilder() + .AddSource("Oracle.ManagedDataAccess.Core") + .AddOtlpExporter() // Exports this application's spans to an OTLP collector. + .Build(); + +string connectString = ""; + +using (OracleConnection connection = new OracleConnection(connectString)) +{ + using (OracleCommand command = connection.CreateCommand()) + { + connection.Open(); + try + { + // 2. Opt in to client context piggybacking. + // The driver automatically serializes the active W3C trace context + // into CLIENTCONTEXT (ora$opentelem$tracectx) during subsequent executions. + connection.DatabaseOpenTelemetryTracing = true; + + // 3. Execute traced queries. + command.CommandText = "INSERT INTO MYTABLE VALUES ('val1', 100)"; + command.ExecuteNonQuery(); + + command.CommandText = "SELECT COL2 FROM MYTABLE WHERE COL2 = 100"; + using (OracleDataReader reader = command.ExecuteReader()) + { + // Consume the results + } + } + finally + { + // 4. Disable Application Context propagation for subsequent operations. + connection.DatabaseOpenTelemetryTracing = false; + } + + connection.Close(); + } +} +``` + +For detailed configuration of native in-database observability capabilities, trace management, and OTLP collector endpoint setups, refer to the official [Oracle Database OpenTelemetry Observability Architecture](https://docs.oracle.com/en/database/oracle/oracle-database/26/tgsql/observabilitly-open-telemetry.html) and the administrative [DBMS_OBSERVABILITY Package Reference](https://docs.oracle.com/en/database/oracle/oracle-database/26/arpls/dbms_observability.html). + ### V$SESSION.ACTION Instrumentations MAY propagate context with a fixed-length, 64 byte value using [V$SESSION.ACTION](https://docs.oracle.com/en/database/oracle/oracle-database/23/refrn/V-SESSION.html) by injecting part of span context (trace-id, span-id, trace-flags, protocol version) before executing a query. For example, when using W3C Trace Context, only a string representation of [`traceparent`](https://www.w3.org/TR/trace-context/#traceparent-header) SHOULD be injected. Context injection SHOULD NOT be enabled by default, but instrumentation MAY allow users to opt into it. Variable context parts (`tracestate`, `baggage`) SHOULD NOT be injected since `V$SESSION.ACTION` value length is limited to 64 bytes. -Instrumentations that propagate context MUST update `V$SESSION.ACTION` on the same physical connection as the SQL statement. +Instrumentations that propagate context MUST update `V$SESSION.ACTION` on the same connection that executes the SQL statement. -Example: +`V$SESSION.ACTION` is persistent session state and can persist across statement executions. When connection pools—including [Database Resident Connection Pooling (DRCP)](https://docs.oracle.com/en/database/oracle/oracle-database/26/adfns/performance-and-scalability.html#GUID-015CA8C1-2386-4626-855D-CC546DDC1086)—reuse a database session, any leftover `ACTION` value may be inherited by subsequent statements. -Note that Oracle database drivers in different languages may have different implementation to update `V$SESSION.ACTION`. +To prevent stale trace context from propagating across statement executions or pooled connections, instrumentations SHOULD scope `V$SESSION.ACTION` to the execution frame of the instrumented database operation. -For a query `SELECT * FROM songs` where `traceparent` is `00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01`: +- **Post-Execution Cleanup:** Instrumentations SHOULD restore or clear `V$SESSION.ACTION` immediately following statement execution (for example, in a `finally` block). -Run the following command on the same physical connection as the SQL statement: +If explicit post-execution cleanup is not supported by the underlying driver API, instrumentations SHOULD clear or overwrite `V$SESSION.ACTION` before executing any subsequent statement where active context propagation is disabled or absent. -```sql -BEGIN - DBMS_APPLICATION_INFO.SET_ACTION('00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01'); -END; -``` +Enabling `ACTION` propagation gives the instrumentation ownership of the `V$SESSION.ACTION` value for the duration of the propagation window. Because database driver interfaces are generally write-only, instrumentations cannot inspect or preserve a pre-existing application-set `ACTION` value. Instrumentations SHOULD document that enabling this feature overwrites any existing `ACTION` metadata for the duration of propagation and that the previous value is not restored automatically. + +Instrumentations MAY update `V$SESSION.ACTION` independently or alongside `Application Context`. See [Choice of Propagation Mechanism](#choice-of-propagation-mechanism) for details on combining these mechanisms. + +Oracle database drivers in different languages expose different APIs for updating `V$SESSION.ACTION`. +Instrumentations SHOULD use the driver-provided API when available rather than issuing SQL or PL/SQL (for example, `DBMS_APPLICATION_INFO.SET_ACTION`) directly, since driver APIs can piggyback the updated `ACTION` value with the subsequent statement execution without requiring an additional database call. + +For example, in [node-oracledb](https://node-oracledb.readthedocs.io/en/latest/api_manual/connection.html#connection.action), instrumentation can set the `action` property on the connection before executing statements: -Then run the query: +```javascript +import oracledb from "oracledb"; -```sql -SELECT * FROM songs; +// The instrumentation sets the current W3C traceparent. +const traceparent = + "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"; + +const connection = await oracledb.getConnection({ + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + connectString: process.env.DB_CONNECT_STRING, +}); + +try { + // 1. Traceable SQL Execution (SQL 1) + try { + // Inject traceparent prior to executing the traced statement + connection.action = traceparent; + await connection.execute("SELECT * FROM songs WHERE genre = :1", ["rock"]); + } finally { + // Clear ACTION so subsequent statements on this connection + // do not inherit the previous trace context. + connection.action = null; + } + + // 2. Untraced SQL Execution on the same connection (SQL 2) + // E.g., internal maintenance, pool validation, or non-instrumented statement + await connection.execute( + "UPDATE user_sessions SET last_active = SYSDATE WHERE id = :1", + [101] + ); +} finally { + await connection.close(); +} ``` +### Choice of Propagation Mechanism + +When selecting a context propagation strategy for Oracle Database, telemetry implementations SHOULD use `Application Context` for native distributed tracing, and MAY combine it with `V$SESSION.ACTION` for out-of-band query sampling. + +| Mechanism | Implementation Type | Minimum Stack Requirements | Behavior | +| :--- | :--- | :--- | :--- | +| **Application Context** | **Native Distributed Tracing** | • **Client:** Oracle JDBC Driver 23.26.2+ or ODP.NET (managed or core) 23.26.2+

• **Server:** Oracle AI Database 26ai (server version 23.26.2 or later) | Injects W3C trace context into the CLIENTCONTEXT namespace. Context piggybacks on existing database round-trips without additional network calls. | +| **V$SESSION.ACTION** | **Out-of-Band Query Sampling** | Works on all Oracle Database versions | Exposes `traceparent` in `V$SESSION` for external polling components (e.g., `oracledbreceiver`) to correlate server-side execution plans, wait events, and lock graphs to client spans. | + +#### Co-existence & Recommendation Guidance + +- **Native Distributed Tracing:** `Application Context` is the preferred method of correlation when driver and database support are present. + +- **Out-of-Band Diagnostic Sampling:** `V$SESSION.ACTION` remains essential because it exposes the active `traceparent` to external collectors (such as [`oracledbreceiver`](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/oracledbreceiver)), enabling them to correlate query samples, execution plans, wait events, and lock information collected from Oracle dynamic performance views with the originating client span. + +- **Concurrent Usage:** Instrumentations MAY enable **both** mechanisms simultaneously. Enabling `Application Context` alongside `V$SESSION.ACTION` creates native distributed spans while allowing out-of-band query samplers to correlate the receiver-specific [`db.server.query_sample` event](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/e3399f435a64b0a5aea33cc8d98edfef5bf07449/receiver/oracledbreceiver/documentation.md#dbserverquery_sample) and its database diagnostics with the originating `traceparent`. + +- **Legacy Fallback:** In environments where driver or database versions do not support `Application Context`, `V$SESSION.ACTION` MAY be used independently as a passive correlation mechanism. + ## Metrics Oracle Database driver instrumentation SHOULD collect metrics according to the general @@ -249,4 +405,4 @@ Oracle Database driver instrumentation SHOULD collect metrics according to the g `db.system.name` MUST be set to `"oracle.db"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/postgresql.md b/docs/db/postgresql.md index 40f0dcd203..18e79c4452 100644 --- a/docs/db/postgresql.md +++ b/docs/db/postgresql.md @@ -121,16 +121,17 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[13] `db.query.text`:** 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/db/database-spans.md#sanitization-of-dbquerytext). Parameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.`](/docs/registry/attributes/db.md)). **[14] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[15] `db.stored_procedure.name`:** If operation applies to a specific stored procedure. @@ -138,8 +139,9 @@ Parameterized query text SHOULD NOT be sanitized. Even though parameterized quer **[16] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[17] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available. @@ -198,4 +200,4 @@ PostgreSQL client instrumentations SHOULD collect metrics according to the gener `db.system.name` MUST be set to `"postgresql"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/redis.md b/docs/db/redis.md index d70b1728b6..5984f29985 100644 --- a/docs/db/redis.md +++ b/docs/db/redis.md @@ -136,4 +136,4 @@ In this example, Redis is connected using a UNIX domain socket and therefore the | `db.query.text` | `"HMSET myhash field1 'Hello' field2 'World"` | | `db.operation.name` | `"HMSET"` | -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/sql-server.md b/docs/db/sql-server.md index 63b9bc5cd4..ed0aac3fc0 100644 --- a/docs/db/sql-server.md +++ b/docs/db/sql-server.md @@ -120,16 +120,17 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[13] `db.query.text`:** 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/db/database-spans.md#sanitization-of-dbquerytext). Parameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.`](/docs/registry/attributes/db.md)). **[14] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[15] `db.stored_procedure.name`:** If operation applies to a specific stored procedure. @@ -137,8 +138,9 @@ Parameterized query text SHOULD NOT be sanitized. Even though parameterized quer **[16] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[17] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available. @@ -230,4 +232,4 @@ Microsoft SQL Server client instrumentations SHOULD collect metrics according to `db.system.name` MUST be set to `"microsoft.sql_server"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/db/sql.md b/docs/db/sql.md index a15570aa3a..3308a70f95 100644 --- a/docs/db/sql.md +++ b/docs/db/sql.md @@ -170,16 +170,17 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[13] `db.query.text`:** 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/db/database-spans.md#sanitization-of-dbquerytext). Parameterized query text SHOULD be collected by default (the query parameter values themselves are opt-in, see [`db.query.parameter.`](/docs/registry/attributes/db.md)). **[14] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[15] `db.stored_procedure.name`:** If operation applies to a specific stored procedure. @@ -187,8 +188,9 @@ Parameterized query text SHOULD NOT be sanitized. Even though parameterized quer **[16] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[17] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available. @@ -252,4 +254,4 @@ This is an example of attributes for a MySQL database span: | `server.port` | `3306` | | `db.query.text` | `"SELECT * FROM orders WHERE order_id = 'o4711'"` | -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/dns/README.md b/docs/dns/README.md index 2eeeb53cf1..101ded0737 100644 --- a/docs/dns/README.md +++ b/docs/dns/README.md @@ -12,4 +12,4 @@ Semantic conventions are defined for the following signals: * [Metrics](dns-metrics.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/dns/dns-metrics.md b/docs/dns/dns-metrics.md index d5d1a4a8da..d1ff27e9e7 100644 --- a/docs/dns/dns-metrics.md +++ b/docs/dns/dns-metrics.md @@ -21,7 +21,7 @@ This document defines semantic conventions to apply when instrumenting DNS queri This metric is [opt-in][MetricOptIn]. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -55,5 +55,5 @@ This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parame -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricOptIn]: /docs/general/metric-requirement-level.md#opt-in diff --git a/docs/dotnet/dotnet-aspnetcore-metrics.md b/docs/dotnet/dotnet-aspnetcore-metrics.md index 5a965d9f61..02399f1833 100644 --- a/docs/dotnet/dotnet-aspnetcore-metrics.md +++ b/docs/dotnet/dotnet-aspnetcore-metrics.md @@ -182,7 +182,7 @@ All rate-limiting metrics are reported by the `Microsoft.AspNetCore.RateLimiting ### Metric: `aspnetcore.rate_limiting.request_lease.duration` -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -234,7 +234,7 @@ This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parame ### Metric: `aspnetcore.rate_limiting.request.time_in_queue` -this metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +this metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -1201,4 +1201,4 @@ All ASP.NET Core Identity metrics are reported by the `Microsoft.AspNetCore.Iden -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/dotnet/dotnet-dns-metrics.md b/docs/dotnet/dotnet-dns-metrics.md index de5dfdb23f..c304e0fbe7 100644 --- a/docs/dotnet/dotnet-dns-metrics.md +++ b/docs/dotnet/dotnet-dns-metrics.md @@ -19,7 +19,7 @@ This article defines semantic conventions for DNS metrics emitted by .NET. ### Metric: `dns.lookup.duration` -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. | Name | Instrument Type | Unit (UCUM) | Description | @@ -52,4 +52,4 @@ for more details. | --- | --- | | `_OTHER` | A fallback error value to be used when the instrumentation doesn't define a custom value. | -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/dotnet/dotnet-http-metrics.md b/docs/dotnet/dotnet-http-metrics.md index 1f3568ab6c..9c27079de4 100644 --- a/docs/dotnet/dotnet-http-metrics.md +++ b/docs/dotnet/dotnet-http-metrics.md @@ -76,7 +76,7 @@ Notes: ### Metric: `http.client.connection.duration` -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ]`. | Name | Instrument Type | Unit (UCUM) | Description | @@ -103,7 +103,7 @@ This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parame ### Metric: `http.client.request.time_in_queue` -this metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +this metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. | Name | Instrument Type | Unit (UCUM) | Description | @@ -213,4 +213,4 @@ Notes: - Opt-in `server.address` and `server.port` attributes are not reported - Metric added in ASP.NET Core 8.0 -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/dotnet/dotnet-kestrel-metrics.md b/docs/dotnet/dotnet-kestrel-metrics.md index 17e5180c30..212e9d62f3 100644 --- a/docs/dotnet/dotnet-kestrel-metrics.md +++ b/docs/dotnet/dotnet-kestrel-metrics.md @@ -91,7 +91,7 @@ different processes could be listening on TCP port 12345 and UDP port 12345. ## Metric: `kestrel.connection.duration` -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ]`. @@ -465,7 +465,7 @@ different processes could be listening on TCP port 12345 and UDP port 12345. ## Metric: `kestrel.tls_handshake.duration` -this metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +this metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -595,4 +595,4 @@ different processes could be listening on TCP port 12345 and UDP port 12345. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/dotnet/dotnet-network-traces.md b/docs/dotnet/dotnet-network-traces.md index ea5271678d..33f1e9437c 100644 --- a/docs/dotnet/dotnet-network-traces.md +++ b/docs/dotnet/dotnet-network-traces.md @@ -454,4 +454,4 @@ If HTTP request fails before connection is established: <- HTTP wait_for_connection (trace=t2, span=s3) - ERROR -> ``` -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/dotnet/dotnet-signalr-metrics.md b/docs/dotnet/dotnet-signalr-metrics.md index 629c7391b4..668a3b25a4 100644 --- a/docs/dotnet/dotnet-signalr-metrics.md +++ b/docs/dotnet/dotnet-signalr-metrics.md @@ -17,7 +17,7 @@ This article defines semantic conventions for SignalR metrics emitted by .NET co ## Metric: `signalr.server.connection.duration` -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ]`. @@ -105,4 +105,4 @@ This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parame -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/exceptions/README.md b/docs/exceptions/README.md index 47e8c2d8e8..8af874380b 100644 --- a/docs/exceptions/README.md +++ b/docs/exceptions/README.md @@ -29,4 +29,4 @@ Semantic conventions for Exceptions are defined for the following signals: * [Exceptions on spans](exceptions-spans.md): Semantic Conventions for Exceptions recorded on *spans* (deprecated). * [Exceptions in logs](exceptions-logs.md): Semantic Conventions for Exceptions recorded in *logs*. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/exceptions/exceptions-logs.md b/docs/exceptions/exceptions-logs.md index eb339993eb..90dd582811 100644 --- a/docs/exceptions/exceptions-logs.md +++ b/docs/exceptions/exceptions-logs.md @@ -7,8 +7,8 @@ linkTitle: Logs **Status**: [Stable, except where otherwise specified][DocumentStatus] This document defines semantic conventions for recording exceptions on -[logs](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/api.md#emit-a-logrecord) -emitted through the [Logger API](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/api.md#logger). +[logs](https://opentelemetry.io/docs/specs/otel/logs/api/#emit-a-logrecord) +emitted through the [Logger API](https://opentelemetry.io/docs/specs/otel/logs/api/#logger). @@ -59,14 +59,14 @@ not hosted in OpenTelemetry. This document does not apply to logging bridges. Exceptions SHOULD be recorded as attributes on the -[LogRecord](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#log-and-event-record-definition) passed to the [Logger](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/api.md#logger) emit +[LogRecord](https://opentelemetry.io/docs/specs/otel/logs/data-model/#log-and-event-record-definition) passed to the [Logger](https://opentelemetry.io/docs/specs/otel/logs/api/#logger) emit operations. Exception events emitted by instrumentations that also record spans for the same operation MUST be associated with the corresponding span context. When language implementations support passing exception instances to the -[Emit a LogRecord](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/api.md#emit-a-logrecord) API, instrumentations SHOULD provide the exception instance +[Emit a LogRecord](https://opentelemetry.io/docs/specs/otel/logs/api/#emit-a-logrecord) API, instrumentations SHOULD provide the exception instance rather than manually setting individual exception attributes. ![Development](https://img.shields.io/badge/-development-blue) Instrumentations @@ -103,7 +103,7 @@ global unhandled exception handlers, SHOULD use the `exception` event name. The severity reflects the expected impact of the exception, not just its presence. -[Severity Number](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#field-severitynumber) +[Severity Number](https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-severitynumber) SHOULD be provided on all exception events and SHOULD be set based on the context in which the exception occurs, following the guidance below. @@ -173,7 +173,7 @@ severity. ### Attributes The table below indicates which attributes should be added to the -[LogRecord](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#log-and-event-record-definition). +[LogRecord](https://opentelemetry.io/docs/specs/otel/logs/data-model/#log-and-event-record-definition). ![Development](https://img.shields.io/badge/-development-blue) Instrumentations MAY provide additional attributes to describe the context in which the exception occurred. @@ -219,4 +219,4 @@ classify the failure. Same as [Trace Semantic Conventions for Exceptions - Stacktrace Representation](exceptions-spans.md#stacktrace-representation). -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/exceptions/exceptions-spans.md b/docs/exceptions/exceptions-spans.md index c6e3b35a50..5db28880cf 100644 --- a/docs/exceptions/exceptions-spans.md +++ b/docs/exceptions/exceptions-spans.md @@ -110,4 +110,4 @@ grained information from a stacktrace, if necessary. [telemetry-sdk-resource]: ../resource/README.md#telemetry-sdk [erlang-stacktrace]: https://www.erlang.org/doc/apps/stdlib/erl_error.html#format_exception/3 [elixir-stacktrace]: https://hexdocs.pm/elixir/1.14.3/Exception.html#format/3 -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/faas/README.md b/docs/faas/README.md index 3d35d0036f..ee087eb0e0 100644 --- a/docs/faas/README.md +++ b/docs/faas/README.md @@ -18,4 +18,4 @@ Technology specific semantic conventions are defined for the following FaaS serv * [AWS Lambda](aws-lambda.md): Semantic Conventions for *AWS Lambda*. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/faas/aws-lambda.md b/docs/faas/aws-lambda.md index 04cc60ffcf..bf1c8174ef 100644 --- a/docs/faas/aws-lambda.md +++ b/docs/faas/aws-lambda.md @@ -174,7 +174,7 @@ be ` process`. If there are multiple sources in the batch, the nam For every message in the event, the [message system attributes][] (not message attributes, which are provided by the user) SHOULD be checked for the key `AWSTraceHeader`. If it is present, an OpenTelemetry `Context` SHOULD be -parsed from the value of the attribute using the [AWS X-Ray Propagator](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/context/api-propagators.md) and +parsed from the value of the attribute using the [AWS X-Ray Propagator](https://opentelemetry.io/docs/specs/otel/context/api-propagators/) and added as a link to the span. This means the span may have as many links as messages in the batch. See [compatibility](../non-normative/compatibility/aws.md#context-propagation) for more info. @@ -187,7 +187,7 @@ See [compatibility](../non-normative/compatibility/aws.md#context-propagation) f For the SQS message span, the name MUST be ` process`. The parent MUST be the `CONSUMER` span corresponding to the SQS event. The [message system attributes][] (not message attributes, which are provided by the user) SHOULD be checked for the key `AWSTraceHeader`. If it is present, an OpenTelemetry `Context` SHOULD be -parsed from the value of the attribute using the [AWS X-Ray Propagator](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/context/api-propagators.md) and +parsed from the value of the attribute using the [AWS X-Ray Propagator](https://opentelemetry.io/docs/specs/otel/context/api-propagators/) and added as a link to the span. See [compatibility](../non-normative/compatibility/aws.md#context-propagation) for more info. @@ -311,4 +311,4 @@ Note that [`cloud.resource_id`][cloud] currently cannot be populated as a resour because it is not available until function invocation. [environment variables]: https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/faas/faas-exceptions.md b/docs/faas/faas-exceptions.md index f7895bfa51..d8665933dd 100644 --- a/docs/faas/faas-exceptions.md +++ b/docs/faas/faas-exceptions.md @@ -59,4 +59,4 @@ classify the failure. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/faas/faas-metrics.md b/docs/faas/faas-metrics.md index 4e326259e4..43f73243e2 100644 --- a/docs/faas/faas-metrics.md +++ b/docs/faas/faas-metrics.md @@ -43,7 +43,7 @@ The following metrics are recorded by the FaaS instance. This metric is [recommended][MetricRecommended]. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -80,7 +80,7 @@ This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parame This metric is [recommended][MetricRecommended]. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -292,7 +292,7 @@ This metric is [recommended][MetricRecommended]. This metric is [recommended][MetricRecommended]. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -373,5 +373,5 @@ FaaS providers. This list is not exhaustive. * [Google CloudFunctions Metrics](https://cloud.google.com/monitoring/api/metrics_gcp_c#gcp-cloudfunctions) * [OpenFaas Metrics](https://docs.openfaas.com/architecture/metrics/) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/faas/faas-spans.md b/docs/faas/faas-spans.md index a52e3fd312..6c25411d74 100644 --- a/docs/faas/faas-spans.md +++ b/docs/faas/faas-spans.md @@ -372,4 +372,4 @@ This example shows the FaaS attributes for a (non-FaaS) process hosted on Google | Resource | `faas.instance` | n/a | `"my-lambda-function:instance-0001"` | | Resource | `cloud.resource_id` | n/a | `"arn:aws:lambda:us-west-2:123456789012:function:my-lambda-function"` | -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/feature-flags/README.md b/docs/feature-flags/README.md index fa37c4868f..886e756876 100644 --- a/docs/feature-flags/README.md +++ b/docs/feature-flags/README.md @@ -13,4 +13,4 @@ Semantic conventions for feature flags are defined for the following signals: * [Feature Flags in Events](feature-flags-events.md): Semantic Conventions for recording feature flags in *events*. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/feature-flags/feature-flags-events.md b/docs/feature-flags/feature-flags-events.md index f725fa9c0e..623a033872 100644 --- a/docs/feature-flags/feature-flags-events.md +++ b/docs/feature-flags/feature-flags-events.md @@ -26,14 +26,14 @@ This can be used to determine the impact a feature has on a request, enabling en ## Recording an evaluation -Feature flag evaluations SHOULD be recorded as attributes on the [Event](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#events) passed to the [Logger](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/api.md#logger) emit operations. +Feature flag evaluations SHOULD be recorded as attributes on the [Event](https://opentelemetry.io/docs/specs/otel/logs/data-model/#events) passed to the [Logger](https://opentelemetry.io/docs/specs/otel/logs/api/#logger) emit operations. > [!NOTE] -> Events are in-development and not yet available in some languages. Check the [spec-compliance matrix](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/spec-compliance-matrix.md#logs) to see the implementation status in the corresponding language. +> Events are in-development and not yet available in some languages. Check the [spec-compliance matrix](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/spec-compliance-matrix.md#logs) to see the implementation status in the corresponding language. ## Evaluation event -The table below indicates which attributes should be added to the [Event](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#log-and-event-record-definition) and their types. +The table below indicates which attributes should be added to the [Event](https://opentelemetry.io/docs/specs/otel/logs/data-model/#log-and-event-record-definition) and their types. @@ -125,4 +125,4 @@ For example, the variant `red` maybe be used for the value `#c05543`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/attribute-requirement-level.md b/docs/general/attribute-requirement-level.md index bc4073241d..1f74abf1a8 100644 --- a/docs/general/attribute-requirement-level.md +++ b/docs/general/attribute-requirement-level.md @@ -132,4 +132,4 @@ Here are several examples of expensive operations to be avoided by default: - reading response stream to find `http.response.body.size` when `Content-Length` header is not available -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/attributes.md b/docs/general/attributes.md index 864ab45e38..5d6c4c41f6 100644 --- a/docs/general/attributes.md +++ b/docs/general/attributes.md @@ -40,13 +40,6 @@ Particular operations may refer to or require some of these attributes. ## Server, client and shared network attributes -These attributes may be used to describe the client and 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 does not 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. - In an ideal situation, not accounting for proxies, multiple IP addresses or hostname, the `server.*` attributes are the same on the client and server. @@ -59,16 +52,15 @@ identify the transport, then setting [`network.transport`](#other-network-attrib ### Server attributes -> [!IMPORTANT] -> Attributes in this section are in use by the HTTP semantic conventions. -Once the HTTP semantic conventions are declared stable, changes to the attributes in this section will only be allowed -if they do not cause breaking changes to HTTP semantic conventions. - +**Status:** ![Stable](https://img.shields.io/badge/-stable-lightgreen) + +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't 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. + **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | @@ -105,16 +97,15 @@ For UNIX domain socket, `server.address` attribute represents remote endpoint ad ### Client attributes -> [!IMPORTANT] -> Attributes in this section are in use by the HTTP semantic conventions. -Once the HTTP semantic conventions are declared stable, changes to the attributes in this section will only be allowed -if they do not cause breaking changes to HTTP semantic conventions. - +**Status:** ![Stable](https://img.shields.io/badge/-stable-lightgreen) + +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't 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. + **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | @@ -132,13 +123,6 @@ if they do not cause breaking changes to HTTP semantic conventions. ### Source and destination attributes -These attributes may be used to describe the sender and 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't 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 does not expose a clear notion of client and server. - #### Source @@ -146,6 +130,10 @@ This also covers unidirectional UDP flows and peer-to-peer communication where t +**Status:** ![Development](https://img.shields.io/badge/-development-blue) + +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't 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't expose a clear notion of client and server. + **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | @@ -161,13 +149,15 @@ This also covers unidirectional UDP flows and peer-to-peer communication where t #### Destination -Destination fields capture details about the receiver of a network exchange/packet. - +**Status:** ![Development](https://img.shields.io/badge/-development-blue) + +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't 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't expose a clear notion of client and server. + **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | @@ -373,14 +363,15 @@ Users can define what the name of a service is based on their particular semanti ## General thread attributes -These attributes may be used for any operation to store information about -a thread that started a span. - +**Status:** ![Development](https://img.shields.io/badge/-development-blue) + +These attributes may be used for any operation to store information about a thread that started a span. + **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | @@ -423,4 +414,4 @@ For an HTTP server span, this would be the function that handles the incoming re The [code attributes](https://opentelemetry.io/docs/specs/semconv/registry/attributes/code/) allow to report this unit of code and therefore to provide more context. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/events.md b/docs/general/events.md index 5658253570..ca2f6f9e14 100644 --- a/docs/general/events.md +++ b/docs/general/events.md @@ -9,7 +9,7 @@ aliases: [events-general] This document describes the semantic conventions for Events that are represented in the data model by an -[`EventRecord`](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#log-and-event-record-definition) +[`EventRecord`](https://opentelemetry.io/docs/specs/otel/logs/data-model/#log-and-event-record-definition) (a `LogRecord` with an event name). @@ -68,7 +68,7 @@ domain-specific occurrence it represents in the instrumented component, the Semantic conventions MUST document the event name. An event MUST have an -[event name](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#field-eventname) +[event name](https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-eventname) that uniquely identifies the event structure. Event names uniquely identify an event structure. When users query for a @@ -91,18 +91,18 @@ semantic convention. ## Timestamps Events MUST have -[Timestamp](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#field-timestamp) +[Timestamp](https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-timestamp) set to the time when the event occurred. Semantic conventions MUST NOT define a value for -[ObservedTimestamp](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#field-observedtimestamp); +[ObservedTimestamp](https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-observedtimestamp); SDKs, collectors, or other components should populate it to reflect when the event was observed/received. ## Severity Semantic conventions SHOULD specify a default -[severity number](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#field-severitynumber). +[severity number](https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-severitynumber). Define the severity number based on the expected impact of the occurrence. If the same event can have different severity depending on context, document the @@ -112,7 +112,7 @@ For exception events, follow the severity guidance in [Semantic conventions for exceptions in logs](/docs/exceptions/exceptions-logs.md#severity). Semantic conventions MUST NOT define a -[severity text](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#field-severitytext). +[severity text](https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-severitytext). ## Attributes @@ -139,7 +139,7 @@ event details and context: ## Body Semantic conventions MUST NOT define a value for -[body](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/logs/data-model.md#field-body) +[body](https://opentelemetry.io/docs/specs/otel/logs/data-model/#field-body) except to represent a string display message of the event. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/logs.md b/docs/general/logs.md index 06b145141b..c9e4b80409 100644 --- a/docs/general/logs.md +++ b/docs/general/logs.md @@ -25,7 +25,7 @@ The following semantic conventions for logs are defined: * [Exceptions](/docs/exceptions/exceptions-logs.md): Semantic attributes that may be used in describing exceptions in logs. Apart from semantic conventions for logs, [events](events.md), [traces](trace.md), and [metrics](metrics.md), -OpenTelemetry also defines the concept of overarching [Resources](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/resource/sdk.md) with their own +OpenTelemetry also defines the concept of overarching [Resources](https://opentelemetry.io/docs/specs/otel/resource/sdk/) with their own [Resource Semantic Conventions](/docs/resource/README.md). ## General log identification attributes @@ -57,7 +57,7 @@ The ID MAY be an [Universally Unique Lexicographically Sortable Identifier (ULID This section describes attributes for log media in OpenTelemetry. Log media are mechanisms by which logs are transmitted. Types of media include files, streams, network protocols, and os-specific logging services such as journald and Windows Event Log. -**Note:** The OpenTelemetry specification defines a [Resource](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/resource/sdk.md) as `an immutable representation of the entity producing telemetry`. +**Note:** The OpenTelemetry specification defines a [Resource](https://opentelemetry.io/docs/specs/otel/resource/sdk/) as `an immutable representation of the entity producing telemetry`. The following attributes do not describe entities that produce telemetry. Rather, they describe mechanisms of log transmission. As such, these should be recorded as Log Record attributes when applicable. They should not be recorded as Resource attributes. @@ -111,4 +111,4 @@ As such, these should be recorded as Log Record attributes when applicable. They -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/metric-requirement-level.md b/docs/general/metric-requirement-level.md index d473be716b..1f8fb98dca 100644 --- a/docs/general/metric-requirement-level.md +++ b/docs/general/metric-requirement-level.md @@ -43,4 +43,4 @@ Instrumentation that doesn't support configuration MUST NOT emit `Opt-In` metric This attribute requirement level is recommended for metrics that are particularly expensive to retrieve or might pose a security or privacy risk. These should therefore only be enabled deliberately by a user making an informed decision. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/metrics.md b/docs/general/metrics.md index 84e9b89863..e914419792 100644 --- a/docs/general/metrics.md +++ b/docs/general/metrics.md @@ -37,7 +37,7 @@ The following semantic conventions surrounding metrics are defined: * [OTel SDK Telemetry](/docs/otel/sdk-metrics.md): Metrics emitted by the OpenTelemetry SDK components. Apart from semantic conventions for metrics, [traces](trace.md), [logs](logs.md), and [events](events.md), OpenTelemetry also -defines the concept of overarching [Resources](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/resource/sdk.md) with +defines the concept of overarching [Resources](https://opentelemetry.io/docs/specs/otel/resource/sdk/) with their own [Resource Semantic Conventions](/docs/resource/README.md). ## General guidelines @@ -88,7 +88,7 @@ usable. When building components that interoperate between OpenTelemetry and a system using the OpenMetrics exposition format, use the -[OpenMetrics Guidelines](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/compatibility/prometheus_and_openmetrics.md). +[OpenMetrics Guidelines](https://opentelemetry.io/docs/specs/otel/compatibility/prometheus_and_openmetrics/). ### Instrument units @@ -136,4 +136,4 @@ For example, if you are tracking `active_requests` with an `UpDownCounter`, and request starts and decrementing it each time a request ends, then any attributes which are not yet available when incrementing the counter at request start should not be used when decrementing the counter at request end. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/naming.md b/docs/general/naming.md index 6f35b2a823..a4c7b1ea43 100644 --- a/docs/general/naming.md +++ b/docs/general/naming.md @@ -440,4 +440,4 @@ attribute use the same system name (`azure.cosmosdb`). conventions don't follow the system-specific naming guidance yet, and will be updated one-by-one. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/profiles.md b/docs/general/profiles.md index ba12ceedc2..75609f759c 100644 --- a/docs/general/profiles.md +++ b/docs/general/profiles.md @@ -98,5 +98,5 @@ They may be used in any Profiles record they apply to. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [pprofLink]: https://github.com/google/pprof diff --git a/docs/general/recording-errors.md b/docs/general/recording-errors.md index a291d978df..216c216dac 100644 --- a/docs/general/recording-errors.md +++ b/docs/general/recording-errors.md @@ -140,5 +140,5 @@ public boolean createIfNotExists(String resourceId) throws IOException { } ``` -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status -[SpanStatus]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#set-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ +[SpanStatus]: https://opentelemetry.io/docs/specs/otel/trace/api/#set-status diff --git a/docs/general/semantic-convention-groups.md b/docs/general/semantic-convention-groups.md index 30c04bd10d..0b17b95d6e 100644 --- a/docs/general/semantic-convention-groups.md +++ b/docs/general/semantic-convention-groups.md @@ -90,5 +90,5 @@ users to opt into it. [Stability]: https://opentelemetry.io/docs/specs/otel/versioning-and-stability/#semantic-conventions-stability -[MaturityLevel]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/oteps/0232-maturity-of-otel.md -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[MaturityLevel]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/oteps/0232-maturity-of-otel.md +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/session.md b/docs/general/session.md index 62c2f578c2..e2c513f86a 100644 --- a/docs/general/session.md +++ b/docs/general/session.md @@ -8,17 +8,6 @@ linkTitle: Session This document defines semantic conventions to apply to client-side applications when tracking sessions. -Session is defined as the period of time encompassing all activities performed by the application and the actions -executed by the end user. - -Consequently, a Session is represented as a collection of Logs, Events, and Spans emitted by the Client Application -throughout the Session's duration. Each Session is assigned a unique identifier, which is included as an attribute in -the Logs, Events, and Spans generated during the Session's lifecycle. - -When 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 (see [Session Start Event](#event-sessionstart) below). - ## Attributes @@ -26,6 +15,14 @@ backends can link the two sessions (see [Session Start Event](#event-sessionstar +**Status:** ![Development](https://img.shields.io/badge/-development-blue) + +Session is defined as the period of time encompassing all activities performed by the application and the actions executed by the end user. + +Consequently, a Session is represented as a collection of Logs, Events, and Spans emitted by the Client Application throughout the Session's duration. Each Session is assigned a unique identifier, which is included as an attribute in the Logs, Events, and Spans generated during the Session's lifecycle. + +When 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. + **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | @@ -93,4 +90,4 @@ For instrumentation that tracks user behavior during user sessions, a `session.e -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/signal-requirement-level.md b/docs/general/signal-requirement-level.md index a9c3ad656b..a2929bf49c 100644 --- a/docs/general/signal-requirement-level.md +++ b/docs/general/signal-requirement-level.md @@ -41,4 +41,4 @@ This requirement level is recommended for signals that are expensive to retrieve usually pose a security or privacy risk, or are not essential for most applications. These should therefore only be enabled deliberately by a user making an informed decision. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/trace-compatibility.md b/docs/general/trace-compatibility.md index 761a530a32..30435b31c0 100644 --- a/docs/general/trace-compatibility.md +++ b/docs/general/trace-compatibility.md @@ -48,4 +48,4 @@ between a child Span and a parent Span, as defined by -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/general/trace.md b/docs/general/trace.md index 09620e984f..058affbed7 100644 --- a/docs/general/trace.md +++ b/docs/general/trace.md @@ -33,7 +33,7 @@ The following semantic conventions for spans are defined: * [RPC/RMI](/docs/rpc/rpc-spans.md): For remote procedure call (e.g., gRPC) spans. Apart from semantic conventions for traces, [metrics](metrics.md), [logs](logs.md), and [events](events.md), -OpenTelemetry also defines the concept of overarching [Resources](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/resource/sdk.md) with their own +OpenTelemetry also defines the concept of overarching [Resources](https://opentelemetry.io/docs/specs/otel/resource/sdk/) with their own [Resource Semantic Conventions](/docs/resource/README.md). -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/graphql/README.md b/docs/graphql/README.md index 0801f5f479..fb38a5c81a 100644 --- a/docs/graphql/README.md +++ b/docs/graphql/README.md @@ -12,4 +12,4 @@ Semantic conventions are defined for the following signals: * [Spans](graphql-spans.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/graphql/graphql-spans.md b/docs/graphql/graphql-spans.md index 6b428307ae..2c9ebb873f 100644 --- a/docs/graphql/graphql-spans.md +++ b/docs/graphql/graphql-spans.md @@ -56,4 +56,4 @@ the span SHOULD be named `GraphQL Operation`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/hardware/README.md b/docs/hardware/README.md index cd153a23f7..bdaad35a4c 100644 --- a/docs/hardware/README.md +++ b/docs/hardware/README.md @@ -30,4 +30,4 @@ Semantic conventions for hardware are defined as following: * [Temperature Metrics](temperature.md): Semantic Conventions for *temperature* metrics. * [Voltage Metrics](voltage.md): Semantic Conventions for *voltage* metrics. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/hardware/battery.md b/docs/hardware/battery.md index dc43fe9965..a54d0b3055 100644 --- a/docs/hardware/battery.md +++ b/docs/hardware/battery.md @@ -225,5 +225,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/common.md b/docs/hardware/common.md index ba089a0bea..77904c72b5 100644 --- a/docs/hardware/common.md +++ b/docs/hardware/common.md @@ -248,5 +248,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/cpu.md b/docs/hardware/cpu.md index 8fcbafe11b..442f5620bb 100644 --- a/docs/hardware/cpu.md +++ b/docs/hardware/cpu.md @@ -226,5 +226,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/disk-controller.md b/docs/hardware/disk-controller.md index 9c8439e95e..fd20031763 100644 --- a/docs/hardware/disk-controller.md +++ b/docs/hardware/disk-controller.md @@ -93,5 +93,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/enclosure.md b/docs/hardware/enclosure.md index 15a659a86d..62f8abbd22 100644 --- a/docs/hardware/enclosure.md +++ b/docs/hardware/enclosure.md @@ -93,5 +93,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/fan.md b/docs/hardware/fan.md index 60dc3420df..5dfec0e879 100644 --- a/docs/hardware/fan.md +++ b/docs/hardware/fan.md @@ -186,5 +186,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/gpu.md b/docs/hardware/gpu.md index db16be019a..4ae8c9aa5c 100644 --- a/docs/hardware/gpu.md +++ b/docs/hardware/gpu.md @@ -338,5 +338,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/host.md b/docs/hardware/host.md index e6b83e385b..a26b4cfa8d 100644 --- a/docs/hardware/host.md +++ b/docs/hardware/host.md @@ -125,5 +125,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/logical-disk.md b/docs/hardware/logical-disk.md index 64b52aa059..684ba48285 100644 --- a/docs/hardware/logical-disk.md +++ b/docs/hardware/logical-disk.md @@ -251,5 +251,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/memory.md b/docs/hardware/memory.md index 931757c4fa..9c53501daf 100644 --- a/docs/hardware/memory.md +++ b/docs/hardware/memory.md @@ -187,5 +187,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/network.md b/docs/hardware/network.md index 816ff3e360..e6ee26eaa5 100644 --- a/docs/hardware/network.md +++ b/docs/hardware/network.md @@ -343,5 +343,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/physical-disk.md b/docs/hardware/physical-disk.md index 14658cc801..d33a4f4804 100644 --- a/docs/hardware/physical-disk.md +++ b/docs/hardware/physical-disk.md @@ -262,5 +262,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/power-supply.md b/docs/hardware/power-supply.md index d8b79c5811..424ed9e2de 100644 --- a/docs/hardware/power-supply.md +++ b/docs/hardware/power-supply.md @@ -194,5 +194,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/tape-drive.md b/docs/hardware/tape-drive.md index 1019029d8e..5ddb92fa49 100644 --- a/docs/hardware/tape-drive.md +++ b/docs/hardware/tape-drive.md @@ -195,5 +195,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/temperature.md b/docs/hardware/temperature.md index 6755e6e164..96f383eb8e 100644 --- a/docs/hardware/temperature.md +++ b/docs/hardware/temperature.md @@ -159,5 +159,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/hardware/voltage.md b/docs/hardware/voltage.md index 8ddd42a1c8..15a3232199 100644 --- a/docs/hardware/voltage.md +++ b/docs/hardware/voltage.md @@ -186,5 +186,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/how-to-write-conventions/README.md b/docs/how-to-write-conventions/README.md index 7083c1f0c5..71cd5c3021 100644 --- a/docs/how-to-write-conventions/README.md +++ b/docs/how-to-write-conventions/README.md @@ -110,7 +110,7 @@ When defining a new attribute: This is useful for capturing user-defined key-value pairs, such as HTTP headers. - Represent complex values as a set of flat attributes whenever possible. - Complex or structured attributes (not listed in the - [set of standard attributes](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/common/README.md#attribute)) + [set of standard attributes](https://opentelemetry.io/docs/specs/otel/common/#attribute)) could be referenced on events and spans (![Development](https://img.shields.io/badge/-development-blue)) only. Semantic convention authors should assume that backends do not index individual properties of complex attributes, @@ -248,7 +248,7 @@ Define the scope and boundaries of the operation: ##### Naming pattern - Span names must have low cardinality and should provide a reasonable grouping - for that operation. See [Span name guidelines](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#span) + for that operation. See [Span name guidelines](https://opentelemetry.io/docs/specs/otel/trace/api/#span) for details. - Span names usually follow the `{action} {target}` pattern. For example, `send orders_queue`. @@ -280,7 +280,7 @@ to leverage additional context to provide a more accurate status. ##### Kind -All span definitions MUST include a specific [span kind](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#spankind). One span definition can +All span definitions MUST include a specific [span kind](https://opentelemetry.io/docs/specs/otel/trace/api/#spankind). One span definition can only mention one span kind. ##### Attributes @@ -354,4 +354,4 @@ TODO: TODO -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/how-to-write-conventions/resource-and-entities.md b/docs/how-to-write-conventions/resource-and-entities.md index 932df0db37..462f213f8f 100644 --- a/docs/how-to-write-conventions/resource-and-entities.md +++ b/docs/how-to-write-conventions/resource-and-entities.md @@ -177,7 +177,7 @@ minimal set of attributes that is sufficient for uniquely identifying that entit uniquely identified by (`process.pid`,`process.creation.time`) attributes. Adding for example `process.executable.name` attribute to the identity is unnecessary and violates the -rule of having a [minimally sufficient ID](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/entities/data-model.md#minimally-sufficient-identity). +rule of having a [minimally sufficient ID](https://opentelemetry.io/docs/specs/otel/entities/data-model/#minimally-sufficient-identity). Identifying attributes generally form the lifespan of an entity. This is important, particularly, for metrics written against an entity. The lifespan @@ -232,7 +232,7 @@ semantic convention namespacing rules. ## Background: Resource and Entities In OpenTelemetry, every signal is associated with a Resource. -According to the [Specification](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/resource/README.md#overview) +According to the [Specification](https://opentelemetry.io/docs/specs/otel/resource/#overview) this is: > A Resource is a representation of the entity producing telemetry. Within @@ -247,7 +247,7 @@ this is: > * It SHOULD allow users to determine where that entity resides within their > infrastructure. -All resources are composed of [Entities](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/entities/README.md#overview). +All resources are composed of [Entities](https://opentelemetry.io/docs/specs/otel/entities/#overview). An entity is specified as: > Entity represents an object of interest associated with @@ -262,7 +262,7 @@ several key differences between the two: *descriptive* attributes. - Identifying attributes can be used to identify the entity within some system (See - [minimally sufficient ID](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/entities/data-model.md#minimally-sufficient-identity)). + [minimally sufficient ID](https://opentelemetry.io/docs/specs/otel/entities/data-model/#minimally-sufficient-identity)). For Example, the `k8s.pod.uid` would be considered an identifying attribute for a pod within Kubernetes. - *Descriptive* attributes can be used to provide additional labels for diff --git a/docs/how-to-write-conventions/status-metrics.md b/docs/how-to-write-conventions/status-metrics.md index 48d077b49e..2934c52ca6 100644 --- a/docs/how-to-write-conventions/status-metrics.md +++ b/docs/how-to-write-conventions/status-metrics.md @@ -83,4 +83,4 @@ The english-language semantics of this are heavily debatable, thus for the sake of consistency it is recommended to adopt this naming scheme if there is no obvious verbiage available. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/http/README.md b/docs/http/README.md index 8c5b7baf4f..9b08a6c66e 100644 --- a/docs/http/README.md +++ b/docs/http/README.md @@ -44,4 +44,4 @@ Semantic conventions for HTTP are defined for the following signals: For help migrating from non-stable to stable conventions, see [the migration guide](../non-normative/http-migration.md). -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/http/http-exceptions.md b/docs/http/http-exceptions.md index 981fe5a2dc..dd2e90f20a 100644 --- a/docs/http/http-exceptions.md +++ b/docs/http/http-exceptions.md @@ -106,4 +106,4 @@ classify the failure. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/http/http-metrics.md b/docs/http/http-metrics.md index d8ed3035cb..c76ec9b14f 100644 --- a/docs/http/http-metrics.md +++ b/docs/http/http-metrics.md @@ -63,7 +63,7 @@ This metric is [recommended][MetricRecommended]. When this metric is reported alongside an HTTP server span, the metric value SHOULD be the same as the HTTP server span duration. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -572,7 +572,7 @@ This metric is [recommended][MetricRecommended]. When this metric is reported alongside an HTTP client span, the metric value SHOULD be the same as the HTTP client span duration. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -976,7 +976,7 @@ This metric is [opt-in][MetricOptIn]. ### Metric: `http.client.connection.duration` -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ]`. This metric is [opt-in][MetricOptIn]. @@ -1095,6 +1095,6 @@ Tracing instrumentations that do so, MUST also set `http.request.method_original -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended [MetricOptIn]: /docs/general/metric-requirement-level.md#opt-in diff --git a/docs/http/http-spans.md b/docs/http/http-spans.md index cdf2b41d6f..d96635e764 100644 --- a/docs/http/http-spans.md +++ b/docs/http/http-spans.md @@ -62,7 +62,7 @@ and various HTTP versions like 1.1, 2 and SPDY. ## Name -HTTP spans MUST follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#span). +HTTP spans MUST follow the overall [guidelines for span names](https://opentelemetry.io/docs/specs/otel/trace/api/#span). HTTP span names SHOULD be `{method} {target}` if there is a (low-cardinality) `target` available. If there is no (low-cardinality) `{target}` available, HTTP span names SHOULD be `{method}`. @@ -81,7 +81,7 @@ Instrumentation MUST NOT default to using URI path as a `{target}`. ## Status -[Span Status](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#set-status) MUST be left unset if HTTP status code was in the +[Span Status](https://opentelemetry.io/docs/specs/otel/trace/api/#set-status) MUST be left unset if HTTP status code was in the 1xx, 2xx or 3xx ranges, unless there was another error (e.g., network error receiving the response body; or 3xx codes with max redirects exceeded), in which case status MUST be set to `Error`. @@ -163,17 +163,19 @@ There are two ways HTTP client spans can be implemented in an instrumentation: | [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. | `10.1.2.80`; `/tmp/my.sock` | | [`network.peer.port`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` If `network.peer.address` is set. | int | Peer port number of the network connection. | `65123` | | [`network.protocol.version`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | The actual version of the protocol used for network communication. [10] | `1.0`; `1.1`; `2`; `3` | +| [`http.request.body.content`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | any | The content of the HTTP request body, with any content coding indicated by [Content-Encoding](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding) removed, captured as a string when the request content is textual or as byte array otherwise. [11] | `Hello world!`; `{"foo": "bar"}` | | [`http.request.body.size`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | int | 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. | `3495` | -| [`http.request.header.`](/docs/registry/attributes/http.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string[] | HTTP request headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [11] | `["application/json"]`; `["1.2.3.4", "1.2.3.5"]` | +| [`http.request.header.`](/docs/registry/attributes/http.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string[] | HTTP request headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [12] | `["application/json"]`; `["1.2.3.4", "1.2.3.5"]` | | [`http.request.size`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | int | 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. | `1437` | +| [`http.response.body.content`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | any | The content of the HTTP response body, with any content coding indicated by [Content-Encoding](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding) removed, captured as a string when the response content is textual or as byte array otherwise. [13] | `Hello world!`; `{"foo": "bar"}` | | [`http.response.body.size`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | int | 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. | `3495` | -| [`http.response.header.`](/docs/registry/attributes/http.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string[] | HTTP response headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [12] | `["application/json"]`; `["abc", "def"]` | +| [`http.response.header.`](/docs/registry/attributes/http.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string[] | HTTP response headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [14] | `["application/json"]`; `["abc", "def"]` | | [`http.response.size`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | int | 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. | `1437` | -| [`network.transport`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string | [OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication). [13] | `tcp`; `udp` | +| [`network.transport`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string | [OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication). [15] | `tcp`; `udp` | | [`url.scheme`](/docs/registry/attributes/url.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string | The [URI scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component identifying the used protocol. | `http`; `https` | -| [`url.template`](/docs/registry/attributes/url.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string | The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2). [14] | `/users/{id}`; `/users/:id`; `/users?id={id}` | +| [`url.template`](/docs/registry/attributes/url.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string | The low-cardinality template of an [absolute path reference](https://www.rfc-editor.org/rfc/rfc3986#section-4.2). [16] | `/users/{id}`; `/users/:id`; `/users?id={id}` | | [`user_agent.original`](/docs/registry/attributes/user-agent.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string | Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client. | `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` | -| [`user_agent.synthetic.type`](/docs/registry/attributes/user-agent.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string | Specifies the category of synthetic traffic, such as tests or bots. [15] | `bot`; `test` | +| [`user_agent.synthetic.type`](/docs/registry/attributes/user-agent.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string | Specifies the category of synthetic traffic, such as tests or bots. [17] | `bot`; `test` | **[1] `http.request.method`:** HTTP request method value SHOULD be "known" to the instrumentation. By default, this convention defines "known" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods), @@ -229,9 +231,15 @@ value `REDACTED`: * [`X-Amz-Signature`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Credential`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Security-Token`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) +* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/developerguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth) +* [`Signature`](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html) * [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token) * [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls) +Several of these keys are used by more than one service or signing scheme. Each link +points to one representative usage rather than an exhaustive list, and does not narrow +the scope of the key to the linked service or signing scheme. + This list is subject to change over time. Matching of query parameter keys against the sensitive list SHOULD be case-sensitive. @@ -274,7 +282,30 @@ If the request has completed successfully, instrumentations SHOULD NOT set `erro **[10] `network.protocol.version`:** 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. -**[11] `http.request.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. +**[11] `http.request.body.content`:** Captured value MAY be limited in size and thus value is expected to be truncated in many cases. +When an instrumentation applies a byte-based limit while capturing the body as a string, it SHOULD truncate on a character +boundary so that the recorded value remains valid text. + +Instrumentations MUST NOT capture this attribute by default and MAY provide an option to enable it. + +> [!WARNING] +> This attribute may contain sensitive information. + +When instrumentations record body, they SHOULD capture the body as string whenever possible as it makes it easier to use in human-readable form, +also it allows to implement sanitization if needed. + +Textual content is typically detected based on the [Content-Type](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-type) header using heuristics +such as checking if the type/subtype (compared case-insensitively, ignoring any parameters) starts with `text/`, ends with `/json`, `+json`, `/xml`, `+xml`, `/yaml` or `+yaml`, +is `application/x-www-form-urlencoded`, or if the header declares a `charset` parameter. + +Instrumentations that implement request body recording MUST NOT intentionally introduce side effects such as changing stream position or closing body stream independently from the +application. + +When body is recorded, the instrumentation SHOULD record part of the body that was sent or received at the time HTTP call has ended. +The value MUST be either a string or a byte array. Instrumentations MUST NOT record a parsed or otherwise structured representation of the body, +and MUST NOT base64-encode binary content into a string value. + +**[12] `http.request.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information. The `User-Agent` header is already captured in the `user_agent.original` attribute. @@ -291,7 +322,33 @@ Examples: - A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` SHOULD be recorded as the `http.request.header.x-forwarded-for` 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. -**[12] `http.response.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. +**[13] `http.response.body.content`:** Captured value MAY be limited in size and thus value is expected to be truncated in many cases. +When an instrumentation applies a byte-based limit while capturing the body as a string, it SHOULD truncate on a character +boundary so that the recorded value remains valid text. + +Instrumentations MUST NOT capture this attribute by default and MAY provide an option to enable it. + +> [!WARNING] +> This attribute may contain sensitive information. + +When instrumentations record body, they SHOULD capture the body as string whenever possible as it makes it easier to use in human-readable form, +also it allows to implement sanitization if needed. + +Textual content is typically detected based on the [Content-Type](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-type) header using heuristics +such as checking if the type/subtype (compared case-insensitively, ignoring any parameters) starts with `text/`, ends with `/json`, `+json`, `/xml`, `+xml`, `/yaml` or `+yaml`, +is `application/x-www-form-urlencoded`, or if the header declares a `charset` parameter. + +Instrumentations that implement response body recording MUST NOT intentionally introduce side effects such as changing stream position or closing body stream independently from the +application. + +When body is recorded, the instrumentation SHOULD record part of the body that was sent or received at the time HTTP call has ended. +Note that HTTP client spans [SHOULD end sometime after the response headers are fully read](/docs/http/http-spans.md#http-client-span-duration), +which may or may not include reading the response body, so on client spans this attribute is often absent or holds only part of the body. + +The value MUST be either a string or a byte array. Instrumentations MUST NOT record a parsed or otherwise structured representation of the body, +and MUST NOT base64-encode binary content into a string value. + +**[14] `http.response.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information. Users MAY explicitly configure instrumentations to capture them even though it is not recommended. @@ -307,11 +364,11 @@ Examples: - A header `My-custom-header: abc, def` header SHOULD be recorded as the `http.response.header.my-custom-header` attribute with value `["abc", "def"]` or `["abc, def"]` depending on the HTTP library. -**[13] `network.transport`:** Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible. +**[15] `network.transport`:** Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible. -**[14] `url.template`:** 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. +**[16] `url.template`:** 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. -**[15] `user_agent.synthetic.type`:** 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. +**[17] `user_agent.synthetic.type`:** 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. The following attributes can be important for making sampling decisions and SHOULD be provided **at span creation time** (if provided at all): @@ -485,16 +542,18 @@ This span represents an inbound HTTP request. | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Name of the local HTTP server that received the request. [13] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | | [`user_agent.original`](/docs/registry/attributes/user-agent.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Value of the [HTTP User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) header sent by the client. | `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` | | [`client.port`](/docs/registry/attributes/client.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | int | The port of whichever client was captured in `client.address`. [14] | `65123` | +| [`http.request.body.content`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | any | The content of the HTTP request body, with any content coding indicated by [Content-Encoding](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding) removed, captured as a string when the request content is textual or as byte array otherwise. [15] | `Hello world!`; `{"foo": "bar"}` | | [`http.request.body.size`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | int | 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. | `3495` | -| [`http.request.header.`](/docs/registry/attributes/http.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string[] | HTTP request headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [15] | `["application/json"]`; `["1.2.3.4", "1.2.3.5"]` | +| [`http.request.header.`](/docs/registry/attributes/http.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string[] | HTTP request headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [16] | `["application/json"]`; `["1.2.3.4", "1.2.3.5"]` | | [`http.request.size`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | int | 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. | `1437` | +| [`http.response.body.content`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | any | The content of the HTTP response body, with any content coding indicated by [Content-Encoding](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding) removed, captured as a string when the response content is textual or as byte array otherwise. [17] | `Hello world!`; `{"foo": "bar"}` | | [`http.response.body.size`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | int | 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. | `3495` | -| [`http.response.header.`](/docs/registry/attributes/http.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string[] | HTTP response headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [16] | `["application/json"]`; `["abc", "def"]` | +| [`http.response.header.`](/docs/registry/attributes/http.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string[] | HTTP response headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [18] | `["application/json"]`; `["abc", "def"]` | | [`http.response.size`](/docs/registry/attributes/http.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | int | 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. | `1437` | | [`network.local.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string | Local socket address. Useful in case of a multi-IP host. | `10.1.2.80`; `/tmp/my.sock` | | [`network.local.port`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | int | Local socket port. Useful in case of a multi-port host. | `65123` | -| [`network.transport`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string | [OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication). [17] | `tcp`; `udp` | -| [`user_agent.synthetic.type`](/docs/registry/attributes/user-agent.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string | Specifies the category of synthetic traffic, such as tests or bots. [18] | `bot`; `test` | +| [`network.transport`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string | [OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication). [19] | `tcp`; `udp` | +| [`user_agent.synthetic.type`](/docs/registry/attributes/user-agent.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string | Specifies the category of synthetic traffic, such as tests or bots. [20] | `bot`; `test` | **[1] `http.request.method`:** HTTP request method value SHOULD be "known" to the instrumentation. By default, this convention defines "known" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods), @@ -567,9 +626,15 @@ Query string values for the following keys SHOULD be redacted by default and rep * [`X-Amz-Signature`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Credential`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Security-Token`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) +* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/developerguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth) +* [`Signature`](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html) * [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token) * [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls) +Several of these keys are used by more than one service or signing scheme. Each link +points to one representative usage rather than an exhaustive list, and does not narrow +the scope of the key to the linked service or signing scheme. + This list is subject to change over time. Matching of query parameter keys against the sensitive list SHOULD be case-sensitive. @@ -592,7 +657,30 @@ When a query string value is redacted, the query string key SHOULD still be pres **[14] `client.port`:** 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's available. -**[15] `http.request.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. +**[15] `http.request.body.content`:** Captured value MAY be limited in size and thus value is expected to be truncated in many cases. +When an instrumentation applies a byte-based limit while capturing the body as a string, it SHOULD truncate on a character +boundary so that the recorded value remains valid text. + +Instrumentations MUST NOT capture this attribute by default and MAY provide an option to enable it. + +> [!WARNING] +> This attribute may contain sensitive information. + +When instrumentations record body, they SHOULD capture the body as string whenever possible as it makes it easier to use in human-readable form, +also it allows to implement sanitization if needed. + +Textual content is typically detected based on the [Content-Type](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-type) header using heuristics +such as checking if the type/subtype (compared case-insensitively, ignoring any parameters) starts with `text/`, ends with `/json`, `+json`, `/xml`, `+xml`, `/yaml` or `+yaml`, +is `application/x-www-form-urlencoded`, or if the header declares a `charset` parameter. + +Instrumentations that implement request body recording MUST NOT intentionally introduce side effects such as changing stream position or closing body stream independently from the +application. + +When body is recorded, the instrumentation SHOULD record part of the body that was sent or received at the time HTTP call has ended. +The value MUST be either a string or a byte array. Instrumentations MUST NOT record a parsed or otherwise structured representation of the body, +and MUST NOT base64-encode binary content into a string value. + +**[16] `http.request.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information. The `User-Agent` header is already captured in the `user_agent.original` attribute. @@ -609,7 +697,33 @@ Examples: - A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` SHOULD be recorded as the `http.request.header.x-forwarded-for` 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. -**[16] `http.response.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. +**[17] `http.response.body.content`:** Captured value MAY be limited in size and thus value is expected to be truncated in many cases. +When an instrumentation applies a byte-based limit while capturing the body as a string, it SHOULD truncate on a character +boundary so that the recorded value remains valid text. + +Instrumentations MUST NOT capture this attribute by default and MAY provide an option to enable it. + +> [!WARNING] +> This attribute may contain sensitive information. + +When instrumentations record body, they SHOULD capture the body as string whenever possible as it makes it easier to use in human-readable form, +also it allows to implement sanitization if needed. + +Textual content is typically detected based on the [Content-Type](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-type) header using heuristics +such as checking if the type/subtype (compared case-insensitively, ignoring any parameters) starts with `text/`, ends with `/json`, `+json`, `/xml`, `+xml`, `/yaml` or `+yaml`, +is `application/x-www-form-urlencoded`, or if the header declares a `charset` parameter. + +Instrumentations that implement response body recording MUST NOT intentionally introduce side effects such as changing stream position or closing body stream independently from the +application. + +When body is recorded, the instrumentation SHOULD record part of the body that was sent or received at the time HTTP call has ended. +Note that HTTP client spans [SHOULD end sometime after the response headers are fully read](/docs/http/http-spans.md#http-client-span-duration), +which may or may not include reading the response body, so on client spans this attribute is often absent or holds only part of the body. + +The value MUST be either a string or a byte array. Instrumentations MUST NOT record a parsed or otherwise structured representation of the body, +and MUST NOT base64-encode binary content into a string value. + +**[18] `http.response.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information. Users MAY explicitly configure instrumentations to capture them even though it is not recommended. @@ -625,9 +739,9 @@ Examples: - A header `My-custom-header: abc, def` header SHOULD be recorded as the `http.response.header.my-custom-header` attribute with value `["abc", "def"]` or `["abc, def"]` depending on the HTTP library. -**[17] `network.transport`:** Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible. +**[19] `network.transport`:** Generally `tcp` for `HTTP/1.0`, `HTTP/1.1`, and `HTTP/2`. Generally `udp` for `HTTP/3`. Other obscure implementations are possible. -**[18] `user_agent.synthetic.type`:** 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. +**[20] `user_agent.synthetic.type`:** 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. The following attributes can be important for making sampling decisions and SHOULD be provided **at span creation time** (if provided at all): @@ -865,5 +979,5 @@ Span name: `POST /uploads/:document_id`. | `http.response.status_code` | `201` | | `error.type` | `WebSocketDisconnect` | -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status -[SpanProcessor]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/sdk.md#span-processor +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ +[SpanProcessor]: https://opentelemetry.io/docs/specs/otel/trace/sdk/#span-processor diff --git a/docs/messaging/README.md b/docs/messaging/README.md index 4c16ff1ce1..6f4d259b74 100644 --- a/docs/messaging/README.md +++ b/docs/messaging/README.md @@ -53,4 +53,4 @@ Technology specific semantic conventions are defined for the following messaging * [Azure Service Bus](azure-messaging.md#azure-service-bus): Semantic Conventions for *Azure Service Bus*. * [Azure Event Hubs](azure-messaging.md#azure-event-hubs): Semantic Conventions for *Azure Event Hubs*. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/messaging/azure-messaging.md b/docs/messaging/azure-messaging.md index 23be68241b..98504bfd27 100644 --- a/docs/messaging/azure-messaging.md +++ b/docs/messaging/azure-messaging.md @@ -2228,4 +2228,4 @@ and SHOULD be provided **at span creation time** (if provided at all): -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/messaging/gcp-pubsub.md b/docs/messaging/gcp-pubsub.md index 30bd7cf8f4..99b1cd120b 100644 --- a/docs/messaging/gcp-pubsub.md +++ b/docs/messaging/gcp-pubsub.md @@ -1085,4 +1085,4 @@ flowchart TD; | `messaging.gcp_pubsub.message.delivery_attempt` | | | | `0` | | | `messaging.gcp_pubsub.message.ack_deadline` | | | | | `0` | -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/messaging/kafka.md b/docs/messaging/kafka.md index 9bd9d37099..51061aafdb 100644 --- a/docs/messaging/kafka.md +++ b/docs/messaging/kafka.md @@ -1064,4 +1064,4 @@ flowchart LR; | `messaging.kafka.message.key` | `"myKey"` | `"myKey"` | `"myKey"` | | | `messaging.kafka.offset` | | `"12"` | `"12"` | `"12"` | -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/messaging/messaging-exceptions.md b/docs/messaging/messaging-exceptions.md index 21675249bd..3eb3cc2923 100644 --- a/docs/messaging/messaging-exceptions.md +++ b/docs/messaging/messaging-exceptions.md @@ -243,4 +243,4 @@ classify the failure. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/messaging/messaging-metrics.md b/docs/messaging/messaging-metrics.md index b9e8c79a14..03690d46f7 100644 --- a/docs/messaging/messaging-metrics.md +++ b/docs/messaging/messaging-metrics.md @@ -54,7 +54,7 @@ When this metric is reported alongside a messaging span, the metric value SHOULD This metric is [recommended][MetricRecommended]. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -384,7 +384,7 @@ When this metric is reported alongside a messaging process span, the metric valu This metric is [recommended][MetricRecommended] for both push-based message delivery and processing operations instrumented for pull-based scenarios. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -486,5 +486,5 @@ the broker doesn't have such notion, it SHOULD uniquely identify the broker. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/signal-requirement-level.md#recommended diff --git a/docs/messaging/messaging-spans.md b/docs/messaging/messaging-spans.md index fe3cd7ff51..639e27de09 100644 --- a/docs/messaging/messaging-spans.md +++ b/docs/messaging/messaging-spans.md @@ -196,7 +196,7 @@ in such a way that it cannot be changed by intermediaries. ### Span name -Messaging spans SHOULD follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#span). +Messaging spans SHOULD follow the overall [guidelines for span names](https://opentelemetry.io/docs/specs/otel/trace/api/#span). The **span name** SHOULD be `{messaging.operation.name} {destination}` (see below for the exact definition of the [`{destination}`](#destination-placeholder) placeholder). @@ -1481,4 +1481,4 @@ flowchart LR; | `messaging.message.id` | | `"a1"` | `"a2"` | | `messaging.batch.message_count` | 2 | | | -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/messaging/rabbitmq.md b/docs/messaging/rabbitmq.md index 2a26dc10de..f785c57d1e 100644 --- a/docs/messaging/rabbitmq.md +++ b/docs/messaging/rabbitmq.md @@ -680,4 +680,4 @@ and SHOULD be provided **at span creation time** (if provided at all): -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/messaging/rocketmq.md b/docs/messaging/rocketmq.md index 1850587359..67f97182c0 100644 --- a/docs/messaging/rocketmq.md +++ b/docs/messaging/rocketmq.md @@ -584,4 +584,4 @@ and SHOULD be provided **at span creation time** (if provided at all): `messaging.client.id` SHOULD be set to the client ID that is automatically generated by the Apache RocketMQ SDK. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/messaging/sns.md b/docs/messaging/sns.md index 20eace7a02..429b5cc89f 100644 --- a/docs/messaging/sns.md +++ b/docs/messaging/sns.md @@ -177,4 +177,4 @@ and SHOULD be provided **at span creation time** (if provided at all): -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/messaging/sqs.md b/docs/messaging/sqs.md index a4ea3eebdd..87fa86aaca 100644 --- a/docs/messaging/sqs.md +++ b/docs/messaging/sqs.md @@ -487,4 +487,4 @@ and SHOULD be provided **at span creation time** (if provided at all): -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/mobile/README.md b/docs/mobile/README.md index 20b88b5a2c..e8cc59611d 100644 --- a/docs/mobile/README.md +++ b/docs/mobile/README.md @@ -12,4 +12,4 @@ Semantic conventions for the mobile platform are defined for the following signa * [Mobile Events](mobile-events.md) : Semantic Conventions for mobile events in *logs*. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/mobile/mobile-events.md b/docs/mobile/mobile-events.md index 1b01facdb3..f96bbf81eb 100644 --- a/docs/mobile/mobile-events.md +++ b/docs/mobile/mobile-events.md @@ -76,4 +76,4 @@ The `android.app.state` and `ios.app.state` fields are mutually exclusive and MU -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/nfs/README.md b/docs/nfs/README.md index 7299f8255f..4d44803004 100644 --- a/docs/nfs/README.md +++ b/docs/nfs/README.md @@ -10,4 +10,4 @@ Semantic conventions for NFS are defined for the following signals: * [NFS Metrics](nfs-metrics.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/nfs/nfs-metrics.md b/docs/nfs/nfs-metrics.md index d6e40fe7ea..ffbd943646 100644 --- a/docs/nfs/nfs-metrics.md +++ b/docs/nfs/nfs-metrics.md @@ -468,4 +468,4 @@ This metric is [recommended][MetricRecommended]. [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/non-normative/compatibility/grpc.md b/docs/non-normative/compatibility/grpc.md index d98e287bc3..fbb85b06c6 100644 --- a/docs/non-normative/compatibility/grpc.md +++ b/docs/non-normative/compatibility/grpc.md @@ -52,11 +52,11 @@ and the [OpenTelemetry conventions](/docs/rpc/rpc-metrics.md) for details. | gRPC attribute | OpenTelemetry attribute(s) | Conversion comments | | :----------------- | :--------------------------------- | :------------------- | | `grpc.method` | `rpc.method` | gRPC -> OTel: When the value is `other`, replace it with `_OTHER`
OTel -> gRPC: When the value is `_OTHER`, replace it with `other` | -| `grpc.status` | `rpc.response.status_code` | | +| `grpc.status` | `rpc.status_code` | | | `grpc.target` | | gRPC -> OTel: Drop
OTel -> gRPC: Set `grpc.target` to `{server.address}[:{server.port}]` | | | `server.address` and `server.port` | gRPC -> OTel: Parse the address and port from `grpc.target`
OTel -> gRPC: Drop | | | `rpc.system.name` | gRPC -> OTel: Set to `grpc`
OTel -> gRPC: Drop | -| | `error.type` | gRPC -> OTel: Set to `rpc.response.status_code` when it indicates an error (see [gRPC OpenTelemetry conventions](/docs/rpc/grpc.md))
OTel -> gRPC: Drop | +| | `error.type` | gRPC -> OTel: Set to `rpc.status_code` when it indicates an error (see [gRPC OpenTelemetry conventions](/docs/rpc/grpc.md))
OTel -> gRPC: Drop | ## Spans @@ -75,11 +75,11 @@ per-call server span. | Property | gRPC | OpenTelemetry | Conversion comments | | :---------------------- | :--------------------------------------------------------------- | :--------------------------------------------------------------------------- | :-------------------------------------------------------- | | Span name | `Sent.{method name}` (client)
`Recv.{method name}` (server)
Note: The gRPC span name *may be* of high cardinality in edge cases. | `{rpc.method}` | gRPC -> OTel: Remove the `Sent.` or `Recv.` prefix
OTel -> gRPC: Add the prefix based on the span kind | -| Span status code | `ERROR` when the response status code is not `OK` | `ERROR` for specific error status codes (see the [gRPC OpenTelemetry conventions](/docs/rpc/grpc.md)) | gRPC -> OTel: Parse `rpc.response.status_code` from the status description and set the span status code accordingly
OTel -> gRPC: Set based on `rpc.response.status_code`
| +| Span status code | `ERROR` when the response status code is not `OK` | `ERROR` for specific error status codes (see the [gRPC OpenTelemetry conventions](/docs/rpc/grpc.md)) | gRPC -> OTel: Parse `rpc.status_code` from the status description and set the span status code accordingly
OTel -> gRPC: Set based on `rpc.status_code`
| | Span status description | Code and description (e.g., `UNAVAILABLE, unable to resolve host`)| Description only (the error code is recorded separately) | | | Attributes | | `rpc.system.name` | gRPC -> OTel: set to `grpc`
OTel -> gRPC: drop | | | | `rpc.method` | gRPC -> OTel: parse from the span name
OTel -> gRPC: drop | -| | | `rpc.response.status_code` | gRPC -> OTel: parse from the status description
OTel -> gRPC: drop | +| | | `rpc.status_code` | gRPC -> OTel: parse from the status description
OTel -> gRPC: drop | ### Additional attributes diff --git a/docs/non-normative/rpc-migration.md b/docs/non-normative/rpc-migration.md index 7081f8af05..f73137aa64 100644 --- a/docs/non-normative/rpc-migration.md +++ b/docs/non-normative/rpc-migration.md @@ -57,8 +57,8 @@ TODO (latest). | `rpc.service` | [#3223](https://github.com/open-telemetry/semantic-conventions/pull/3223) | Removed, integrated into `rpc.method` | | `network.transport` | [#3350](https://github.com/open-telemetry/semantic-conventions/pull/3350) | Removed | | `network.type` | [#2857](https://github.com/open-telemetry/semantic-conventions/pull/2857) | Removed | -| `rpc.grpc.status_code` → `rpc.response.status_code` | [#2920](https://github.com/open-telemetry/semantic-conventions/pull/2920) | Changed from int to string (e.g., `0` → `"OK"`) | -| `rpc.connect_rpc.error_code` → `rpc.response.status_code` | [#2920](https://github.com/open-telemetry/semantic-conventions/pull/2920) | | +| `rpc.grpc.status_code` → `rpc.status_code` | [#2920](https://github.com/open-telemetry/semantic-conventions/pull/2920), [#3921](https://github.com/open-telemetry/semantic-conventions/pull/3921) | Changed from int to string (e.g., `0` → `"OK"`) | +| `rpc.connect_rpc.error_code` → `rpc.status_code` | [#2920](https://github.com/open-telemetry/semantic-conventions/pull/2920), [#3921](https://github.com/open-telemetry/semantic-conventions/pull/3921) | | | `rpc.grpc.request.metadata.` | [#3169](https://github.com/open-telemetry/semantic-conventions/pull/3169) | Replaced by `rpc.request.metadata.` | | `rpc.grpc.response.metadata.` | [#3169](https://github.com/open-telemetry/semantic-conventions/pull/3169) | Replaced by `rpc.response.metadata.` | | `rpc.connect_rpc.request.metadata.` | [#3169](https://github.com/open-telemetry/semantic-conventions/pull/3169) | Replaced by `rpc.request.metadata.` | @@ -117,7 +117,7 @@ Metric changes: | `network.type` | [#2857](https://github.com/open-telemetry/semantic-conventions/pull/2857) | Removed | | `server.address` | [#3197](https://github.com/open-telemetry/semantic-conventions/pull/3197) | Changed from Recommended to Opt-In | | `server.port` | [#3197](https://github.com/open-telemetry/semantic-conventions/pull/3197) | Changed from Recommended to Opt-In | -| New: `rpc.response.status_code` | [#2920](https://github.com/open-telemetry/semantic-conventions/pull/2920) | | +| New: `rpc.status_code` | [#2920](https://github.com/open-telemetry/semantic-conventions/pull/2920), [#3921](https://github.com/open-telemetry/semantic-conventions/pull/3921) | | | New: `error.type` | [#2852](https://github.com/open-telemetry/semantic-conventions/pull/2852) | | @@ -149,7 +149,7 @@ Metric changes: | `network.type` | [#2857](https://github.com/open-telemetry/semantic-conventions/pull/2857) | Removed | | `server.address` | [#3197](https://github.com/open-telemetry/semantic-conventions/pull/3197) | Changed from Recommended to Required | | `server.port` | [#3197](https://github.com/open-telemetry/semantic-conventions/pull/3197) | Changed from Recommended to Conditionally Required | -| New: `rpc.response.status_code` | [#2920](https://github.com/open-telemetry/semantic-conventions/pull/2920) | | +| New: `rpc.status_code` | [#2920](https://github.com/open-telemetry/semantic-conventions/pull/2920), [#3921](https://github.com/open-telemetry/semantic-conventions/pull/3921) | | | New: `error.type` | [#2852](https://github.com/open-telemetry/semantic-conventions/pull/2852) | | diff --git a/docs/object-stores/README.md b/docs/object-stores/README.md index 0decbca90f..713302519f 100644 --- a/docs/object-stores/README.md +++ b/docs/object-stores/README.md @@ -12,4 +12,4 @@ The following technology specific semantic conventions are defined for object st * [AWS S3](s3.md): Semantic Conventions for *AWS S3*. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/object-stores/s3.md b/docs/object-stores/s3.md index 4815876772..7a4a3aa15e 100644 --- a/docs/object-stores/s3.md +++ b/docs/object-stores/s3.md @@ -102,4 +102,4 @@ This applies in particular to the following operations: -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/otel/README.md b/docs/otel/README.md index 209b40aebf..bb116708df 100644 --- a/docs/otel/README.md +++ b/docs/otel/README.md @@ -12,4 +12,4 @@ Semantic conventions are defined for the following signals: * [Metrics](sdk-metrics.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/otel/sdk-metrics.md b/docs/otel/sdk-metrics.md index f726dae3f3..b1749fddfa 100644 --- a/docs/otel/sdk-metrics.md +++ b/docs/otel/sdk-metrics.md @@ -264,14 +264,20 @@ This metric is [recommended][MetricRecommended]. **[1]:** For successful processing, `error.type` MUST NOT be set. For failed processing, `error.type` MUST contain the failure cause. SDK Batching Span Processors MUST use `queue_full` as the value of `error.type` for spans dropped due to a full queue. -SDK Span Processors MUST use `already_shutdown` as the value of `error.type` for spans dropped because the processor has already been shut down. -For 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. +If a processor reports a span dropped because it has already been shut down, `error.type` MUST be `already_shutdown`. +Whether and when a processor drops such spans is governed by the SDK specification, not by this metric. +For the SDK Simple and Batching Span Processors, a span MUST be counted as successfully processed at the point the processor +invokes the export operation. For batching processors, all spans in the batch passed to the exporter are counted at that point; +spans accepted into the processor's queue but not yet passed to the exporter have not been processed. +Implementations MUST NOT delay this count until the export operation concludes, and the outcome of the export operation, +including an immediate failure of the invocation itself, MUST NOT affect this metric. +Export outcomes are reported by `otel.sdk.exporter.span.exported`. **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | A low-cardinality description of the failure reason. [1] | `queue_full`; `already_shutdown` | +| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if and only if an error has occurred. | string | A low-cardinality description of the failure reason. [1] | `queue_full`; `already_shutdown` | | [`otel.component.name`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance. [2] | `otlp_grpc_span_exporter/0`; `custom-name` | | [`otel.component.type`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name identifying the type of the OpenTelemetry component. [3] | `batching_span_processor`; `com.example.MySpanExporter` | @@ -450,7 +456,7 @@ and `error.type` reflects the cause of the final attempt. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Describes a class of error the operation ended with. [1] | `rejected`; `timeout`; `500`; `java.net.UnknownHostException` | +| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if and only if an error has occurred. | string | Describes a class of error the operation ended with. [1] | `rejected`; `timeout`; `500`; `java.net.UnknownHostException` | | [`otel.component.name`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance. [2] | `otlp_grpc_span_exporter/0`; `custom-name` | | [`otel.component.type`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name identifying the type of the OpenTelemetry component. [3] | `batching_span_processor`; `com.example.MySpanExporter` | | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when applicable | string | Server domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name. [4] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | @@ -551,7 +557,13 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `otel.sdk.log.created` | Counter | `{log_record}` | The number of logs submitted to enabled SDK Loggers. | ![Development](https://img.shields.io/badge/-development-blue) | | +| `otel.sdk.log.created` | Counter | `{log_record}` | The number of log records submitted to an enabled `Logger`. [1] | ![Development](https://img.shields.io/badge/-development-blue) | | + +**[1]:** In OpenTelemetry SDKs a `Logger` is enabled by default, and can be disabled via configuration i.e. `LoggerConfig.enabled` = `false` when supported; +a disabled `Logger` is a No-op: emitting to it has no effect, so its records are not counted. +Every log record submitted to an enabled `Logger` is counted, even if it is later filtered or dropped within the SDK +(e.g. by minimum severity or trace-based rules, or by a processor or the export pipeline), making this metric the top of the log delivery funnel. +Records not submitted to the SDK are not counted (e.g. a caller that skips calling `Emit()` based on an `Enabled()` check, or an upstream logging library that filters first). @@ -704,15 +716,20 @@ This metric is [recommended][MetricRecommended]. **[1]:** For successful processing, `error.type` MUST NOT be set. For failed processing, `error.type` MUST contain the failure cause. SDK Batching Log Record Processors MUST use `queue_full` as the value of `error.type` for log records dropped due to a full queue. -SDK Log Record Processors MUST use `already_shutdown` as the value of `error.type` for log records dropped because the processor has already been shut down. -For 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, -not when the corresponding export call has finished. +If a processor reports a log record dropped because it has already been shut down, `error.type` MUST be `already_shutdown`. +Whether and when a processor drops such log records is governed by the SDK specification, not by this metric. +For the SDK Simple and Batching Log Record Processors, a log record MUST be counted as successfully processed at the point the +processor invokes the export operation. For batching processors, all log records in the batch passed to the exporter are counted +at that point; log records accepted into the processor's queue but not yet passed to the exporter have not been processed. +Implementations MUST NOT delay this count until the export operation concludes, and the outcome of the export operation, +including an immediate failure of the invocation itself, MUST NOT affect this metric. +Export outcomes are reported by `otel.sdk.exporter.log.exported`. **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | A low-cardinality description of the failure reason. [1] | `queue_full`; `already_shutdown` | +| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if and only if an error has occurred. | string | A low-cardinality description of the failure reason. [1] | `queue_full`; `already_shutdown` | | [`otel.component.name`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance. [2] | `otlp_grpc_span_exporter/0`; `custom-name` | | [`otel.component.type`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name identifying the type of the OpenTelemetry component. [3] | `batching_span_processor`; `com.example.MySpanExporter` | @@ -891,7 +908,7 @@ and `error.type` reflects the cause of the final attempt. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Describes a class of error the operation ended with. [1] | `rejected`; `timeout`; `500`; `java.net.UnknownHostException` | +| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if and only if an error has occurred. | string | Describes a class of error the operation ended with. [1] | `rejected`; `timeout`; `500`; `java.net.UnknownHostException` | | [`otel.component.name`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance. [2] | `otlp_grpc_span_exporter/0`; `custom-name` | | [`otel.component.type`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name identifying the type of the OpenTelemetry component. [3] | `batching_span_processor`; `com.example.MySpanExporter` | | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when applicable | string | Server domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name. [4] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | @@ -1078,7 +1095,7 @@ and `error.type` reflects the cause of the final attempt. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Describes a class of error the operation ended with. [1] | `rejected`; `timeout`; `500`; `java.net.UnknownHostException` | +| [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if and only if an error has occurred. | string | Describes a class of error the operation ended with. [1] | `rejected`; `timeout`; `500`; `java.net.UnknownHostException` | | [`otel.component.name`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance. [2] | `otlp_grpc_span_exporter/0`; `custom-name` | | [`otel.component.type`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name identifying the type of the OpenTelemetry component. [3] | `batching_span_processor`; `com.example.MySpanExporter` | | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when applicable | string | Server domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name. [4] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | @@ -1172,7 +1189,7 @@ E.g. for Java the fully qualified classname SHOULD be used in this case. This metric is [recommended][MetricRecommended]. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) with a single bucket with no boundaries. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) with a single bucket with no boundaries. @@ -1276,7 +1293,7 @@ E.g. for Java the fully qualified classname SHOULD be used in this case. This metric is [recommended][MetricRecommended]. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) with a single bucket with no boundaries. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) with a single bucket with no boundaries. @@ -1302,7 +1319,7 @@ covering the wall-clock duration from the start of the first attempt through the | [`http.response.status_code`](/docs/registry/attributes/http.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when applicable | int | The HTTP status code of the last HTTP request performed in scope of this export call. | `200` | | [`otel.component.name`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance. [2] | `otlp_grpc_span_exporter/0`; `custom-name` | | [`otel.component.type`](/docs/registry/attributes/otel.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A name identifying the type of the OpenTelemetry component. [3] | `otlp_grpc_span_exporter`; `com.example.MySpanExporter` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` when applicable | string | The gRPC status code of the last gRPC request performed in scope of this export call. [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` when applicable | string | The gRPC status code of the last gRPC request performed in scope of this export call. [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when applicable | string | Server domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name. [5] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | | [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when applicable | int | Server port number. [6] | `80`; `8080`; `443` | @@ -1349,8 +1366,8 @@ These values will therefore be reused in the case of an application restart. **[3] `otel.component.type`:** If none of the standardized values apply, implementations SHOULD use the language-defined name of the type. E.g. for Java the fully qualified classname SHOULD be used in this case. -**[4] `rpc.response.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. -Semantic conventions for individual RPC frameworks SHOULD document what `rpc.response.status_code` means in the context of that system and which values are considered to represent errors. +**[4] `rpc.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. +Semantic conventions for individual RPC frameworks SHOULD document what `rpc.status_code` means in the context of that system and which values are considered to represent errors. **[5] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available. @@ -1391,5 +1408,5 @@ Semantic conventions for individual RPC frameworks SHOULD document what `rpc.res -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/registry/attributes/client.md b/docs/registry/attributes/client.md index b1f1750fdb..e444ec8c6d 100644 --- a/docs/registry/attributes/client.md +++ b/docs/registry/attributes/client.md @@ -5,8 +5,6 @@ ## Client Attributes -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't 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. - **Attributes:** | Key | Stability | Value Type | Description | Example Values | diff --git a/docs/registry/attributes/cloud.md b/docs/registry/attributes/cloud.md index 7912d751ac..0ec8993012 100644 --- a/docs/registry/attributes/cloud.md +++ b/docs/registry/attributes/cloud.md @@ -80,6 +80,7 @@ The following well-known definitions MUST be used if you set this attribute and | `ibm_cloud_openshift` | Red Hat OpenShift on IBM Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `oracle_cloud_compute` | Compute on Oracle Cloud Infrastructure (OCI) | ![Development](https://img.shields.io/badge/-development-blue) | | `oracle_cloud_oke` | Kubernetes Engine (OKE) on Oracle Cloud Infrastructure (OCI) | ![Development](https://img.shields.io/badge/-development-blue) | +| `scaleway_cloud_compute` | Compute on Scaleway Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud_cvm` | Tencent Cloud Cloud Virtual Machine (CVM) | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud_eks` | Tencent Cloud Elastic Kubernetes Service (EKS) | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud_scf` | Tencent Cloud Serverless Cloud Function (SCF) | ![Development](https://img.shields.io/badge/-development-blue) | @@ -100,5 +101,6 @@ The following well-known definitions MUST be used if you set this attribute and | `hetzner` | Hetzner | ![Development](https://img.shields.io/badge/-development-blue) | | `ibm_cloud` | IBM Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `oracle_cloud` | Oracle Cloud Infrastructure (OCI) | ![Development](https://img.shields.io/badge/-development-blue) | +| `scaleway_cloud` | Scaleway Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud` | Tencent Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `vultr` | Vultr | ![Development](https://img.shields.io/badge/-development-blue) | diff --git a/docs/registry/attributes/db.md b/docs/registry/attributes/db.md index 8b69ca23de..404b0f786a 100644 --- a/docs/registry/attributes/db.md +++ b/docs/registry/attributes/db.md @@ -37,8 +37,9 @@ The collection name SHOULD NOT be extracted from `db.query.text`, when the database system supports query text with multiple collections in non-batch operations. -For batch operations, if the individual operations are known to have the same -collection name then that collection name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.collection.name` when executed as non-batch operations, +then that collection name SHOULD be used. **[2] `db.namespace`:** 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. Semantic conventions for individual database systems SHOULD document what `db.namespace` means in the context of that system. @@ -77,9 +78,10 @@ in non-batch operations. If spaces can occur in the operation name, multiple consecutive spaces SHOULD be normalized to a single space. -For batch operations, if the individual operations are known to have the same operation name -then that operation name SHOULD be used prepended by `BATCH `, -otherwise `db.operation.name` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.operation.name` when executed as non-batch operations, +then that operation name SHOULD be used prepended by `BATCH `. +Otherwise, `db.operation.name` SHOULD be `BATCH` or some other database system specific term if more applicable. **[5] `db.operation.parameter.`:** For example, a client-side maximum number of rows to read from the database @@ -122,13 +124,14 @@ that support query parsing SHOULD generate a summary following [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. -For batch operations, if the individual operations are known to have the same query summary -then that query summary SHOULD be used prepended by `BATCH `, -otherwise `db.query.summary` SHOULD be `BATCH` or some other database +For batch operations, if the individual operations would all have the same +`db.query.summary` when executed as non-batch operations, +then that query summary SHOULD be used prepended by `BATCH `. +Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. **[8] `db.query.text`:** For sanitization see [Sanitization of `db.query.text`](/docs/db/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. +For batch operations, if the individual operations would all have the same `db.query.text` when executed as non-batch operations, 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. Parameterized 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. **[9] `db.response.status_code`:** 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. @@ -137,8 +140,9 @@ Semantic conventions for individual database systems SHOULD document what `db.re **[10] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. -For batch operations, if the individual operations are known to have the same -stored procedure name then that stored procedure name SHOULD be used. +For batch operations, if the individual operations would all have the same +`db.stored_procedure.name` when executed as non-batch operations, +then that stored procedure name SHOULD be used. **[11] `db.system.name`:** 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's best knowledge. diff --git a/docs/registry/attributes/destination.md b/docs/registry/attributes/destination.md index 9b9853acd8..a6051b5009 100644 --- a/docs/registry/attributes/destination.md +++ b/docs/registry/attributes/destination.md @@ -5,8 +5,6 @@ ## Destination Attributes -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't 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't expose a clear notion of client and server. - **Attributes:** | Key | Stability | Value Type | Description | Example Values | diff --git a/docs/registry/attributes/http.md b/docs/registry/attributes/http.md index 5f48f1d314..a0819c936e 100644 --- a/docs/registry/attributes/http.md +++ b/docs/registry/attributes/http.md @@ -15,19 +15,44 @@ This document defines semantic convention attributes in the HTTP namespace. | Key | Stability | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | | `http.connection.state` | ![Development](https://img.shields.io/badge/-development-blue) | string | State of the HTTP connection in the HTTP connection pool. | `active`; `idle` | +| `http.request.body.content` | ![Development](https://img.shields.io/badge/-development-blue) | any | The content of the HTTP request body, with any content coding indicated by [Content-Encoding](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding) removed, captured as a string when the request content is textual or as byte array otherwise. [1] | `Hello world!`; `{"foo": "bar"}` | | `http.request.body.size` | ![Development](https://img.shields.io/badge/-development-blue) | int | 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. | `3495` | -| `http.request.header.` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string[] | HTTP request headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [1] | `["application/json"]`; `["1.2.3.4", "1.2.3.5"]` | -| `http.request.method` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string | HTTP request method. [2] | `GET`; `POST`; `HEAD` | +| `http.request.header.` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string[] | HTTP request headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [2] | `["application/json"]`; `["1.2.3.4", "1.2.3.5"]` | +| `http.request.method` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string | HTTP request method. [3] | `GET`; `POST`; `HEAD` | | `http.request.method_original` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string | Original HTTP method sent by the client in the request line. | `GeT`; `ACL`; `foo` | -| `http.request.resend_count` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | int | The ordinal number of request resending attempt (for any reason, including redirects). [3] | `3` | +| `http.request.resend_count` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | int | The ordinal number of request resending attempt (for any reason, including redirects). [4] | `3` | | `http.request.size` | ![Development](https://img.shields.io/badge/-development-blue) | int | 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. | `1437` | +| `http.response.body.content` | ![Development](https://img.shields.io/badge/-development-blue) | any | The content of the HTTP response body, with any content coding indicated by [Content-Encoding](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding) removed, captured as a string when the response content is textual or as byte array otherwise. [5] | `Hello world!`; `{"foo": "bar"}` | | `http.response.body.size` | ![Development](https://img.shields.io/badge/-development-blue) | int | 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. | `3495` | -| `http.response.header.` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string[] | HTTP response headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [4] | `["application/json"]`; `["abc", "def"]` | +| `http.response.header.` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string[] | HTTP response headers, `` being the normalized HTTP Header name (lowercase), the value being the header values. [6] | `["application/json"]`; `["abc", "def"]` | | `http.response.size` | ![Development](https://img.shields.io/badge/-development-blue) | int | 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. | `1437` | | `http.response.status_code` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | int | [HTTP response status code](https://tools.ietf.org/html/rfc7231#section-6). | `200` | -| `http.route` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string | 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. [5] | `/users/:userID?`; `my-controller/my-action/{id?}` | +| `http.route` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string | 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. [7] | `/users/:userID?`; `my-controller/my-action/{id?}` | -**[1] `http.request.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. +**[1] `http.request.body.content`:** Captured value MAY be limited in size and thus value is expected to be truncated in many cases. +When an instrumentation applies a byte-based limit while capturing the body as a string, it SHOULD truncate on a character +boundary so that the recorded value remains valid text. + +Instrumentations MUST NOT capture this attribute by default and MAY provide an option to enable it. + +> [!WARNING] +> This attribute may contain sensitive information. + +When instrumentations record body, they SHOULD capture the body as string whenever possible as it makes it easier to use in human-readable form, +also it allows to implement sanitization if needed. + +Textual content is typically detected based on the [Content-Type](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-type) header using heuristics +such as checking if the type/subtype (compared case-insensitively, ignoring any parameters) starts with `text/`, ends with `/json`, `+json`, `/xml`, `+xml`, `/yaml` or `+yaml`, +is `application/x-www-form-urlencoded`, or if the header declares a `charset` parameter. + +Instrumentations that implement request body recording MUST NOT intentionally introduce side effects such as changing stream position or closing body stream independently from the +application. + +When body is recorded, the instrumentation SHOULD record part of the body that was sent or received at the time HTTP call has ended. +The value MUST be either a string or a byte array. Instrumentations MUST NOT record a parsed or otherwise structured representation of the body, +and MUST NOT base64-encode binary content into a string value. + +**[2] `http.request.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all request headers can be a security risk - explicit configuration helps avoid leaking sensitive information. The `User-Agent` header is already captured in the `user_agent.original` attribute. @@ -44,7 +69,7 @@ Examples: - A header `X-Forwarded-For: 1.2.3.4, 1.2.3.5` SHOULD be recorded as the `http.request.header.x-forwarded-for` 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. -**[2] `http.request.method`:** HTTP request method value SHOULD be "known" to the instrumentation. +**[3] `http.request.method`:** HTTP request method value SHOULD be "known" to the instrumentation. By default, this convention defines "known" methods as the ones listed in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods), the PATCH method defined in [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html) and 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). @@ -67,9 +92,35 @@ HTTP method names are case-sensitive and `http.request.method` attribute value M Instrumentations for specific web frameworks that consider HTTP methods to be case insensitive, SHOULD populate a canonical equivalent. Tracing instrumentations that do so, MUST also set `http.request.method_original` to the original value. -**[3] `http.request.resend_count`:** 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). +**[4] `http.request.resend_count`:** 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). + +**[5] `http.response.body.content`:** Captured value MAY be limited in size and thus value is expected to be truncated in many cases. +When an instrumentation applies a byte-based limit while capturing the body as a string, it SHOULD truncate on a character +boundary so that the recorded value remains valid text. + +Instrumentations MUST NOT capture this attribute by default and MAY provide an option to enable it. + +> [!WARNING] +> This attribute may contain sensitive information. + +When instrumentations record body, they SHOULD capture the body as string whenever possible as it makes it easier to use in human-readable form, +also it allows to implement sanitization if needed. + +Textual content is typically detected based on the [Content-Type](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-type) header using heuristics +such as checking if the type/subtype (compared case-insensitively, ignoring any parameters) starts with `text/`, ends with `/json`, `+json`, `/xml`, `+xml`, `/yaml` or `+yaml`, +is `application/x-www-form-urlencoded`, or if the header declares a `charset` parameter. + +Instrumentations that implement response body recording MUST NOT intentionally introduce side effects such as changing stream position or closing body stream independently from the +application. + +When body is recorded, the instrumentation SHOULD record part of the body that was sent or received at the time HTTP call has ended. +Note that HTTP client spans [SHOULD end sometime after the response headers are fully read](/docs/http/http-spans.md#http-client-span-duration), +which may or may not include reading the response body, so on client spans this attribute is often absent or holds only part of the body. + +The value MUST be either a string or a byte array. Instrumentations MUST NOT record a parsed or otherwise structured representation of the body, +and MUST NOT base64-encode binary content into a string value. -**[4] `http.response.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. +**[6] `http.response.header.`:** Instrumentations SHOULD require an explicit configuration of which headers are to be captured. Including all response headers can be a security risk - explicit configuration helps avoid leaking sensitive information. Users MAY explicitly configure instrumentations to capture them even though it is not recommended. @@ -85,7 +136,7 @@ Examples: - A header `My-custom-header: abc, def` header SHOULD be recorded as the `http.response.header.my-custom-header` attribute with value `["abc", "def"]` or `["abc, def"]` depending on the HTTP library. -**[5] `http.route`:** 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. +**[7] `http.route`:** 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. SHOULD include the [application root](/docs/http/http-spans.md#http-server-definitions) if there is one. A 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 diff --git a/docs/registry/attributes/network.md b/docs/registry/attributes/network.md index 00db227a6b..bdf840ae63 100644 --- a/docs/registry/attributes/network.md +++ b/docs/registry/attributes/network.md @@ -21,7 +21,7 @@ These attributes may be used for any network related operation. | `network.connection.state` | ![Development](https://img.shields.io/badge/-development-blue) | string | The state of network connection [1] | `close_wait` | | `network.connection.subtype` | ![Development](https://img.shields.io/badge/-development-blue) | string | 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 Wi-Fi connection. | `LTE` | | `network.connection.type` | ![Development](https://img.shields.io/badge/-development-blue) | string | The internet connection type. | `wifi` | -| `network.interface.name` | ![Development](https://img.shields.io/badge/-development-blue) | string | The network interface name. | `lo`; `eth0` | +| `network.interface.name` | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | string | The network interface name. | `lo`; `eth0` | | `network.io.direction` | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | string | The direction of traffic from the perspective of the observing host's physical or virtual network interface. It should not be used to represent the logical direction of a stateful connection or network flow. | `transmit` | | `network.local.address` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | string | Local address of the network connection - IP address or UNIX domain socket name. | `10.1.2.80`; `/tmp/my.sock` | | `network.local.port` | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | int | Local port number of the network connection. | `65123` | diff --git a/docs/registry/attributes/rpc.md b/docs/registry/attributes/rpc.md index 5623e6ca62..e8214a37b3 100644 --- a/docs/registry/attributes/rpc.md +++ b/docs/registry/attributes/rpc.md @@ -18,7 +18,7 @@ This document defines attributes for remote procedure calls. | `rpc.method_original` | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | | `rpc.request.metadata.` | ![Development](https://img.shields.io/badge/-development-blue) | string[] | RPC request metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [2] | `["1.2.3.4", "1.2.3.5"]` | | `rpc.response.metadata.` | ![Development](https://img.shields.io/badge/-development-blue) | string[] | RPC response metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [3] | `["attribute_value"]` | -| `rpc.response.status_code` | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| `rpc.status_code` | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | | `rpc.system.name` | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | string | The Remote Procedure Call (RPC) system. [5] | `grpc`; `dubbo`; `connectrpc` | **[1] `rpc.method`:** The method name MAY have unbounded cardinality in edge or error cases. @@ -55,8 +55,8 @@ Including all response metadata values can be a security risk - explicit configu For example, a property `my-custom-key` with value `["attribute_value"]` SHOULD be recorded as the `rpc.response.metadata.my-custom-key` attribute with value `["attribute_value"]` -**[4] `rpc.response.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. -Semantic conventions for individual RPC frameworks SHOULD document what `rpc.response.status_code` means in the context of that system and which values are considered to represent errors. +**[4] `rpc.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. +Semantic conventions for individual RPC frameworks SHOULD document what `rpc.status_code` means in the context of that system and which values are considered to represent errors. **[5] `rpc.system.name`:** The client and server RPC systems may differ for the same RPC interaction. For example, a client may use Apache Dubbo or Connect RPC to communicate with a server that uses gRPC since both protocols provide compatibility with gRPC. @@ -83,13 +83,13 @@ Deprecated rpc message attributes. | `message.id` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Deprecated, no replacement at this time. | int | Deprecated, no replacement at this time. | | | `message.type` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Deprecated, no replacement at this time. | string | Deprecated, no replacement at this time. | `SENT`; `RECEIVED` | | `message.uncompressed_size` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Deprecated, no replacement at this time. | int | Deprecated, no replacement at this time. | | -| `rpc.connect_rpc.error_code` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `rpc.response.status_code`. | string | Deprecated, use `rpc.response.status_code` attribute instead. | `cancelled`; `unknown`; `invalid_argument` | +| `rpc.connect_rpc.error_code` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `rpc.status_code`. | string | Deprecated, use `rpc.status_code` attribute instead. | `cancelled`; `unknown`; `invalid_argument` | | `rpc.connect_rpc.request.metadata.` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `rpc.request.metadata`. | string[] | Deprecated, use `rpc.request.metadata` instead. | `["1.2.3.4", "1.2.3.5"]` | | `rpc.connect_rpc.response.metadata.` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `rpc.response.metadata`. | string[] | Deprecated, use `rpc.response.metadata` instead. | `["attribute_value"]` | | `rpc.grpc.request.metadata.` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `rpc.request.metadata`. | string[] | Deprecated, use `rpc.request.metadata` instead. | `["1.2.3.4", "1.2.3.5"]` | | `rpc.grpc.response.metadata.` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `rpc.response.metadata`. | string[] | Deprecated, use `rpc.response.metadata` instead. | `["attribute_value"]` | -| `rpc.grpc.status_code` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Use string representation of the gRPC status code on the `rpc.response.status_code` attribute. | int | Deprecated, use string representation on the `rpc.response.status_code` attribute instead. | `0`; `1`; `2` | -| `rpc.jsonrpc.error_code` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Use string representation of the error code on the `rpc.response.status_code` attribute. | int | Deprecated, use string representation on the `rpc.response.status_code` attribute instead. | `-32700`; `100` | +| `rpc.grpc.status_code` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Use string representation of the gRPC status code on the `rpc.status_code` attribute. | int | Deprecated, use string representation on the `rpc.status_code` attribute instead. | `0`; `1`; `2` | +| `rpc.jsonrpc.error_code` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Use string representation of the error code on the `rpc.status_code` attribute. | int | Deprecated, use string representation on the `rpc.status_code` attribute instead. | `-32700`; `100` | | `rpc.jsonrpc.error_message` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Use the span status description when reporting JSON-RPC spans. | string | Deprecated, use the span status description when reporting JSON-RPC spans. | `Parse error`; `User already exists` | | `rpc.jsonrpc.request_id` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `jsonrpc.request.id`. | string | Deprecated, use `jsonrpc.request.id` instead. | `10`; `request-7`; `` | | `rpc.jsonrpc.version` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `jsonrpc.protocol.version`. | string | Deprecated, use `jsonrpc.protocol.version` instead. | `2.0`; `1.0` | @@ -97,6 +97,7 @@ Deprecated rpc message attributes. | `rpc.message.id` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Deprecated, no replacement at this time. | int | MUST be calculated as two different counters starting from `1` one for sent messages and one for received message. [6] | | | `rpc.message.type` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Deprecated, no replacement at this time. | string | Whether this is a received or sent message. | `SENT`; `RECEIVED` | | `rpc.message.uncompressed_size` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Deprecated, no replacement at this time. | int | Uncompressed size of the message in bytes. | | +| `rpc.response.status_code` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `rpc.status_code`. | string | Deprecated, use `rpc.status_code` instead. | `OK`; `DEADLINE_EXCEEDED`; `-32602` | | `rpc.service` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Value should be included in `rpc.method` which is expected to be a fully-qualified name. | string | Deprecated, use fully-qualified `rpc.method` instead. | `myservice.EchoService` | | `rpc.system` | ![Deprecated](https://img.shields.io/badge/-deprecated-red)
Replaced by `rpc.system.name`. | string | Deprecated, use `rpc.system.name` attribute instead. | `grpc`; `java_rmi`; `dotnet_wcf` | diff --git a/docs/registry/attributes/server.md b/docs/registry/attributes/server.md index 27c3038ea2..59bff0a0ff 100644 --- a/docs/registry/attributes/server.md +++ b/docs/registry/attributes/server.md @@ -5,8 +5,6 @@ ## Server Attributes -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't 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. - **Attributes:** | Key | Stability | Value Type | Description | Example Values | diff --git a/docs/registry/attributes/session.md b/docs/registry/attributes/session.md index fa608c6ed6..b1d7fd0cda 100644 --- a/docs/registry/attributes/session.md +++ b/docs/registry/attributes/session.md @@ -5,10 +5,6 @@ ## Session Attributes -Session is defined as the period of time encompassing all activities performed by the application and the actions executed by the end user. -Consequently, a Session is represented as a collection of Logs, Events, and Spans emitted by the Client Application throughout the Session's duration. Each Session is assigned a unique identifier, which is included as an attribute in the Logs, Events, and Spans generated during the Session's lifecycle. -When 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. - **Attributes:** | Key | Stability | Value Type | Description | Example Values | diff --git a/docs/registry/attributes/source.md b/docs/registry/attributes/source.md index 71526900e9..214b7faa58 100644 --- a/docs/registry/attributes/source.md +++ b/docs/registry/attributes/source.md @@ -5,8 +5,6 @@ ## Source Attributes -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't 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't expose a clear notion of client and server. - **Attributes:** | Key | Stability | Value Type | Description | Example Values | diff --git a/docs/registry/attributes/thread.md b/docs/registry/attributes/thread.md index 3420332776..4629e5818f 100644 --- a/docs/registry/attributes/thread.md +++ b/docs/registry/attributes/thread.md @@ -5,8 +5,6 @@ ## Thread Attributes -These attributes may be used for any operation to store information about a thread that started a span. - **Attributes:** | Key | Stability | Value Type | Description | Example Values | diff --git a/docs/registry/attributes/url.md b/docs/registry/attributes/url.md index 9110c0cea0..71871f5936 100644 --- a/docs/registry/attributes/url.md +++ b/docs/registry/attributes/url.md @@ -46,9 +46,15 @@ value `REDACTED`: * [`X-Amz-Signature`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Credential`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Security-Token`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) +* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/developerguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth) +* [`Signature`](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html) * [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token) * [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls) +Several of these keys are used by more than one service or signing scheme. Each link +points to one representative usage rather than an exhaustive list, and does not narrow +the scope of the key to the linked service or signing scheme. + This list is subject to change over time. Matching of query parameter keys against the sensitive list SHOULD be case-sensitive. @@ -77,9 +83,15 @@ Query string values for the following keys SHOULD be redacted by default and rep * [`X-Amz-Signature`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Credential`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Security-Token`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) +* [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/developerguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth) +* [`Signature`](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html) * [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token) * [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls) +Several of these keys are used by more than one service or signing scheme. Each link +points to one representative usage rather than an exhaustive list, and does not narrow +the scope of the key to the linked service or signing scheme. + This list is subject to change over time. Matching of query parameter keys against the sensitive list SHOULD be case-sensitive. diff --git a/docs/registry/entities/cloud.md b/docs/registry/entities/cloud.md index 78e2b8f95f..85e7a9a983 100644 --- a/docs/registry/entities/cloud.md +++ b/docs/registry/entities/cloud.md @@ -88,6 +88,7 @@ The following well-known definitions MUST be used if you set this attribute and | `ibm_cloud_openshift` | Red Hat OpenShift on IBM Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `oracle_cloud_compute` | Compute on Oracle Cloud Infrastructure (OCI) | ![Development](https://img.shields.io/badge/-development-blue) | | `oracle_cloud_oke` | Kubernetes Engine (OKE) on Oracle Cloud Infrastructure (OCI) | ![Development](https://img.shields.io/badge/-development-blue) | +| `scaleway_cloud_compute` | Compute on Scaleway Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud_cvm` | Tencent Cloud Cloud Virtual Machine (CVM) | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud_eks` | Tencent Cloud Elastic Kubernetes Service (EKS) | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud_scf` | Tencent Cloud Serverless Cloud Function (SCF) | ![Development](https://img.shields.io/badge/-development-blue) | @@ -108,5 +109,6 @@ The following well-known definitions MUST be used if you set this attribute and | `hetzner` | Hetzner | ![Development](https://img.shields.io/badge/-development-blue) | | `ibm_cloud` | IBM Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `oracle_cloud` | Oracle Cloud Infrastructure (OCI) | ![Development](https://img.shields.io/badge/-development-blue) | +| `scaleway_cloud` | Scaleway Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud` | Tencent Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `vultr` | Vultr | ![Development](https://img.shields.io/badge/-development-blue) | diff --git a/docs/resource/README.md b/docs/resource/README.md index 2f3c217c3e..68b8915a84 100644 --- a/docs/resource/README.md +++ b/docs/resource/README.md @@ -6,7 +6,7 @@ linkTitle: Resource **Status**: [Mixed][DocumentStatus] -This document defines standard attributes for resources. These attributes are typically used in the [Resource](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/resource/sdk.md) and are also recommended to be used anywhere else where there is a need to describe a resource in a consistent manner. The majority of these attributes are inherited from +This document defines standard attributes for resources. These attributes are typically used in the [Resource](https://opentelemetry.io/docs/specs/otel/resource/sdk/) and are also recommended to be used anywhere else where there is a need to describe a resource in a consistent manner. The majority of these attributes are inherited from [OpenCensus Resource standard](https://github.com/census-instrumentation/opencensus-specs/blob/master/resource/StandardResources.md). @@ -53,14 +53,14 @@ Given their significance some resource attributes are treated specifically as de ### Semantic attributes with dedicated environment variable These are the attributes which MAY be configurable via a dedicated environment variable -as specified in [OpenTelemetry Environment Variable Specification](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/configuration/sdk-environment-variables.md): +as specified in [OpenTelemetry Environment Variable Specification](https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/): - [`service.name`](#service) ### Semantic attributes with SDK-provided default value These are the attributes which MUST be provided by the SDK -as specified in the [Resource SDK specification](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/resource/sdk.md#sdk-provided-resource-attributes): +as specified in the [Resource SDK specification](https://opentelemetry.io/docs/specs/otel/resource/sdk/#sdk-provided-resource-attributes): - [`service.name`](#service) - [`telemetry.sdk` group](#telemetry-sdk) @@ -208,4 +208,4 @@ Valid cloud providers are: - [Tencent Cloud](https://www.tencentcloud.com/) (`tencent_cloud`) - [Heroku dyno](./cloud-provider/heroku.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/resource/cloud-provider/README.md b/docs/resource/cloud-provider/README.md index 1525e63e33..ef6c0e5ff9 100644 --- a/docs/resource/cloud-provider/README.md +++ b/docs/resource/cloud-provider/README.md @@ -8,4 +8,4 @@ This document defines semantic conventions for resource cloud providers. * [GCP](gcp/README.md): Semantic Conventions for Google Cloud Platform. * [Heroku](heroku.md): Semantic Conventions for Heroku. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/resource/cloud-provider/aws/README.md b/docs/resource/cloud-provider/aws/README.md index 8a8a7ffa75..822d269c75 100644 --- a/docs/resource/cloud-provider/aws/README.md +++ b/docs/resource/cloud-provider/aws/README.md @@ -25,4 +25,4 @@ Attributes that relate to an individual AWS service: - [Elastic Container Service (ECS)](./ecs.md) - [Elastic Kubernetes Service (EKS)](./eks.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/resource/cloud-provider/gcp/README.md b/docs/resource/cloud-provider/gcp/README.md index f071434386..6fa62c130f 100644 --- a/docs/resource/cloud-provider/gcp/README.md +++ b/docs/resource/cloud-provider/gcp/README.md @@ -17,4 +17,4 @@ provider (like account ID, operating system, etc), it belongs in the parent - [Compute Engine](./gce.md) - [AppHub](./apphub.md) -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/resource/cloud-provider/gcp/apphub.md b/docs/resource/cloud-provider/gcp/apphub.md index 2974f72ba4..9a2430e0d2 100644 --- a/docs/resource/cloud-provider/gcp/apphub.md +++ b/docs/resource/cloud-provider/gcp/apphub.md @@ -151,4 +151,4 @@ See [Supported Resources](https://cloud.google.com/app-hub/docs/supported-resour -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/resource/cloud-provider/gcp/cloud-run.md b/docs/resource/cloud-provider/gcp/cloud-run.md index 4fd60d23f6..0153850c07 100644 --- a/docs/resource/cloud-provider/gcp/cloud-run.md +++ b/docs/resource/cloud-provider/gcp/cloud-run.md @@ -29,4 +29,4 @@ These conventions are recommended for resources running on Cloud Run. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/resource/cloud.md b/docs/resource/cloud.md index eee7c0bcf3..e954a02799 100644 --- a/docs/resource/cloud.md +++ b/docs/resource/cloud.md @@ -88,6 +88,7 @@ The following well-known definitions MUST be used if you set this attribute and | `ibm_cloud_openshift` | Red Hat OpenShift on IBM Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `oracle_cloud_compute` | Compute on Oracle Cloud Infrastructure (OCI) | ![Development](https://img.shields.io/badge/-development-blue) | | `oracle_cloud_oke` | Kubernetes Engine (OKE) on Oracle Cloud Infrastructure (OCI) | ![Development](https://img.shields.io/badge/-development-blue) | +| `scaleway_cloud_compute` | Compute on Scaleway Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud_cvm` | Tencent Cloud Cloud Virtual Machine (CVM) | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud_eks` | Tencent Cloud Elastic Kubernetes Service (EKS) | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud_scf` | Tencent Cloud Serverless Cloud Function (SCF) | ![Development](https://img.shields.io/badge/-development-blue) | @@ -108,6 +109,7 @@ The following well-known definitions MUST be used if you set this attribute and | `hetzner` | Hetzner | ![Development](https://img.shields.io/badge/-development-blue) | | `ibm_cloud` | IBM Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `oracle_cloud` | Oracle Cloud Infrastructure (OCI) | ![Development](https://img.shields.io/badge/-development-blue) | +| `scaleway_cloud` | Scaleway Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `tencent_cloud` | Tencent Cloud | ![Development](https://img.shields.io/badge/-development-blue) | | `vultr` | Vultr | ![Development](https://img.shields.io/badge/-development-blue) | diff --git a/docs/resource/cloudfoundry.md b/docs/resource/cloudfoundry.md index ef11780acc..abaefecedc 100644 --- a/docs/resource/cloudfoundry.md +++ b/docs/resource/cloudfoundry.md @@ -206,4 +206,4 @@ should be used. The `system.instance.id` should be set to `spec.id`. -[DocumentStatus]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/document-status.md +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/resource/k8s/README.md b/docs/resource/k8s/README.md index 015685ceb4..9d1d02fee5 100644 --- a/docs/resource/k8s/README.md +++ b/docs/resource/k8s/README.md @@ -671,7 +671,7 @@ to a Pod in that Pods consume node resources and PVCs consume PV resources. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ ## Kubernetes specific guidelines diff --git a/docs/resource/k8s/openshift.md b/docs/resource/k8s/openshift.md index 0eb27f46a7..320f9f8908 100644 --- a/docs/resource/k8s/openshift.md +++ b/docs/resource/k8s/openshift.md @@ -25,4 +25,4 @@ -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/resource/process.md b/docs/resource/process.md index 2aa0113897..a43ee7b61e 100644 --- a/docs/resource/process.md +++ b/docs/resource/process.md @@ -254,4 +254,4 @@ Examples for some Ruby runtimes | MRI | `ruby` | `2.7.1` | `ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]` | | TruffleRuby | `truffleruby` | `2.6.2` | `truffleruby (Shopify) 20.0.0-dev-92ed3059, like ruby 2.6.2, GraalVM CE Native [x86_64-darwin]` | -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/resource/zos.md b/docs/resource/zos.md index e9c984c1b3..693c9bd55c 100644 --- a/docs/resource/zos.md +++ b/docs/resource/zos.md @@ -30,13 +30,15 @@ This document defines z/OS software entity and documents how to populate other e ## Host -The following table describes how to populate attributes on the `host` entity on mainframes. - +**Status:** ![Development](https://img.shields.io/badge/-development-blue) + +The host of a z/OS system. + **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | @@ -66,13 +68,15 @@ The following table describes how to populate attributes on the `host` entity on ## Operating System -The following table describes how to populate the operating system attributes on mainframes. - +**Status:** ![Development](https://img.shields.io/badge/-development-blue) + +The operating system on a z/OS system. + **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | @@ -106,13 +110,15 @@ The following table describes how to populate the operating system attributes on ## Process -The following table describes how to populate attributes on the `process` entity on mainframes. - +**Status:** ![Development](https://img.shields.io/badge/-development-blue) + +A process running on a z/OS system. + **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | diff --git a/docs/rpc/README.md b/docs/rpc/README.md index 6128668b4a..2f6ae33928 100644 --- a/docs/rpc/README.md +++ b/docs/rpc/README.md @@ -49,4 +49,4 @@ Technology specific semantic conventions are defined for the following RPC syste For help migrating from non-stable to stable conventions, see [the migration guide](../non-normative/rpc-migration.md). -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/rpc/connect-rpc.md b/docs/rpc/connect-rpc.md index 3609e275f9..3902a5d879 100644 --- a/docs/rpc/connect-rpc.md +++ b/docs/rpc/connect-rpc.md @@ -47,7 +47,7 @@ document for details on how to record span status. | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [2] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The fully-qualified logical name of the method from the RPC interface perspective. [3] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The [error code](https://connectrpc.com//docs/protocol/#error-codes) of the Connect response. [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The [error code](https://connectrpc.com//docs/protocol/#error-codes) of the Connect response. [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | | [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if available. | int | Server port number. [5] | `80`; `8080`; `443` | | [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [6] | `10.1.2.80`; `/tmp/my.sock` | | [`network.peer.port`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` If `network.peer.address` is set. | int | Peer port number of the network connection. | `65123` | @@ -60,9 +60,9 @@ document for details on how to record span status. `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -92,7 +92,7 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[4] `rpc.response.status_code`:** All status codes except `OK` SHOULD be considered errors. +**[4] `rpc.status_code`:** All status codes except `OK` SHOULD be considered errors. **[5] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. @@ -156,11 +156,11 @@ document for details on how to record span status. | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [1] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The fully-qualified logical name of the method from the RPC interface perspective. [2] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The [error code](https://connectrpc.com/docs/protocol/#error-codes) of the Connect response. [3] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | -| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If available. | string | A string identifying a group of RPC server instances request is sent to. [4] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | -| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [5] | `80`; `8080`; `443` | -| [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [6] | `10.1.2.80`; `/tmp/my.sock` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The [error code](https://connectrpc.com/docs/protocol/#error-codes) of the Connect response. [3] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [4] | `80`; `8080`; `443` | +| [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [5] | `10.1.2.80`; `/tmp/my.sock` | | [`network.peer.port`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` If `network.peer.address` is set. | int | Peer port number of the network connection. | `65123` | +| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when available. | string | A string identifying a group of RPC server instances request is sent to. [6] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | | [`rpc.request.metadata.`](/docs/registry/attributes/rpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string[] | RPC request metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [7] | `["1.2.3.4", "1.2.3.5"]` | | [`rpc.response.metadata.`](/docs/registry/attributes/rpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string[] | RPC response metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [8] | `["attribute_value"]` | @@ -168,9 +168,9 @@ document for details on how to record span status. `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -200,7 +200,7 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[3] `rpc.response.status_code`:** The following error codes SHOULD be considered errors: +**[3] `rpc.status_code`:** The following error codes SHOULD be considered errors: - `unknown` - `deadline_exceeded` @@ -209,13 +209,11 @@ RPC client stub method on the client side. - `unavailable` - `data_loss` -**[4] `server.address`:** May contain a DNS name, an endpoint and path in the service registry, local socket name or an IP address. -Semantic conventions for individual RPC systems SHOULD document how to populate this attribute. -When address is an IP address, instrumentations SHOULD NOT do a reverse DNS lookup to obtain a DNS name and SHOULD set `server.address` to the provided IP address. +**[4] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. -**[5] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. +**[5] `network.peer.address`:** If a RPC involved multiple network calls (for example retries), the last contacted address SHOULD be used. -**[6] `network.peer.address`:** If a RPC involved multiple network calls (for example retries), the last contacted address SHOULD be used. +**[6] `server.address`:** `server.address` and `server.port` describe the address the client used to reach this server, as reported by the transport or RPC framework. Instrumentations SHOULD NOT use actual network-level connection information to populate these attributes. If the address used by the client is unavailable, instrumentations SHOULD NOT set these attributes. **[7] `rpc.request.metadata.`:** Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured. Including all request metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information. @@ -255,4 +253,4 @@ Connect RPC instrumentations SHOULD collect metrics according to the general `rpc.system.name` MUST be set to `"connectrpc"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/rpc/dubbo.md b/docs/rpc/dubbo.md index 30f6d30c31..c4297b8bcd 100644 --- a/docs/rpc/dubbo.md +++ b/docs/rpc/dubbo.md @@ -37,7 +37,7 @@ This span represents an outgoing Remote Procedure Call (RPC). **Span kind** MUST be `CLIENT`. **Span status** Refer to the [Recording Errors](/docs/general/recording-errors.md) -document for details on how to record span status. See also `rpc.response.status_code` attribute +document for details on how to record span status. See also `rpc.status_code` attribute for the details on which values classify as errors. **Attributes:** @@ -45,7 +45,7 @@ for the details on which values classify as errors. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The fully-qualified logical name of the method from the RPC interface perspective. [1] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The string representation of the Dubbo response status code returned by the server or generated by the client. [2] | `OK`; `DEADLINE_EXCEEDED`; `SERVER_ERROR` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The string representation of the Dubbo response status code returned by the server or generated by the client. [2] | `OK`; `DEADLINE_EXCEEDED`; `SERVER_ERROR` | | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [3] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If available. | string | A string identifying a group of RPC server instances request is sent to. [4] | `192.168.1.100`; `api.example.com`; `zookeeper://127.0.0.1:2181/com.example.HelloService:1.0.0:testGroup` | @@ -77,7 +77,7 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[2] `rpc.response.status_code`:** All status codes except `OK` SHOULD be considered errors. +**[2] `rpc.status_code`:** All status codes except `OK` SHOULD be considered errors. Status codes reference: @@ -88,9 +88,9 @@ Status codes reference: `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -212,25 +212,25 @@ This span represents an incoming Remote Procedure Call (RPC). **Span kind** MUST be `SERVER`. **Span status** Refer to the [Recording Errors](/docs/general/recording-errors.md) -document for details on how to record span status. See also `rpc.response.status_code` attribute +document for details on how to record span status. See also `rpc.status_code` attribute for the details on which values classify as errors. **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The string representation of the Dubbo response status code returned by the server. [1] | `OK`; `SERVER_ERROR`; `SERVER_THREADPOOL_EXHAUSTED_ERROR` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The string representation of the Dubbo response status code returned by the server. [1] | `OK`; `SERVER_ERROR`; `SERVER_THREADPOOL_EXHAUSTED_ERROR` | | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [2] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The fully-qualified logical name of the method from the RPC interface perspective. [3] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | -| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If available. | string | A string identifying a group of RPC server instances request is sent to. [4] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | -| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` [5] | int | Server port number. [6] | `80`; `8080`; `443` | -| [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [7] | `10.1.2.80`; `/tmp/my.sock` | +| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` [4] | int | Server port number. [5] | `80`; `8080`; `443` | +| [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [6] | `10.1.2.80`; `/tmp/my.sock` | | [`network.peer.port`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` If `network.peer.address` is set. | int | Peer port number of the network connection. | `65123` | +| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when available. | string | A string identifying a group of RPC server instances request is sent to. [7] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | | [`rpc.request.metadata.`](/docs/registry/attributes/rpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string[] | RPC request metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [8] | `["1.2.3.4", "1.2.3.5"]` | | [`rpc.response.metadata.`](/docs/registry/attributes/rpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string[] | RPC response metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [9] | `["attribute_value"]` | -**[1] `rpc.response.status_code`:** For Dubbo2, the following status codes SHOULD be considered errors: +**[1] `rpc.status_code`:** For Dubbo2, the following status codes SHOULD be considered errors: - `SERVER_ERROR` - `SERVER_THREADPOOL_EXHAUSTED_ERROR` @@ -255,9 +255,9 @@ Status codes reference: `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -287,15 +287,13 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[4] `server.address`:** May contain a DNS name, an endpoint and path in the service registry, local socket name or an IP address. -Semantic conventions for individual RPC systems SHOULD document how to populate this attribute. -When address is an IP address, instrumentations SHOULD NOT do a reverse DNS lookup to obtain a DNS name and SHOULD set `server.address` to the provided IP address. +**[4] `server.port`:** if `server.address` is set and if the port is supported by the network transport used for communication. -**[5] `server.port`:** if `server.address` is set and if the port is supported by the network transport used for communication. +**[5] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. -**[6] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. +**[6] `network.peer.address`:** If a RPC involved multiple network calls (for example retries), the last contacted address SHOULD be used. -**[7] `network.peer.address`:** If a RPC involved multiple network calls (for example retries), the last contacted address SHOULD be used. +**[7] `server.address`:** `server.address` and `server.port` describe the address the client used to reach this server, as reported by the transport or RPC framework. Instrumentations SHOULD NOT use actual network-level connection information to populate these attributes. If the address used by the client is unavailable, instrumentations SHOULD NOT set these attributes. **[8] `rpc.request.metadata.`:** Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured. Including all request metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information. @@ -335,4 +333,4 @@ Dubbo instrumentations SHOULD collect metrics according to the general `rpc.system.name` MUST be set to `"dubbo"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/rpc/grpc.md b/docs/rpc/grpc.md index f795c43d06..6ae0f901f0 100644 --- a/docs/rpc/grpc.md +++ b/docs/rpc/grpc.md @@ -45,7 +45,7 @@ This span represents an outgoing Remote Procedure Call (RPC). **Span kind** MUST be `CLIENT`. **Span status**: refer to the [Recording Errors](/docs/general/recording-errors.md) -document for details on how to record span status. See also `rpc.response.status_code` attribute +document for details on how to record span status. See also `rpc.status_code` attribute for the details on which values classify as errors. **Attributes:** @@ -53,7 +53,7 @@ for the details on which values classify as errors. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The fully-qualified logical name of the method from the RPC interface perspective. [1] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The string representation of the [status code](https://github.com/grpc/grpc/blob/v1.75.0/doc/statuscodes.md) returned by the server or generated by the client. [2] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The string representation of the [status code](https://github.com/grpc/grpc/blob/v1.75.0/doc/statuscodes.md) returned by the server or generated by the client. [2] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Required` | string | A string identifying a group of RPC server instances request is sent to. [3] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [4] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | @@ -85,7 +85,7 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[2] `rpc.response.status_code`:** All status codes except `OK` SHOULD be considered errors. +**[2] `rpc.status_code`:** All status codes except `OK` SHOULD be considered errors. **[3] `server.address`:** Instrumentations SHOULD populate `server.address` (along with `server.port`) based on the configuration used when creating the gRPC channel and @@ -128,9 +128,9 @@ Examples: `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -193,25 +193,25 @@ This span represents an incoming Remote Procedure Call (RPC). **Span kind** MUST be `SERVER`. **Span status**: refer to the [Recording Errors](/docs/general/recording-errors.md) -document for details on how to record span status. See also `rpc.response.status_code` attribute +document for details on how to record span status. See also `rpc.status_code` attribute for the details on which values classify as errors. **Attributes:** | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The string representation of the [status code](https://github.com/grpc/grpc/blob/v1.75.0/doc/statuscodes.md) returned by the server. [1] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The string representation of the [status code](https://github.com/grpc/grpc/blob/v1.75.0/doc/statuscodes.md) returned by the server. [1] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [2] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The fully-qualified logical name of the method from the RPC interface perspective. [3] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | -| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If available. | string | A string identifying a group of RPC server instances request is sent to. [4] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | -| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [5] | `80`; `8080`; `443` | +| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` [4] | int | Server port number. [5] | `50051` | | [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [6] | `10.1.2.80`; `/tmp/my.sock` | | [`network.peer.port`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` If `network.peer.address` is set. | int | Peer port number of the network connection. | `65123` | -| [`rpc.request.metadata.`](/docs/registry/attributes/rpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string[] | RPC request metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [7] | `["1.2.3.4", "1.2.3.5"]` | -| [`rpc.response.metadata.`](/docs/registry/attributes/rpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string[] | RPC response metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [8] | `["attribute_value"]` | +| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when available. | string | A string identifying a group of RPC server instances request is sent to. [7] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | +| [`rpc.request.metadata.`](/docs/registry/attributes/rpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string[] | RPC request metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [8] | `["1.2.3.4", "1.2.3.5"]` | +| [`rpc.response.metadata.`](/docs/registry/attributes/rpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Opt-In` | string[] | RPC response metadata, `` being the normalized RPC metadata key (lowercase), the value being the metadata values. [9] | `["attribute_value"]` | -**[1] `rpc.response.status_code`:** The following status codes SHOULD be considered errors: +**[1] `rpc.status_code`:** The following status codes SHOULD be considered errors: - `UNKNOWN` - `DEADLINE_EXCEEDED` @@ -224,9 +224,9 @@ for the details on which values classify as errors. `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -256,21 +256,31 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[4] `server.address`:** May contain a DNS name, an endpoint and path in the service registry, local socket name or an IP address. -Semantic conventions for individual RPC systems SHOULD document how to populate this attribute. -When address is an IP address, instrumentations SHOULD NOT do a reverse DNS lookup to obtain a DNS name and SHOULD set `server.address` to the provided IP address. +**[4] `server.port`:** If `server.address` is set and the port is present in `:authority`. -**[5] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. +**[5] `server.port`:** Instrumentations SHOULD populate `server.port` from the port +component of the HTTP/2 `:authority` pseudo-header the client used to +reach this server. + +Instrumentations SHOULD NOT use actual network-level connection +information for this purpose. **[6] `network.peer.address`:** If a RPC involved multiple network calls (for example retries), the last contacted address SHOULD be used. -**[7] `rpc.request.metadata.`:** Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured. +**[7] `server.address`:** Instrumentations SHOULD populate `server.address` from the host +component of the HTTP/2 `:authority` pseudo-header the client used to +reach this server. + +Instrumentations SHOULD NOT use actual network-level connection +information for this purpose. + +**[8] `rpc.request.metadata.`:** Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured. Including all request metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information. For example, a property `my-custom-key` with value `["1.2.3.4", "1.2.3.5"]` SHOULD be recorded as `rpc.request.metadata.my-custom-key` attribute with value `["1.2.3.4", "1.2.3.5"]` -**[8] `rpc.response.metadata.`:** Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured. +**[9] `rpc.response.metadata.`:** Instrumentations SHOULD require an explicit configuration of which metadata values are to be captured. Including all response metadata values can be a security risk - explicit configuration helps avoid leaking sensitive information. For example, a property `my-custom-key` with value `["attribute_value"]` SHOULD be recorded as @@ -302,4 +312,4 @@ gRPC instrumentations SHOULD collect metrics according to the general `rpc.system.name` MUST be set to `"grpc"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/rpc/json-rpc.md b/docs/rpc/json-rpc.md index c7e6886c1a..ff0a84bc9f 100644 --- a/docs/rpc/json-rpc.md +++ b/docs/rpc/json-rpc.md @@ -48,7 +48,7 @@ are considered errors. | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [1] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`jsonrpc.protocol.version`](/docs/registry/attributes/jsonrpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Conditionally Required` If other than the default version (`1.0`) | string | Protocol version, as specified in the `jsonrpc` property of the request and its corresponding response. | `2.0`; `1.0` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` when available | string | The [`error.code`](https://www.jsonrpc.org/specification#error_object) property of response if it is an error response recorded as a string. [2] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` when available | string | The [`error.code`](https://www.jsonrpc.org/specification#error_object) property of response if it is an error response recorded as a string. [2] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | | [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [3] | `80`; `8080`; `443` | | [`jsonrpc.request.id`](/docs/registry/attributes/jsonrpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A string representation of the `id` property of the request and its corresponding response. [4] | `10`; `request-7` | | [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [5] | `10.1.2.80`; `/tmp/my.sock` | @@ -60,9 +60,9 @@ are considered errors. `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -70,7 +70,7 @@ Instrumentations SHOULD document the list of errors they report. If the request has completed successfully, instrumentations SHOULD NOT set `error.type`. -**[2] `rpc.response.status_code`:** All JSON RPC error codes SHOULD be considered errors. +**[2] `rpc.status_code`:** All JSON RPC error codes SHOULD be considered errors. **[3] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. @@ -132,21 +132,21 @@ are considered errors. | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [1] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`jsonrpc.protocol.version`](/docs/registry/attributes/jsonrpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Conditionally Required` If other than the default version (`1.0`) | string | Protocol version, as specified in the `jsonrpc` property of the request and its corresponding response. | `2.0`; `1.0` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` when available | string | The [`error.code`](https://www.jsonrpc.org/specification#error_object) property of response recorded as a string. [2] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | -| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If available. | string | A string identifying a group of RPC server instances request is sent to. [3] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | -| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [4] | `80`; `8080`; `443` | -| [`jsonrpc.request.id`](/docs/registry/attributes/jsonrpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A string representation of the `id` property of the request and its corresponding response. [5] | `10`; `request-7` | -| [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [6] | `10.1.2.80`; `/tmp/my.sock` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` when available | string | The [`error.code`](https://www.jsonrpc.org/specification#error_object) property of response recorded as a string. [2] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [3] | `80`; `8080`; `443` | +| [`jsonrpc.request.id`](/docs/registry/attributes/jsonrpc.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | A string representation of the `id` property of the request and its corresponding response. [4] | `10`; `request-7` | +| [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [5] | `10.1.2.80`; `/tmp/my.sock` | | [`network.peer.port`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` If `network.peer.address` is set. | int | Peer port number of the network connection. | `65123` | +| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when available. | string | A string identifying a group of RPC server instances request is sent to. [6] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Opt-In` | string | JSON-RPC method name provided in the request. [7] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | **[1] `error.type`:** If the RPC fails with an error before status code is returned, `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -154,18 +154,16 @@ Instrumentations SHOULD document the list of errors they report. If the request has completed successfully, instrumentations SHOULD NOT set `error.type`. -**[2] `rpc.response.status_code`:** All JSON RPC error codes SHOULD be considered errors. - -**[3] `server.address`:** May contain a DNS name, an endpoint and path in the service registry, local socket name or an IP address. -Semantic conventions for individual RPC systems SHOULD document how to populate this attribute. -When address is an IP address, instrumentations SHOULD NOT do a reverse DNS lookup to obtain a DNS name and SHOULD set `server.address` to the provided IP address. +**[2] `rpc.status_code`:** All JSON RPC error codes SHOULD be considered errors. -**[4] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. +**[3] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. -**[5] `jsonrpc.request.id`:** Under the [JSON-RPC specification](https://www.jsonrpc.org/specification), the `id` property may be a string, number, null, or omitted entirely. When omitted, the request is treated as a notification. Using `null` is not equivalent to omitting the `id`, but it is discouraged. +**[4] `jsonrpc.request.id`:** Under the [JSON-RPC specification](https://www.jsonrpc.org/specification), the `id` property may be a string, number, null, or omitted entirely. When omitted, the request is treated as a notification. Using `null` is not equivalent to omitting the `id`, but it is discouraged. Instrumentations SHOULD NOT capture this attribute when the `id` is `null` or omitted. -**[6] `network.peer.address`:** If a RPC involved multiple network calls (for example retries), the last contacted address SHOULD be used. +**[5] `network.peer.address`:** If a RPC involved multiple network calls (for example retries), the last contacted address SHOULD be used. + +**[6] `server.address`:** `server.address` and `server.port` describe the address the client used to reach this server, as reported by the transport or RPC framework. Instrumentations SHOULD NOT use actual network-level connection information to populate these attributes. If the address used by the client is unavailable, instrumentations SHOULD NOT set these attributes. **[7] `rpc.method`:** JSON-RPC supports sending and receiving arbitrary method names without prior registration or definition. As a result, the method name MAY have unbounded cardinality in edge or error cases. General-purpose JSON-RPC instrumentations therefore SHOULD NOT set this attribute by default and SHOULD provide a way to configure the list of recognized RPC methods. When tracing instrumentation converts RPC method to `_OTHER`, it MUST also set `rpc.method_original` span attribute to the original value. @@ -196,4 +194,4 @@ JSON-RPC instrumentations SHOULD collect metrics according to the general `rpc.system.name` MUST be set to `"jsonrpc"`. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/rpc/rpc-exceptions.md b/docs/rpc/rpc-exceptions.md index 3201190f47..42f4d65938 100644 --- a/docs/rpc/rpc-exceptions.md +++ b/docs/rpc/rpc-exceptions.md @@ -105,4 +105,4 @@ classify the failure. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/rpc/rpc-metrics.md b/docs/rpc/rpc-metrics.md index f209a16e7d..3b3c0f7099 100644 --- a/docs/rpc/rpc-metrics.md +++ b/docs/rpc/rpc-metrics.md @@ -55,7 +55,7 @@ metrics can be filtered for finer grain analysis. This metric is [recommended][MetricRecommended]. This metric SHOULD be specified with -[`ExplicitBucketBoundaries`](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) +[`ExplicitBucketBoundaries`](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -77,9 +77,9 @@ SHOULD be the same as the RPC server span duration. | [`rpc.system.name`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The Remote Procedure Call (RPC) system. [1] | `grpc`; `dubbo`; `connectrpc` | | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [2] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The fully-qualified logical name of the method from the RPC interface perspective. [3] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | -| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string | A string identifying a group of RPC server instances request is sent to. | `example.com`; `10.1.2.80`; `/tmp/my.sock` | -| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | int | Server port number. | `80`; `8080`; `443` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | string | A string identifying a group of RPC server instances request is sent to. [5] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | +| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Opt-In` | int | Server port number. [6] | `80`; `8080`; `443` | **[1] `rpc.system.name`:** The client and server RPC systems may differ for the same RPC interaction. For example, a client may use Apache Dubbo or Connect RPC to communicate with a server that uses gRPC since both protocols provide compatibility with gRPC. @@ -87,9 +87,9 @@ SHOULD be the same as the RPC server span duration. `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -119,8 +119,12 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[4] `rpc.response.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. -Semantic conventions for individual RPC frameworks SHOULD document what `rpc.response.status_code` means in the context of that system and which values are considered to represent errors. +**[4] `rpc.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. +Semantic conventions for individual RPC frameworks SHOULD document what `rpc.status_code` means in the context of that system and which values are considered to represent errors. + +**[5] `server.address`:** `server.address` and `server.port` describe the address the client used to reach this server, as reported by the transport or RPC framework. Instrumentations SHOULD NOT use actual network-level connection information to populate these attributes. If the address used by the client is unavailable, instrumentations SHOULD NOT set these attributes. + +**[6] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. --- @@ -152,7 +156,7 @@ Semantic conventions for individual RPC frameworks SHOULD document what `rpc.res This metric is [recommended][MetricRecommended]. This metric SHOULD be specified with -[`ExplicitBucketBoundaries`](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) +[`ExplicitBucketBoundaries`](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -174,7 +178,7 @@ SHOULD be the same as the RPC client span duration. | [`rpc.system.name`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The Remote Procedure Call (RPC) system. [1] | `grpc`; `dubbo`; `connectrpc` | | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [2] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The fully-qualified logical name of the method from the RPC interface perspective. [3] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If available. | string | A string identifying a group of RPC server instances request is sent to. [5] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | | [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [6] | `80`; `8080`; `443` | @@ -184,9 +188,9 @@ SHOULD be the same as the RPC client span duration. `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -216,8 +220,8 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[4] `rpc.response.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. -Semantic conventions for individual RPC frameworks SHOULD document what `rpc.response.status_code` means in the context of that system and which values are considered to represent errors. +**[4] `rpc.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. +Semantic conventions for individual RPC frameworks SHOULD document what `rpc.status_code` means in the context of that system and which values are considered to represent errors. **[5] `server.address`:** May contain a DNS name, an endpoint and path in the service registry, local socket name or an IP address. Semantic conventions for individual RPC systems SHOULD document how to populate this attribute. @@ -248,5 +252,5 @@ When address is an IP address, instrumentations SHOULD NOT do a reverse DNS look -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/signal-requirement-level.md#recommended diff --git a/docs/rpc/rpc-spans.md b/docs/rpc/rpc-spans.md index 95b2aa6c0e..754642de6c 100644 --- a/docs/rpc/rpc-spans.md +++ b/docs/rpc/rpc-spans.md @@ -44,7 +44,7 @@ This document defines how to describe remote procedure calls ## Name -RPC spans MUST follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#span). +RPC spans MUST follow the overall [guidelines for span names](https://opentelemetry.io/docs/specs/otel/trace/api/#span). The *span name* SHOULD be `{rpc.method}` if it is available and not set to `_OTHER`. @@ -91,7 +91,7 @@ document for details on how to record span status. | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [2] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The fully-qualified logical name of the method from the RPC interface perspective. [3] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | | [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If available. | string | A string identifying a group of RPC server instances request is sent to. [5] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | | [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [6] | `80`; `8080`; `443` | | [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [7] | `10.1.2.80`; `/tmp/my.sock` | @@ -103,9 +103,9 @@ document for details on how to record span status. `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -135,8 +135,8 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[4] `rpc.response.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. -Semantic conventions for individual RPC frameworks SHOULD document what `rpc.response.status_code` means in the context of that system and which values are considered to represent errors. +**[4] `rpc.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. +Semantic conventions for individual RPC frameworks SHOULD document what `rpc.status_code` means in the context of that system and which values are considered to represent errors. **[5] `server.address`:** May contain a DNS name, an endpoint and path in the service registry, local socket name or an IP address. Semantic conventions for individual RPC systems SHOULD document how to populate this attribute. @@ -210,11 +210,11 @@ document for details on how to record span status. | [`error.type`](/docs/registry/attributes/error.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [2] | `DEADLINE_EXCEEDED`; `java.net.UnknownHostException`; `-32602` | | [`rpc.method`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | The fully-qualified logical name of the method from the RPC interface perspective. [3] | `com.example.ExampleService/exampleMethod`; `EchoService/Echo`; `_OTHER` | | [`rpc.method_original`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` If and only if it's different than `rpc.method`. | string | The original name of the method used by the client. | `com.myservice.EchoService/catchAll`; `com.myservice.EchoService/unknownMethod`; `InvalidMethod` | -| [`rpc.response.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | -| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` If available. | string | A string identifying a group of RPC server instances request is sent to. [5] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | -| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [6] | `80`; `8080`; `443` | -| [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [7] | `10.1.2.80`; `/tmp/my.sock` | +| [`rpc.status_code`](/docs/registry/attributes/rpc.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Conditionally Required` if available. | string | Status code of the RPC returned by the RPC server or generated by the client [4] | `OK`; `DEADLINE_EXCEEDED`; `-32602` | +| [`server.port`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Conditionally Required` if applicable and if `server.address` is set. | int | Server port number. [5] | `80`; `8080`; `443` | +| [`network.peer.address`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | Peer address of the network connection - IP address or UNIX domain socket name. [6] | `10.1.2.80`; `/tmp/my.sock` | | [`network.peer.port`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` If `network.peer.address` is set. | int | Peer port number of the network connection. | `65123` | +| [`server.address`](/docs/registry/attributes/server.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` when available. | string | A string identifying a group of RPC server instances request is sent to. [7] | `example.com`; `10.1.2.80`; `/tmp/my.sock` | **[1] `rpc.system.name`:** The client and server RPC systems may differ for the same RPC interaction. For example, a client may use Apache Dubbo or Connect RPC to communicate with a server that uses gRPC since both protocols provide compatibility with gRPC. @@ -222,9 +222,9 @@ document for details on how to record span status. `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. -If a response status code is returned and status indicates an error, +If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions -for the details on which values of `rpc.response.status_code` are considered errors. +for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. @@ -254,16 +254,14 @@ The `code.function.name` attribute may be used to record the fully-qualified method actually executing the call on the server side, or the RPC client stub method on the client side. -**[4] `rpc.response.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. -Semantic conventions for individual RPC frameworks SHOULD document what `rpc.response.status_code` means in the context of that system and which values are considered to represent errors. +**[4] `rpc.status_code`:** Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes. +Semantic conventions for individual RPC frameworks SHOULD document what `rpc.status_code` means in the context of that system and which values are considered to represent errors. -**[5] `server.address`:** May contain a DNS name, an endpoint and path in the service registry, local socket name or an IP address. -Semantic conventions for individual RPC systems SHOULD document how to populate this attribute. -When address is an IP address, instrumentations SHOULD NOT do a reverse DNS lookup to obtain a DNS name and SHOULD set `server.address` to the provided IP address. +**[5] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. -**[6] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available. +**[6] `network.peer.address`:** If a RPC involved multiple network calls (for example retries), the last contacted address SHOULD be used. -**[7] `network.peer.address`:** If a RPC involved multiple network calls (for example retries), the last contacted address SHOULD be used. +**[7] `server.address`:** `server.address` and `server.port` describe the address the client used to reach this server, as reported by the transport or RPC framework. Instrumentations SHOULD NOT use actual network-level connection information to populate these attributes. If the address used by the client is unavailable, instrumentations SHOULD NOT set these attributes. The following attributes can be important for making sampling decisions and SHOULD be provided **at span creation time** (if provided at all): @@ -296,4 +294,4 @@ and SHOULD be provided **at span creation time** (if provided at all): -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/runtime/README.md b/docs/runtime/README.md index 2a216c588f..53f7ef3296 100644 --- a/docs/runtime/README.md +++ b/docs/runtime/README.md @@ -57,4 +57,4 @@ semantic conventions when instrumenting runtime environments. [`process.runtime`](/docs/resource/process.md#process-runtimes) resource attributes SHOULD be included on runtime metric events as appropriate. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/runtime/cpython-metrics.md b/docs/runtime/cpython-metrics.md index 991320beb7..309d22747a 100644 --- a/docs/runtime/cpython-metrics.md +++ b/docs/runtime/cpython-metrics.md @@ -128,5 +128,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/document-status.md +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/runtime/dotnet-metrics.md b/docs/runtime/dotnet-metrics.md index 2b880032d2..5aea1d6c82 100644 --- a/docs/runtime/dotnet-metrics.md +++ b/docs/runtime/dotnet-metrics.md @@ -537,5 +537,5 @@ This metric reports the same values as counting calls to [`AppDomain.CurrentDoma -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/runtime/go-metrics.md b/docs/runtime/go-metrics.md index 8fd9915e33..3b1bd598e8 100644 --- a/docs/runtime/go-metrics.md +++ b/docs/runtime/go-metrics.md @@ -359,7 +359,7 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended [RuntimeMetrics]: https://pkg.go.dev/runtime/metrics [MetricOptIn]: /docs/general/metric-requirement-level.md#opt-in diff --git a/docs/runtime/jvm-metrics.md b/docs/runtime/jvm-metrics.md index 9289afdeec..91b1905a72 100644 --- a/docs/runtime/jvm-metrics.md +++ b/docs/runtime/jvm-metrics.md @@ -201,7 +201,7 @@ This metric is [recommended][MetricRecommended]. This metric is obtained by subscribing to [`GarbageCollectionNotificationInfo`](https://docs.oracle.com/javase/8/docs/jre/api/management/extension/com/sun/management/GarbageCollectionNotificationInfo.html) events provided by [`GarbageCollectorMXBean`](https://docs.oracle.com/javase/8/docs/api/java/lang/management/GarbageCollectorMXBean.html). The duration value is obtained from [`GcInfo`](https://docs.oracle.com/javase/8/docs/jre/api/management/extension/com/sun/management/GcInfo.html#getDuration--) -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.01, 0.1, 1, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.01, 0.1, 1, 10 ]`. @@ -605,6 +605,6 @@ This metric is obtained from [`UnixOperatingSystemMXBean#getMaxFileDescriptorCou -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricOptIn]: /docs/general/metric-requirement-level.md#opt-in [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/runtime/nodejs-metrics.md b/docs/runtime/nodejs-metrics.md index 94f6717326..a59586dd80 100644 --- a/docs/runtime/nodejs-metrics.md +++ b/docs/runtime/nodejs-metrics.md @@ -214,6 +214,6 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/document-status.md +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended [Eventloop]: https://nodejs.org/api/perf_hooks.html#perf_hooksmonitoreventloopdelayoptions diff --git a/docs/runtime/v8js-metrics.md b/docs/runtime/v8js-metrics.md index 9795dca84d..0286d9afb3 100644 --- a/docs/runtime/v8js-metrics.md +++ b/docs/runtime/v8js-metrics.md @@ -25,7 +25,7 @@ This document describes semantic conventions for V8 JS Engine Runtime metrics in This metric is [recommended][MetricRecommended]. -This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/metrics/api.md#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. +This metric SHOULD be specified with [`ExplicitBucketBoundaries` advisory parameter](https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-advisory-parameters) of `[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ]`. @@ -252,5 +252,5 @@ This metric is [recommended][MetricRecommended]. -[DocumentStatus]: https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/document-status.md +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/system/README.md b/docs/system/README.md index 8cc7e0647d..366cfcc1d3 100644 --- a/docs/system/README.md +++ b/docs/system/README.md @@ -17,4 +17,4 @@ System semantic conventions are defined for the following metrics: * [Process](process-metrics.md): For standard process metrics. * [Runtime Environment](/docs/runtime/README.md#metrics): For runtime environment metrics. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/docs/system/container-metrics.md b/docs/system/container-metrics.md index 5f15451fa2..d39733f731 100644 --- a/docs/system/container-metrics.md +++ b/docs/system/container-metrics.md @@ -41,10 +41,10 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `container.uptime` | Gauge | `s` | The time the container has been running. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`container`](/docs/registry/entities/container.md#container) | +| `container.uptime` | Gauge | `s` | The time the container has been running. [1] | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | [`container`](/docs/registry/entities/container.md#container) | -**[1]:** Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available. -The actual accuracy would depend on the instrumentation and operating system. +**[1]:** Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available. The actual accuracy would depend on the instrumentation and operating system. +In K8s environments, this metric can be derived from Kubelet's stats API and specifically from the [ContainerStats.StartTime](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L161) field, where `StartTime` represents the container creation time as [noted in the Kubelet source](https://github.com/kubernetes/kubernetes/blob/v1.36.3/pkg/kubelet/stats/cri_stats_provider.go#L776). This value resets on every container restart and aligns with [ContainerStateRunning.startedAt](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#ContainerStateRunning) from the K8s API. @@ -109,7 +109,7 @@ This metric is [opt-in][MetricOptIn]. | -------- | --------------- | ----------- | -------------- | --------- | ------ | | `container.cpu.usage` | Gauge | `{cpu}` | Container's CPU usage, measured in CPUs. Range from 0 to the number of allocatable CPUs. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`container`](/docs/registry/entities/container.md#container) | -**[1]:** CPU usage of the specific container on all available CPU cores, averaged over the sample window +**[1]:** CPU usage of the specific container on all available CPU cores. It is calculated as the change in cumulative CPU time (container.cpu.time) over a measurement interval, divided by the elapsed time: usageCores = (cpuTimeEnd - cpuTimeStart) / elapsedSeconds **Attributes:** @@ -310,7 +310,7 @@ This metric is [opt-in][MetricOptIn]. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The network interface name. | `lo`; `eth0` | +| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The network interface name. | `lo`; `eth0` | | [`network.io.direction`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The direction of traffic from the perspective of the observing host's physical or virtual network interface. It should not be used to represent the logical direction of a stateful connection or network flow. | `transmit` | --- @@ -394,6 +394,6 @@ of the Kubelet's stats API. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricOptIn]: /docs/general/metric-requirement-level.md#opt-in [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/system/k8s-metrics.md b/docs/system/k8s-metrics.md index 9c4cc4eb64..b55c1b4d16 100644 --- a/docs/system/k8s-metrics.md +++ b/docs/system/k8s-metrics.md @@ -171,10 +171,10 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.pod.uptime` | Gauge | `s` | The time the Pod has been running. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.pod`](/docs/registry/entities/k8s.md#k8s-pod) | +| `k8s.pod.uptime` | Gauge | `s` | The time the Pod has been running. [1] | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | [`k8s.pod`](/docs/registry/entities/k8s.md#k8s-pod) | -**[1]:** Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available. -The actual accuracy would depend on the instrumentation and operating system. +**[1]:** Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available. The actual accuracy would depend on the instrumentation and operating system. +This metric is derived from the [PodStats.StartTime](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L122) field of Kubelet's stats API, where `StartTime` represents the pod sandbox creation time as [noted in the Kubelet source](https://github.com/kubernetes/kubernetes/blob/v1.36.3/pkg/kubelet/stats/cri_stats_provider.go#L299). This value resets when the node restarts, as the pod sandbox is recreated. @@ -288,7 +288,7 @@ This metric is [recommended][MetricRecommended]. | -------- | --------------- | ----------- | -------------- | --------- | ------ | | `k8s.pod.cpu.usage` | Gauge | `{cpu}` | Pod's CPU usage, measured in CPUs. Range from 0 to the number of allocatable CPUs. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.pod`](/docs/registry/entities/k8s.md#k8s-pod) | -**[1]:** CPU usage of the specific Pod on all available CPU cores, averaged over the sample window +**[1]:** CPU usage of the specific Pod on all available CPU cores. It is calculated as the change in cumulative CPU time (k8s.pod.cpu.time) over a measurement interval, divided by the elapsed time: usageCores = (cpuTimeEnd - cpuTimeStart) / elapsedSeconds @@ -426,7 +426,7 @@ This metric is [recommended][MetricRecommended]. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The network interface name. | `lo`; `eth0` | +| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The network interface name. | `lo`; `eth0` | | [`network.io.direction`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The direction of traffic from the perspective of the observing host's physical or virtual network interface. It should not be used to represent the logical direction of a stateful connection or network flow. | `transmit` | --- @@ -459,7 +459,7 @@ This metric is [recommended][MetricRecommended]. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The network interface name. | `lo`; `eth0` | +| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The network interface name. | `lo`; `eth0` | | [`network.io.direction`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The direction of traffic from the perspective of the observing host's physical or virtual network interface. It should not be used to represent the logical direction of a stateful connection or network flow. | `transmit` | --- @@ -896,10 +896,10 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.node.uptime` | Gauge | `s` | The time the Node has been running. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.node`](/docs/registry/entities/k8s.md#k8s-node) | +| `k8s.node.uptime` | Gauge | `s` | The time the Node has been running. [1] | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | [`k8s.node`](/docs/registry/entities/k8s.md#k8s-node) | -**[1]:** Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available. -The actual accuracy would depend on the instrumentation and operating system. +**[1]:** Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available. The actual accuracy would depend on the instrumentation and operating system. +This metric is derived from the [NodeStats.StartTime](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L42) field of Kubelet's stats API, which is set to the [system boot time](https://github.com/kubernetes/kubernetes/blob/v1.36.3/pkg/kubelet/server/stats/summary.go#L113). This value resets when the node reboots. @@ -1066,7 +1066,7 @@ This metric is [recommended][MetricRecommended]. | -------- | --------------- | ----------- | -------------- | --------- | ------ | | `k8s.node.cpu.usage` | Gauge | `{cpu}` | Node's CPU usage, measured in CPUs. Range from 0 to the number of allocatable CPUs. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.node`](/docs/registry/entities/k8s.md#k8s-node) | -**[1]:** CPU usage of the specific Node on all available CPU cores, averaged over the sample window +**[1]:** CPU usage of the specific Node on all available CPU cores. It is calculated as the change in cumulative CPU time (k8s.node.cpu.time) over a measurement interval, divided by the elapsed time: usageCores = (cpuTimeEnd - cpuTimeStart) / elapsedSeconds @@ -1204,7 +1204,7 @@ This metric is [recommended][MetricRecommended]. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The network interface name. | `lo`; `eth0` | +| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The network interface name. | `lo`; `eth0` | | [`network.io.direction`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The direction of traffic from the perspective of the observing host's physical or virtual network interface. It should not be used to represent the logical direction of a stateful connection or network flow. | `transmit` | --- @@ -1237,7 +1237,7 @@ This metric is [recommended][MetricRecommended]. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The network interface name. | `lo`; `eth0` | +| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The network interface name. | `lo`; `eth0` | | [`network.io.direction`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The direction of traffic from the perspective of the observing host's physical or virtual network interface. It should not be used to represent the logical direction of a stateful connection or network flow. | `transmit` | --- @@ -1378,7 +1378,7 @@ This metric is [recommended][MetricRecommended]. | -------- | --------------- | ----------- | -------------- | --------- | ------ | | `k8s.node.system_container.cpu.usage` | Gauge | `{cpu}` | Node's system container CPU usage, measured in CPUs. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.node.system_container`](/docs/registry/entities/k8s.md#k8s-node-system-container) | -**[1]:** This metric is derived from the [CPUStats.UsageNanoCores](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L233) field of the [ContainerStats](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L157C6-L157C20) of [Node.SystemContainers](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L40) of the Kubelet's stats API. +**[1]:** CPU usage of the specific System Container on all available CPU cores. It is calculated as the change in cumulative CPU time (k8s.node.system_container.cpu.time) over a measurement interval, divided by the elapsed time: usageCores = (cpuTimeEnd - cpuTimeStart) / elapsedSeconds @@ -2332,13 +2332,11 @@ This metric is [recommended][MetricRecommended]. - ### Metric: `k8s.container.storage.limit` This metric is [recommended][MetricRecommended]. - @@ -2348,18 +2346,16 @@ This metric is [recommended][MetricRecommended]. | -------- | --------------- | ----------- | -------------- | --------- | ------ | | `k8s.container.storage.limit` | UpDownCounter | `By` | Maximum storage resource limit set for the container. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.container`](/docs/registry/entities/k8s.md#k8s-container) | -**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core for details. +**[1]:** See the [Kubernetes ResourceRequirements API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core) for details. - ### Metric: `k8s.container.storage.request` This metric is [recommended][MetricRecommended]. - @@ -2369,18 +2365,16 @@ This metric is [recommended][MetricRecommended]. | -------- | --------------- | ----------- | -------------- | --------- | ------ | | `k8s.container.storage.request` | UpDownCounter | `By` | Storage resource requested for the container. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.container`](/docs/registry/entities/k8s.md#k8s-container) | -**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core for details. +**[1]:** See the [Kubernetes ResourceRequirements API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core) for details. - ### Metric: `k8s.container.ephemeral_storage.limit` This metric is [recommended][MetricRecommended]. - @@ -2390,18 +2384,16 @@ This metric is [recommended][MetricRecommended]. | -------- | --------------- | ----------- | -------------- | --------- | ------ | | `k8s.container.ephemeral_storage.limit` | UpDownCounter | `By` | Maximum ephemeral storage resource limit set for the container. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.container`](/docs/registry/entities/k8s.md#k8s-container) | -**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core for details. +**[1]:** See the [Kubernetes ResourceRequirements API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core) for details. - ### Metric: `k8s.container.ephemeral_storage.request` This metric is [recommended][MetricRecommended]. - @@ -2411,12 +2403,11 @@ This metric is [recommended][MetricRecommended]. | -------- | --------------- | ----------- | -------------- | --------- | ------ | | `k8s.container.ephemeral_storage.request` | UpDownCounter | `By` | Ephemeral storage resource requested for the container. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.container`](/docs/registry/entities/k8s.md#k8s-container) | -**[1]:** See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core for details. +**[1]:** See the [Kubernetes ResourceRequirements API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core) for details. - ### Metric: `k8s.container.ephemeral_storage.usage` @@ -2505,7 +2496,6 @@ This metric is [recommended][MetricRecommended]. This metric is [recommended][MetricRecommended]. - @@ -2513,8 +2503,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.cpu.limit.hard` | UpDownCounter | `{cpu}` | The CPU limits in a specific namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.cpu.limit.hard` | UpDownCounter | `{cpu}` | The CPU limits in a specific namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2522,13 +2511,11 @@ The value represents the configured quota limit of the resource in the namespace - ### Metric: `k8s.resourcequota.cpu.limit.used` This metric is [recommended][MetricRecommended]. - @@ -2536,8 +2523,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.cpu.limit.used` | UpDownCounter | `{cpu}` | The CPU limits in a specific namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.cpu.limit.used` | UpDownCounter | `{cpu}` | The CPU limits in a specific namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2545,13 +2531,11 @@ The value represents the current observed total usage of the resource in the nam - ### Metric: `k8s.resourcequota.cpu.request.hard` This metric is [recommended][MetricRecommended]. - @@ -2559,8 +2543,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.cpu.request.hard` | UpDownCounter | `{cpu}` | The CPU requests in a specific namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.cpu.request.hard` | UpDownCounter | `{cpu}` | The CPU requests in a specific namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2568,13 +2551,11 @@ The value represents the configured quota limit of the resource in the namespace - ### Metric: `k8s.resourcequota.cpu.request.used` This metric is [recommended][MetricRecommended]. - @@ -2582,8 +2563,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.cpu.request.used` | UpDownCounter | `{cpu}` | The CPU requests in a specific namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.cpu.request.used` | UpDownCounter | `{cpu}` | The CPU requests in a specific namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2591,13 +2571,11 @@ The value represents the current observed total usage of the resource in the nam - ### Metric: `k8s.resourcequota.memory.limit.hard` This metric is [recommended][MetricRecommended]. - @@ -2605,8 +2583,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.memory.limit.hard` | UpDownCounter | `By` | The memory limits in a specific namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.memory.limit.hard` | UpDownCounter | `By` | The memory limits in a specific namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2614,13 +2591,11 @@ The value represents the configured quota limit of the resource in the namespace - ### Metric: `k8s.resourcequota.memory.limit.used` This metric is [recommended][MetricRecommended]. - @@ -2628,8 +2603,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.memory.limit.used` | UpDownCounter | `By` | The memory limits in a specific namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.memory.limit.used` | UpDownCounter | `By` | The memory limits in a specific namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2637,13 +2611,11 @@ The value represents the current observed total usage of the resource in the nam - ### Metric: `k8s.resourcequota.memory.request.hard` This metric is [recommended][MetricRecommended]. - @@ -2651,8 +2623,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.memory.request.hard` | UpDownCounter | `By` | The memory requests in a specific namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.memory.request.hard` | UpDownCounter | `By` | The memory requests in a specific namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2660,13 +2631,11 @@ The value represents the configured quota limit of the resource in the namespace - ### Metric: `k8s.resourcequota.memory.request.used` This metric is [recommended][MetricRecommended]. - @@ -2674,8 +2643,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.memory.request.used` | UpDownCounter | `By` | The memory requests in a specific namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.memory.request.used` | UpDownCounter | `By` | The memory requests in a specific namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2683,13 +2651,11 @@ The value represents the current observed total usage of the resource in the nam - ### Metric: `k8s.resourcequota.hugepage_count.request.hard` This metric is [recommended][MetricRecommended]. - @@ -2697,8 +2663,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.hugepage_count.request.hard` | UpDownCounter | `{hugepage}` | The huge page requests in a specific namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.hugepage_count.request.hard` | UpDownCounter | `{hugepage}` | The huge page requests in a specific namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2712,13 +2677,11 @@ The value represents the configured quota limit of the resource in the namespace - ### Metric: `k8s.resourcequota.hugepage_count.request.used` This metric is [recommended][MetricRecommended]. - @@ -2726,8 +2689,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.hugepage_count.request.used` | UpDownCounter | `{hugepage}` | The huge page requests in a specific namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.hugepage_count.request.used` | UpDownCounter | `{hugepage}` | The huge page requests in a specific namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2741,13 +2703,11 @@ The value represents the current observed total usage of the resource in the nam - ### Metric: `k8s.resourcequota.storage.request.hard` This metric is [recommended][MetricRecommended]. - @@ -2755,8 +2715,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.storage.request.hard` | UpDownCounter | `By` | The storage requests in a specific namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.storage.request.hard` | UpDownCounter | `By` | The storage requests in a specific namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2776,13 +2735,11 @@ storage class. - ### Metric: `k8s.resourcequota.storage.request.used` This metric is [recommended][MetricRecommended]. - @@ -2790,8 +2747,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.storage.request.used` | UpDownCounter | `By` | The storage requests in a specific namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.storage.request.used` | UpDownCounter | `By` | The storage requests in a specific namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2811,13 +2767,11 @@ storage class. - ### Metric: `k8s.resourcequota.persistentvolumeclaim_count.hard` This metric is [recommended][MetricRecommended]. - @@ -2825,8 +2779,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.persistentvolumeclaim_count.hard` | UpDownCounter | `{persistentvolumeclaim}` | The total number of PersistentVolumeClaims that can exist in the namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.persistentvolumeclaim_count.hard` | UpDownCounter | `{persistentvolumeclaim}` | The total number of PersistentVolumeClaims that can exist in the namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2846,13 +2799,11 @@ storage class. - ### Metric: `k8s.resourcequota.persistentvolumeclaim_count.used` This metric is [recommended][MetricRecommended]. - @@ -2860,8 +2811,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.persistentvolumeclaim_count.used` | UpDownCounter | `{persistentvolumeclaim}` | The total number of PersistentVolumeClaims that can exist in the namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.persistentvolumeclaim_count.used` | UpDownCounter | `{persistentvolumeclaim}` | The total number of PersistentVolumeClaims that can exist in the namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2881,13 +2831,11 @@ storage class. - ### Metric: `k8s.resourcequota.ephemeral_storage.request.hard` This metric is [recommended][MetricRecommended]. - @@ -2895,8 +2843,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.ephemeral_storage.request.hard` | UpDownCounter | `By` | The sum of local ephemeral storage requests in the namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.ephemeral_storage.request.hard` | UpDownCounter | `By` | The sum of local ephemeral storage requests in the namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2904,13 +2851,11 @@ The value represents the configured quota limit of the resource in the namespace - ### Metric: `k8s.resourcequota.ephemeral_storage.request.used` This metric is [recommended][MetricRecommended]. - @@ -2918,8 +2863,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.ephemeral_storage.request.used` | UpDownCounter | `By` | The sum of local ephemeral storage requests in the namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.ephemeral_storage.request.used` | UpDownCounter | `By` | The sum of local ephemeral storage requests in the namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2927,13 +2871,11 @@ The value represents the current observed total usage of the resource in the nam - ### Metric: `k8s.resourcequota.ephemeral_storage.limit.hard` This metric is [recommended][MetricRecommended]. - @@ -2941,8 +2883,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.ephemeral_storage.limit.hard` | UpDownCounter | `By` | The sum of local ephemeral storage limits in the namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.ephemeral_storage.limit.hard` | UpDownCounter | `By` | The sum of local ephemeral storage limits in the namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2950,13 +2891,11 @@ The value represents the configured quota limit of the resource in the namespace - ### Metric: `k8s.resourcequota.ephemeral_storage.limit.used` This metric is [recommended][MetricRecommended]. - @@ -2964,8 +2903,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.ephemeral_storage.limit.used` | UpDownCounter | `By` | The sum of local ephemeral storage limits in the namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.ephemeral_storage.limit.used` | UpDownCounter | `By` | The sum of local ephemeral storage limits in the namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -2973,13 +2911,11 @@ The value represents the current observed total usage of the resource in the nam - ### Metric: `k8s.resourcequota.object_count.hard` This metric is [recommended][MetricRecommended]. - @@ -2987,8 +2923,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.object_count.hard` | UpDownCounter | `{object}` | The object count limits in a specific namespace. -The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.object_count.hard` | UpDownCounter | `{object}` | The object count limits in a specific namespace.
The value represents the configured quota limit of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `hard` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -3004,13 +2939,11 @@ The value represents the configured quota limit of the resource in the namespace - ### Metric: `k8s.resourcequota.object_count.used` This metric is [recommended][MetricRecommended]. - @@ -3018,8 +2951,7 @@ This metric is [recommended][MetricRecommended]. | Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `k8s.resourcequota.object_count.used` | UpDownCounter | `{object}` | The object count limits in a specific namespace. -The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | +| `k8s.resourcequota.object_count.used` | UpDownCounter | `{object}` | The object count limits in a specific namespace.
The value represents the current observed total usage of the resource in the namespace. [1] | ![Development](https://img.shields.io/badge/-development-blue) | [`k8s.resourcequota`](/docs/registry/entities/k8s.md#k8s-resourcequota) | **[1]:** This metric is retrieved from the `used` field of the [K8s ResourceQuotaStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcequotastatus-v1-core). @@ -3035,7 +2967,6 @@ The value represents the current observed total usage of the resource in the nam - ## Service metrics @@ -3043,7 +2974,6 @@ The value represents the current observed total usage of the resource in the nam This metric is [opt-in][MetricOptIn]. - @@ -3064,6 +2994,7 @@ An endpoint may be reported under multiple conditions simultaneously (e.g., both See [K8s EndpointConditions](https://kubernetes.io/docs/reference/kubernetes-api/service-resources/endpoint-slice-v1/) for more details. The conditions represent: + - `ready`: Endpoints capable of receiving new connections. - `serving`: Endpoints currently handling traffic. - `terminating`: Endpoints that are being phased out but may still be handling existing connections. @@ -3122,13 +3053,11 @@ the attribute value will be an empty string. - ### Metric: `k8s.service.load_balancer.ingress.count` This metric is [opt-in][MetricOptIn]. - @@ -3154,7 +3083,6 @@ guarantee that the load balancer is healthy. - ## PersistentVolume Metrics @@ -3301,6 +3229,6 @@ This metric is derived from the `.status.capacity.storage` field of the -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended [MetricOptIn]: /docs/general/metric-requirement-level.md#opt-in diff --git a/docs/system/openshift-metrics.md b/docs/system/openshift-metrics.md index 825c3c7ad1..b6ca9c3c90 100644 --- a/docs/system/openshift-metrics.md +++ b/docs/system/openshift-metrics.md @@ -561,5 +561,5 @@ of the -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended diff --git a/docs/system/process-metrics.md b/docs/system/process-metrics.md index c44f1a9da3..adaad5252b 100644 --- a/docs/system/process-metrics.md +++ b/docs/system/process-metrics.md @@ -22,13 +22,16 @@ metrics](/docs/runtime/README.md#metrics). - [Metric: `process.cpu.utilization`](#metric-processcpuutilization) - [Metric: `process.memory.usage`](#metric-processmemoryusage) - [Metric: `process.memory.virtual`](#metric-processmemoryvirtual) + - [Metric: `process.memory.utilization`](#metric-processmemoryutilization) - [Metric: `process.disk.io`](#metric-processdiskio) + - [Metric: `process.disk.operations`](#metric-processdiskoperations) - [Metric: `process.network.io`](#metric-processnetworkio) - [Metric: `process.thread.count`](#metric-processthreadcount) - [Metric: `process.unix.file_descriptor.count`](#metric-processunixfile_descriptorcount) - [Metric: `process.windows.handle.count`](#metric-processwindowshandlecount) - [Metric: `process.context_switches`](#metric-processcontext_switches) - [Metric: `process.paging.faults`](#metric-processpagingfaults) + - [Metric: `process.signals_pending`](#metric-processsignals_pending) - [Metric: `process.uptime`](#metric-processuptime) @@ -158,6 +161,23 @@ This metric is [recommended][MetricRecommended]. +### Metric: `process.memory.utilization` + +This metric is [opt-in][MetricOptIn]. + + + + + + +| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | +| -------- | --------------- | ----------- | -------------- | --------- | ------ | +| `process.memory.utilization` | Gauge | `1` | Percentage of total physical memory that is used by the process. | ![Development](https://img.shields.io/badge/-development-blue) | [`process`](/docs/registry/entities/process.md#process) | + + + + + ### Metric: `process.disk.io` This metric is [recommended][MetricRecommended]. @@ -190,6 +210,38 @@ This metric is [recommended][MetricRecommended]. +### Metric: `process.disk.operations` + +This metric is [recommended][MetricRecommended]. + + + + + + +| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | +| -------- | --------------- | ----------- | -------------- | --------- | ------ | +| `process.disk.operations` | Counter | `{operation}` | Number of disk operations performed by the process. | ![Development](https://img.shields.io/badge/-development-blue) | [`process`](/docs/registry/entities/process.md#process) | + +**Attributes:** + +| Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | +| --- | --- | --- | --- | --- | --- | +| [`disk.io.direction`](/docs/registry/attributes/disk.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Required` | string | The disk IO operation direction. | `read` | + +--- + +`disk.io.direction` has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used. + +| Value | Description | Stability | +| --- | --- | --- | +| `read` | read | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | +| `write` | write | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | + + + + + ### Metric: `process.network.io` This metric is [recommended][MetricRecommended]. @@ -337,6 +389,23 @@ This metric is [recommended][MetricRecommended]. +### Metric: `process.signals_pending` + +This metric is [opt-in][MetricOptIn]. + + + + + + +| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | +| -------- | --------------- | ----------- | -------------- | --------- | ------ | +| `process.signals_pending` | UpDownCounter | `{signal}` | Number of pending signals for the process. | ![Development](https://img.shields.io/badge/-development-blue) | [`process`](/docs/registry/entities/process.md#process) | + + + + + ### Metric: `process.uptime` This metric is [recommended][MetricRecommended]. @@ -357,6 +426,6 @@ The actual accuracy would depend on the instrumentation and operating system. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended [MetricOptIn]: /docs/general/metric-requirement-level.md#opt-in diff --git a/docs/system/system-metrics.md b/docs/system/system-metrics.md index bd39116b8e..108c780ec2 100644 --- a/docs/system/system-metrics.md +++ b/docs/system/system-metrics.md @@ -887,7 +887,7 @@ This metric is [recommended][MetricRecommended]. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The network interface name. | `lo`; `eth0` | +| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The network interface name. | `lo`; `eth0` | | [`network.io.direction`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The direction of traffic from the perspective of the observing host's physical or virtual network interface. It should not be used to represent the logical direction of a stateful connection or network flow. | `transmit` | --- @@ -959,7 +959,7 @@ This metric is [recommended][MetricRecommended]. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The network interface name. | `lo`; `eth0` | +| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The network interface name. | `lo`; `eth0` | | [`network.io.direction`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The direction of traffic from the perspective of the observing host's physical or virtual network interface. It should not be used to represent the logical direction of a stateful connection or network flow. | `transmit` | --- @@ -992,7 +992,7 @@ This metric is [recommended][MetricRecommended]. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The network interface name. | `lo`; `eth0` | +| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The network interface name. | `lo`; `eth0` | | [`network.io.direction`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The direction of traffic from the perspective of the observing host's physical or virtual network interface. It should not be used to represent the logical direction of a stateful connection or network flow. | `transmit` | --- @@ -1026,7 +1026,7 @@ This metric is [recommended][MetricRecommended]. | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | | [`network.connection.state`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The state of network connection [1] | `close_wait` | -| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Development](https://img.shields.io/badge/-development-blue) | `Recommended` | string | The network interface name. | `lo`; `eth0` | +| [`network.interface.name`](/docs/registry/attributes/network.md) | ![Release Candidate](https://img.shields.io/badge/-rc-mediumorchid) | `Recommended` | string | The network interface name. | `lo`; `eth0` | | [`network.transport`](/docs/registry/attributes/network.md) | ![Stable](https://img.shields.io/badge/-stable-lightgreen) | `Recommended` | string | [OSI transport layer](https://wikipedia.org/wiki/Transport_layer) or [inter-process communication method](https://wikipedia.org/wiki/Inter-process_communication). [2] | `tcp`; `udp` | **[1] `network.connection.state`:** Connection states are defined as part of the [rfc9293](https://datatracker.ietf.org/doc/html/rfc9293#section-3.3.2) @@ -1176,7 +1176,7 @@ An instrument for load average over 1 minute on Linux could be named `system.linux.cpu.load_1m`, reusing the `cpu` name proposed above and having an `{os}` prefix to split this metric across OSes. -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ [MetricRecommended]: /docs/general/metric-requirement-level.md#recommended [MetricOptIn]: /docs/general/metric-requirement-level.md#opt-in diff --git a/docs/url/README.md b/docs/url/README.md index 713a3d769b..8d9717208c 100644 --- a/docs/url/README.md +++ b/docs/url/README.md @@ -18,4 +18,4 @@ Instrumentations that are aware of specific sensitive query string parameters MU _Note: Applications and telemetry consumers should scrub sensitive information from URL attributes on collected telemetry. In systems unable to identify sensitive information, certain attribute values may be redacted entirely._ -[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status +[DocumentStatus]: https://opentelemetry.io/docs/specs/otel/document-status/ diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 4f29e68d63..7aab56135c 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -2,11 +2,9 @@ module github.com/open-telemetry/opentelemetry-specification/internal/tools go 1.25.0 -toolchain go1.26.5 +toolchain go1.26.6 -require ( - go.opentelemetry.io/build-tools/chloggen v0.30.0 -) +require go.opentelemetry.io/build-tools/chloggen v0.30.0 require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect diff --git a/model/cicd/spans.yaml b/model/cicd/spans.yaml index cd4ed1c7a8..ed203885c0 100644 --- a/model/cicd/spans.yaml +++ b/model/cicd/spans.yaml @@ -6,7 +6,7 @@ groups: note: | For all pipeline runs, a span with kind `SERVER` SHOULD be created corresponding to the execution of the pipeline run. - **Span name** MUST follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#span). + **Span name** MUST follow the overall [guidelines for span names](https://opentelemetry.io/docs/specs/otel/trace/api/#span). The span name SHOULD be `{action} {pipeline}` if there is a (low-cardinality) pipeline name available. If the pipeline name is not available or is likely to have high cardinality, then the span name SHOULD be `{action}`. diff --git a/model/client/common.yaml b/model/client/common.yaml index 02ef815ede..02fc0ecca1 100644 --- a/model/client/common.yaml +++ b/model/client/common.yaml @@ -1,8 +1,16 @@ -groups: +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attribute_groups: - id: client - type: attribute_group + visibility: public + stability: stable brief: > - General client attributes. + 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't 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. attributes: - ref: client.address - ref: client.port diff --git a/model/client/registry.yaml b/model/client/registry.yaml index 03ad8989ef..3bdc90d7b7 100644 --- a/model/client/registry.yaml +++ b/model/client/registry.yaml @@ -1,28 +1,19 @@ -groups: - - id: registry.client - type: attribute_group - display_name: Client Attributes - 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't 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. - attributes: - - id: client.address - stability: stable - type: string - brief: "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name." - 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's available. - examples: ['client.example.com', '10.1.2.80', '/tmp/my.sock'] - - id: client.port - stability: stable - type: int - brief: Client port number. - examples: [65123] - 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's available. +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attributes: + - key: client.address + stability: stable + type: string + brief: "Client address - domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name." + 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's available. + examples: ['client.example.com', '10.1.2.80', '/tmp/my.sock'] + - key: client.port + stability: stable + type: int + brief: Client port number. + examples: [65123] + 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's available. diff --git a/model/cloud/registry.yaml b/model/cloud/registry.yaml index afd79eb32c..dbad7a391c 100644 --- a/model/cloud/registry.yaml +++ b/model/cloud/registry.yaml @@ -44,6 +44,10 @@ groups: value: 'oracle_cloud' brief: 'Oracle Cloud Infrastructure (OCI)' stability: development + - id: 'scaleway_cloud' + value: 'scaleway_cloud' + brief: 'Scaleway Cloud' + stability: development - id: 'tencent_cloud' value: 'tencent_cloud' brief: 'Tencent Cloud' @@ -311,6 +315,10 @@ groups: value: 'oracle_cloud_oke' brief: Kubernetes Engine (OKE) on Oracle Cloud Infrastructure (OCI) stability: development + - id: scaleway_cloud_compute + value: 'scaleway_cloud_compute' + brief: Compute on Scaleway Cloud + stability: development - id: tencent_cloud_cvm value: 'tencent_cloud_cvm' brief: Tencent Cloud Cloud Virtual Machine (CVM) diff --git a/model/container/metrics.yaml b/model/container/metrics.yaml index 02fd3024d7..3f222faf7e 100644 --- a/model/container/metrics.yaml +++ b/model/container/metrics.yaml @@ -6,13 +6,21 @@ groups: annotations: code_generation: metric_value_type: double - stability: development + stability: release_candidate entity_associations: - container brief: "The time the container has been running." - note: | + note: > Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available. The actual accuracy would depend on the instrumentation and operating system. + + In K8s environments, this metric can be derived from Kubelet's stats API and specifically from the + [ContainerStats.StartTime](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L161) + field, where `StartTime` represents the container creation time as + [noted in the Kubelet source](https://github.com/kubernetes/kubernetes/blob/v1.36.3/pkg/kubelet/stats/cri_stats_provider.go#L776). + This value resets on every container restart and aligns with + [ContainerStateRunning.startedAt](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#ContainerStateRunning) + from the K8s API. instrument: gauge unit: "s" # container.cpu.* metrics and attribute group @@ -67,7 +75,9 @@ groups: stability: development brief: "Container's CPU usage, measured in CPUs. Range from 0 to the number of allocatable CPUs." note: > - CPU usage of the specific container on all available CPU cores, averaged over the sample window + CPU usage of the specific container on all available CPU cores. It is calculated as the change in + cumulative CPU time (container.cpu.time) over a measurement interval, divided by the elapsed time: + usageCores = (cpuTimeEnd - cpuTimeStart) / elapsedSeconds instrument: gauge unit: "{cpu}" entity_associations: diff --git a/model/db/registry.yaml b/model/db/registry.yaml index 3943ce09f1..5e23c7ba92 100644 --- a/model/db/registry.yaml +++ b/model/db/registry.yaml @@ -17,8 +17,9 @@ groups: when the database system supports query text with multiple collections in non-batch operations. - For batch operations, if the individual operations are known to have the same - collection name then that collection name SHOULD be used. + For batch operations, if the individual operations would all have the same + `db.collection.name` when executed as non-batch operations, + then that collection name SHOULD be used. examples: ["public.users", "customers"] - id: db.namespace type: string @@ -52,9 +53,10 @@ groups: If spaces can occur in the operation name, multiple consecutive spaces SHOULD be normalized to a single space. - For batch operations, if the individual operations are known to have the same operation name - then that operation name SHOULD be used prepended by `BATCH `, - otherwise `db.operation.name` SHOULD be `BATCH` or some other database + For batch operations, if the individual operations would all have the same + `db.operation.name` when executed as non-batch operations, + then that operation name SHOULD be used prepended by `BATCH `. + Otherwise, `db.operation.name` SHOULD be `BATCH` or some other database system specific term if more applicable. examples: ["findAndModify", "HMSET", "SELECT"] - id: db.query.text @@ -65,8 +67,10 @@ groups: note: > For sanitization see [Sanitization of `db.query.text`](/docs/db/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 + For batch operations, if the individual operations would all have the same + `db.query.text` when executed as non-batch operations, + 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. Parameterized query text SHOULD NOT be sanitized. @@ -126,9 +130,10 @@ groups: [Generating query summary](/docs/db/database-spans.md#generating-a-summary-of-the-query) section. - For batch operations, if the individual operations are known to have the same query summary - then that query summary SHOULD be used prepended by `BATCH `, - otherwise `db.query.summary` SHOULD be `BATCH` or some other database + For batch operations, if the individual operations would all have the same + `db.query.summary` when executed as non-batch operations, + then that query summary SHOULD be used prepended by `BATCH `. + Otherwise, `db.query.summary` SHOULD be `BATCH` or some other database system specific term if more applicable. examples: [ @@ -144,8 +149,9 @@ groups: It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. - For batch operations, if the individual operations are known to have the same - stored procedure name then that stored procedure name SHOULD be used. + For batch operations, if the individual operations would all have the same + `db.stored_procedure.name` when executed as non-batch operations, + then that stored procedure name SHOULD be used. examples: ["GetCustomer"] - id: db.operation.parameter type: template[string] diff --git a/model/db/spans.yaml b/model/db/spans.yaml index 583fd5d144..9f18c960ad 100644 --- a/model/db/spans.yaml +++ b/model/db/spans.yaml @@ -328,7 +328,8 @@ groups: It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. - For batch operations, if the individual operations are known to have the same collection name + For batch operations, if the individual operations would all have the same + `db.collection.name` when executed as non-batch operations, then that collection name SHOULD be used. - ref: cassandra.query.idempotent - ref: cassandra.speculative_execution.count @@ -381,9 +382,10 @@ groups: It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. - For batch operations, if the individual operations are known to have the same operation name - then that operation name SHOULD be used prepended by `BATCH `, - otherwise `db.operation.name` SHOULD be `BATCH`. + For batch operations, if the individual operations would all have the same + `db.operation.name` when executed as non-batch operations, + then that operation name SHOULD be used prepended by `BATCH `. + Otherwise, `db.operation.name` SHOULD be `BATCH`. requirement_level: required - ref: db.response.status_code brief: > @@ -542,7 +544,8 @@ groups: note: > It is RECOMMENDED to capture the value as provided by the application without attempting to do any case normalization. - For batch operations, if the individual operations are known to have the same collection name + For batch operations, if the individual operations would all have the same + `db.collection.name` when executed as non-batch operations, then that collection name SHOULD be used. requirement_level: required - ref: db.namespace @@ -582,9 +585,10 @@ groups: 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)). - For 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`. + For batch operations, if the individual operations would all have the same + `db.operation.name` when executed as non-batch operations, + then that operation name SHOULD be used prepended by `bulk `. + Otherwise, `db.operation.name` SHOULD be `bulk`. examples: [ 'search', 'ml.close_job', 'cat.aliases' ] - ref: url.full sampling_relevant: true diff --git a/model/destination/common.yaml b/model/destination/common.yaml index e45dd4e365..7941c5dc13 100644 --- a/model/destination/common.yaml +++ b/model/destination/common.yaml @@ -1,8 +1,16 @@ -groups: +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attribute_groups: - id: destination - type: attribute_group + visibility: public + stability: development brief: > - General destination attributes. + 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't 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't expose a clear notion of client and server. attributes: - ref: destination.address - ref: destination.port diff --git a/model/destination/registry.yaml b/model/destination/registry.yaml index e57aca4f26..2caddd6c90 100644 --- a/model/destination/registry.yaml +++ b/model/destination/registry.yaml @@ -1,25 +1,16 @@ -groups: - - id: registry.destination - type: attribute_group - display_name: Destination Attributes - 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't 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't expose a clear notion of client and server. - attributes: - - id: destination.address - type: string - stability: development - brief: "Destination address - domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name." - 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's available. - examples: ['destination.example.com', '10.1.2.80', '/tmp/my.sock'] - - id: destination.port - type: int - stability: development - brief: 'Destination port number' - examples: [3389, 2888] +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attributes: + - key: destination.address + type: string + stability: development + brief: "Destination address - domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name." + 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's available. + examples: ['destination.example.com', '10.1.2.80', '/tmp/my.sock'] + - key: destination.port + type: int + stability: development + brief: 'Destination port number' + examples: [3389, 2888] diff --git a/model/gen-ai/deprecated/spans-deprecated.yaml b/model/gen-ai/deprecated/spans-deprecated.yaml index 6765acdd97..e9a918cbaa 100644 --- a/model/gen-ai/deprecated/spans-deprecated.yaml +++ b/model/gen-ai/deprecated/spans-deprecated.yaml @@ -149,7 +149,7 @@ groups: note: | **Span name** SHOULD be `{gen_ai.operation.name} {gen_ai.request.model}`. Semantic conventions for individual GenAI systems and frameworks MAY specify different span name format - and MUST follow the overall [guidelines for span names](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.59.0/specification/trace/api.md#span). + and MUST follow the overall [guidelines for span names](https://opentelemetry.io/docs/specs/otel/trace/api/#span). **Span kind** SHOULD be `CLIENT` and MAY be set to `INTERNAL` on spans representing call to models running in the same process. It's RECOMMENDED to use `CLIENT` kind diff --git a/model/http/registry.yaml b/model/http/registry.yaml index d91c2d8762..adb7671bfb 100644 --- a/model/http/registry.yaml +++ b/model/http/registry.yaml @@ -204,3 +204,66 @@ groups: brief: State of the HTTP connection in the HTTP connection pool. stability: development examples: ["active", "idle"] + - id: http.request.body.content + type: any + brief: > + The content of the HTTP request body, with any content coding indicated by [Content-Encoding](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding) removed, + captured as a string when the request content is textual or as byte array otherwise. + note: | + Captured value MAY be limited in size and thus value is expected to be truncated in many cases. + When an instrumentation applies a byte-based limit while capturing the body as a string, it SHOULD truncate on a character + boundary so that the recorded value remains valid text. + + Instrumentations MUST NOT capture this attribute by default and MAY provide an option to enable it. + + > [!WARNING] + > This attribute may contain sensitive information. + + When instrumentations record body, they SHOULD capture the body as string whenever possible as it makes it easier to use in human-readable form, + also it allows to implement sanitization if needed. + + Textual content is typically detected based on the [Content-Type](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-type) header using heuristics + such as checking if the type/subtype (compared case-insensitively, ignoring any parameters) starts with `text/`, ends with `/json`, `+json`, `/xml`, `+xml`, `/yaml` or `+yaml`, + is `application/x-www-form-urlencoded`, or if the header declares a `charset` parameter. + + Instrumentations that implement request body recording MUST NOT intentionally introduce side effects such as changing stream position or closing body stream independently from the + application. + + When body is recorded, the instrumentation SHOULD record part of the body that was sent or received at the time HTTP call has ended. + The value MUST be either a string or a byte array. Instrumentations MUST NOT record a parsed or otherwise structured representation of the body, + and MUST NOT base64-encode binary content into a string value. + examples: ['Hello world!', '{"foo": "bar"}'] + stability: development + - id: http.response.body.content + type: any + brief: > + The content of the HTTP response body, with any content coding indicated by [Content-Encoding](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-encoding) removed, + captured as a string when the response content is textual or as byte array otherwise. + note: | + Captured value MAY be limited in size and thus value is expected to be truncated in many cases. + When an instrumentation applies a byte-based limit while capturing the body as a string, it SHOULD truncate on a character + boundary so that the recorded value remains valid text. + + Instrumentations MUST NOT capture this attribute by default and MAY provide an option to enable it. + + > [!WARNING] + > This attribute may contain sensitive information. + + When instrumentations record body, they SHOULD capture the body as string whenever possible as it makes it easier to use in human-readable form, + also it allows to implement sanitization if needed. + + Textual content is typically detected based on the [Content-Type](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-type) header using heuristics + such as checking if the type/subtype (compared case-insensitively, ignoring any parameters) starts with `text/`, ends with `/json`, `+json`, `/xml`, `+xml`, `/yaml` or `+yaml`, + is `application/x-www-form-urlencoded`, or if the header declares a `charset` parameter. + + Instrumentations that implement response body recording MUST NOT intentionally introduce side effects such as changing stream position or closing body stream independently from the + application. + + When body is recorded, the instrumentation SHOULD record part of the body that was sent or received at the time HTTP call has ended. + Note that HTTP client spans [SHOULD end sometime after the response headers are fully read](/docs/http/http-spans.md#http-client-span-duration), + which may or may not include reading the response body, so on client spans this attribute is often absent or holds only part of the body. + + The value MUST be either a string or a byte array. Instrumentations MUST NOT record a parsed or otherwise structured representation of the body, + and MUST NOT base64-encode binary content into a string value. + examples: ['Hello world!', '{"foo": "bar"}'] + stability: development diff --git a/model/http/spans.yaml b/model/http/spans.yaml index dd49374df9..9765ba1f9a 100644 --- a/model/http/spans.yaml +++ b/model/http/spans.yaml @@ -64,6 +64,10 @@ groups: requirement_level: opt_in - ref: user_agent.synthetic.type requirement_level: opt_in + - ref: http.request.body.content + requirement_level: opt_in + - ref: http.response.body.content + requirement_level: opt_in - id: span.http.server type: span @@ -141,3 +145,7 @@ groups: requirement_level: opt_in - ref: user_agent.synthetic.type requirement_level: opt_in + - ref: http.request.body.content + requirement_level: opt_in + - ref: http.response.body.content + requirement_level: opt_in diff --git a/model/k8s/metrics.yaml b/model/k8s/metrics.yaml index 95e0b56011..ac01c651aa 100644 --- a/model/k8s/metrics.yaml +++ b/model/k8s/metrics.yaml @@ -6,13 +6,19 @@ groups: annotations: code_generation: metric_value_type: double - stability: development + stability: release_candidate brief: "The time the Pod has been running." entity_associations: - k8s.pod - note: | + note: > Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available. The actual accuracy would depend on the instrumentation and operating system. + + This metric is derived from the + [PodStats.StartTime](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L122) + field of Kubelet's stats API, where `StartTime` represents the pod sandbox creation time as + [noted in the Kubelet source](https://github.com/kubernetes/kubernetes/blob/v1.36.3/pkg/kubelet/stats/cri_stats_provider.go#L299). + This value resets when the node restarts, as the pod sandbox is recreated. instrument: gauge unit: "s" @@ -80,7 +86,9 @@ groups: stability: development brief: "Pod's CPU usage, measured in CPUs. Range from 0 to the number of allocatable CPUs." note: > - CPU usage of the specific Pod on all available CPU cores, averaged over the sample window + CPU usage of the specific Pod on all available CPU cores. It is calculated as the change in + cumulative CPU time (k8s.pod.cpu.time) over a measurement interval, divided by the elapsed time: + usageCores = (cpuTimeEnd - cpuTimeStart) / elapsedSeconds instrument: gauge unit: "{cpu}" @@ -456,11 +464,17 @@ groups: annotations: code_generation: metric_value_type: double - stability: development + stability: release_candidate brief: "The time the Node has been running." - note: | + note: > Instrumentations SHOULD use a gauge with type `double` and measure uptime in seconds as a floating point number with the highest precision available. The actual accuracy would depend on the instrumentation and operating system. + + This metric is derived from the + [NodeStats.StartTime](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L42) + field of Kubelet's stats API, which is set to the + [system boot time](https://github.com/kubernetes/kubernetes/blob/v1.36.3/pkg/kubelet/server/stats/summary.go#L113). + This value resets when the node reboots. instrument: gauge unit: "s" entity_associations: @@ -559,7 +573,9 @@ groups: stability: development brief: "Node's CPU usage, measured in CPUs. Range from 0 to the number of allocatable CPUs." note: > - CPU usage of the specific Node on all available CPU cores, averaged over the sample window + CPU usage of the specific Node on all available CPU cores. It is calculated as the change in + cumulative CPU time (k8s.node.cpu.time) over a measurement interval, divided by the elapsed time: + usageCores = (cpuTimeEnd - cpuTimeStart) / elapsedSeconds instrument: gauge entity_associations: - k8s.node @@ -575,11 +591,9 @@ groups: stability: development brief: "Node's system container CPU usage, measured in CPUs." note: > - This metric is derived from the - [CPUStats.UsageNanoCores](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L233) - field of the [ContainerStats](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L157C6-L157C20) - of [Node.SystemContainers](https://github.com/kubernetes/kubelet/blob/v0.35.2/pkg/apis/stats/v1alpha1/types.go#L40) - of the Kubelet's stats API. + CPU usage of the specific System Container on all available CPU cores. It is calculated as the change in + cumulative CPU time (k8s.node.system_container.cpu.time) over a measurement interval, divided by the elapsed time: + usageCores = (cpuTimeEnd - cpuTimeStart) / elapsedSeconds instrument: gauge entity_associations: - k8s.node.system_container @@ -1506,7 +1520,7 @@ groups: entity_associations: - k8s.container note: | - See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core for details. + See the [Kubernetes ResourceRequirements API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core) for details. instrument: updowncounter unit: "By" - id: metric.k8s.container.storage.request @@ -1520,7 +1534,7 @@ groups: entity_associations: - k8s.container note: | - See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core for details. + See the [Kubernetes ResourceRequirements API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core) for details. instrument: updowncounter unit: "By" - id: metric.k8s.container.ephemeral_storage.limit @@ -1534,7 +1548,7 @@ groups: entity_associations: - k8s.container note: | - See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core for details. + See the [Kubernetes ResourceRequirements API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core) for details. instrument: updowncounter unit: "By" - id: metric.k8s.container.ephemeral_storage.request @@ -1548,7 +1562,7 @@ groups: entity_associations: - k8s.container note: | - See https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core for details. + See the [Kubernetes ResourceRequirements API](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#resourcerequirements-v1-core) for details. instrument: updowncounter unit: "By" - id: metric.k8s.container.ephemeral_storage.usage @@ -2038,6 +2052,7 @@ groups: See [K8s EndpointConditions](https://kubernetes.io/docs/reference/kubernetes-api/service-resources/endpoint-slice-v1/) for more details. The conditions represent: + - `ready`: Endpoints capable of receiving new connections. - `serving`: Endpoints currently handling traffic. - `terminating`: Endpoints that are being phased out but may still be handling existing connections. diff --git a/model/manifest.yaml b/model/manifest.yaml index a312fd2798..4b00d02ebb 100644 --- a/model/manifest.yaml +++ b/model/manifest.yaml @@ -1,3 +1,3 @@ -schema_url: https://opentelemetry.io/schemas/1.44.0-unreleased +schema_url: https://opentelemetry.io/schemas/1.45.0-unreleased description: Registry of core semantic conventions for OpenTelemetry. stability: development diff --git a/model/network/registry.yaml b/model/network/registry.yaml index 491ddc2763..2f2a0e7138 100644 --- a/model/network/registry.yaml +++ b/model/network/registry.yaml @@ -239,7 +239,7 @@ groups: type: string brief: 'The network interface name.' examples: [ 'lo', 'eth0' ] - stability: development + stability: release_candidate - id: network.connection.state type: members: diff --git a/model/otel/metrics.yaml b/model/otel/metrics.yaml index e1d0c1d944..70526a9d76 100644 --- a/model/otel/metrics.yaml +++ b/model/otel/metrics.yaml @@ -73,14 +73,22 @@ groups: note: | For successful processing, `error.type` MUST NOT be set. For failed processing, `error.type` MUST contain the failure cause. SDK Batching Span Processors MUST use `queue_full` as the value of `error.type` for spans dropped due to a full queue. - SDK Span Processors MUST use `already_shutdown` as the value of `error.type` for spans dropped because the processor has already been shut down. - For 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. + If a processor reports a span dropped because it has already been shut down, `error.type` MUST be `already_shutdown`. + Whether and when a processor drops such spans is governed by the SDK specification, not by this metric. + For the SDK Simple and Batching Span Processors, a span MUST be counted as successfully processed at the point the processor + invokes the export operation. For batching processors, all spans in the batch passed to the exporter are counted at that point; + spans accepted into the processor's queue but not yet passed to the exporter have not been processed. + Implementations MUST NOT delay this count until the export operation concludes, and the outcome of the export operation, + including an immediate failure of the invocation itself, MUST NOT affect this metric. + Export outcomes are reported by `otel.sdk.exporter.span.exported`. instrument: counter unit: "{span}" attributes: - ref: otel.component.type - ref: otel.component.name - ref: error.type + requirement_level: + conditionally_required: if and only if an error has occurred. brief: A low-cardinality description of the failure reason. examples: ["queue_full", "already_shutdown"] @@ -134,6 +142,8 @@ groups: requirement_level: recommended: when applicable - ref: error.type + requirement_level: + conditionally_required: if and only if an error has occurred. examples: ["rejected", "timeout", "500", "java.net.UnknownHostException"] - id: metric.otel.sdk.log.created @@ -143,9 +153,15 @@ groups: code_generation: metric_value_type: int stability: development - brief: "The number of logs submitted to enabled SDK Loggers." + brief: "The number of log records submitted to an enabled `Logger`." instrument: counter unit: "{log_record}" + note: | + In OpenTelemetry SDKs a `Logger` is enabled by default, and can be disabled via configuration i.e. `LoggerConfig.enabled` = `false` when supported; + a disabled `Logger` is a No-op: emitting to it has no effect, so its records are not counted. + Every log record submitted to an enabled `Logger` is counted, even if it is later filtered or dropped within the SDK + (e.g. by minimum severity or trace-based rules, or by a processor or the export pipeline), making this metric the top of the log delivery funnel. + Records not submitted to the SDK are not counted (e.g. a caller that skips calling `Emit()` based on an `Enabled()` check, or an upstream logging library that filters first). - id: metric.otel.sdk.processor.log.queue.size type: metric @@ -190,15 +206,22 @@ groups: note: | For successful processing, `error.type` MUST NOT be set. For failed processing, `error.type` MUST contain the failure cause. SDK Batching Log Record Processors MUST use `queue_full` as the value of `error.type` for log records dropped due to a full queue. - SDK Log Record Processors MUST use `already_shutdown` as the value of `error.type` for log records dropped because the processor has already been shut down. - For 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, - not when the corresponding export call has finished. + If a processor reports a log record dropped because it has already been shut down, `error.type` MUST be `already_shutdown`. + Whether and when a processor drops such log records is governed by the SDK specification, not by this metric. + For the SDK Simple and Batching Log Record Processors, a log record MUST be counted as successfully processed at the point the + processor invokes the export operation. For batching processors, all log records in the batch passed to the exporter are counted + at that point; log records accepted into the processor's queue but not yet passed to the exporter have not been processed. + Implementations MUST NOT delay this count until the export operation concludes, and the outcome of the export operation, + including an immediate failure of the invocation itself, MUST NOT affect this metric. + Export outcomes are reported by `otel.sdk.exporter.log.exported`. instrument: counter unit: "{log_record}" attributes: - ref: otel.component.type - ref: otel.component.name - ref: error.type + requirement_level: + conditionally_required: if and only if an error has occurred. brief: A low-cardinality description of the failure reason. examples: ["queue_full", "already_shutdown"] @@ -252,6 +275,8 @@ groups: requirement_level: recommended: when applicable - ref: error.type + requirement_level: + conditionally_required: if and only if an error has occurred. examples: ["rejected", "timeout", "500", "java.net.UnknownHostException"] - id: metric.otel.sdk.exporter.metric_data_point.inflight @@ -304,6 +329,8 @@ groups: requirement_level: recommended: when applicable - ref: error.type + requirement_level: + conditionally_required: if and only if an error has occurred. examples: ["rejected", "timeout", "500", "java.net.UnknownHostException"] - id: metric.otel.sdk.metric_reader.collection.duration @@ -359,7 +386,7 @@ groups: brief: The HTTP status code of the last HTTP request performed in scope of this export call. requirement_level: recommended: when applicable - - ref: rpc.response.status_code + - ref: rpc.status_code brief: The gRPC status code of the last gRPC request performed in scope of this export call. requirement_level: recommended: when applicable diff --git a/model/process/metrics.yaml b/model/process/metrics.yaml index 8b22b9ec76..97ebc2392b 100644 --- a/model/process/metrics.yaml +++ b/model/process/metrics.yaml @@ -89,6 +89,48 @@ groups: entity_associations: - process + - id: metric.process.disk.operations + type: metric + metric_name: process.disk.operations + annotations: + code_generation: + metric_value_type: int + stability: development + brief: "Number of disk operations performed by the process." + instrument: counter + unit: "{operation}" + attributes: + - ref: disk.io.direction + requirement_level: required + entity_associations: + - process + + - id: metric.process.memory.utilization + type: metric + metric_name: process.memory.utilization + annotations: + code_generation: + metric_value_type: double + stability: development + brief: "Percentage of total physical memory that is used by the process." + instrument: gauge + unit: "1" + entity_associations: + - process + + - id: metric.process.signals_pending + type: metric + metric_name: process.signals_pending + annotations: + code_generation: + metric_value_type: int + stability: development + brief: "Number of pending signals for the process." + instrument: updowncounter + unit: "{signal}" + entity_associations: + - process + - id: metric.process.network.io type: metric metric_name: process.network.io diff --git a/model/rpc/common.yaml b/model/rpc/common.yaml index f09b48bcc2..deba52fe26 100644 --- a/model/rpc/common.yaml +++ b/model/rpc/common.yaml @@ -22,7 +22,7 @@ groups: - ref: server.port requirement_level: conditionally_required: if applicable and if `server.address` is set. - - ref: rpc.response.status_code + - ref: rpc.status_code requirement_level: conditionally_required: if available. - ref: error.type @@ -34,9 +34,9 @@ groups: `error.type` SHOULD be set to the exception type (its fully-qualified class name, if applicable) or a component-specific, low cardinality error identifier. - If a response status code is returned and status indicates an error, + If a status code is returned and it indicates an error, `error.type` SHOULD be set to that status code. Check system-specific conventions - for the details on which values of `rpc.response.status_code` are considered errors. + for the details on which values of `rpc.status_code` are considered errors. The `error.type` value SHOULD be predictable and SHOULD have low cardinality. Instrumentations SHOULD document the list of errors they report. diff --git a/model/rpc/deprecated/registry-deprecated.yaml b/model/rpc/deprecated/registry-deprecated.yaml index 88f251752e..d5af025cd2 100644 --- a/model/rpc/deprecated/registry-deprecated.yaml +++ b/model/rpc/deprecated/registry-deprecated.yaml @@ -75,6 +75,14 @@ groups: deprecated: reason: renamed renamed_to: rpc.response.metadata + - id: rpc.response.status_code + type: string + stability: release_candidate + brief: "Deprecated, use `rpc.status_code` instead." + examples: ["OK", "DEADLINE_EXCEEDED", "-32602"] + deprecated: + reason: renamed + renamed_to: rpc.status_code - id: rpc.grpc.status_code type: members: @@ -147,10 +155,10 @@ groups: stability: development value: 16 stability: development - brief: "Deprecated, use string representation on the `rpc.response.status_code` attribute instead." + brief: "Deprecated, use string representation on the `rpc.status_code` attribute instead." deprecated: reason: uncategorized - note: "Use string representation of the gRPC status code on the `rpc.response.status_code` attribute." + note: "Use string representation of the gRPC status code on the `rpc.status_code` attribute." - id: rpc.connect_rpc.error_code type: members: @@ -203,18 +211,18 @@ groups: value: unauthenticated stability: development stability: development - brief: "Deprecated, use `rpc.response.status_code` attribute instead." + brief: "Deprecated, use `rpc.status_code` attribute instead." deprecated: reason: renamed - renamed_to: rpc.response.status_code + renamed_to: rpc.status_code - id: rpc.jsonrpc.error_code type: int stability: development - brief: "Deprecated, use string representation on the `rpc.response.status_code` attribute instead." + brief: "Deprecated, use string representation on the `rpc.status_code` attribute instead." examples: [-32700, 100] deprecated: reason: uncategorized - note: "Use string representation of the error code on the `rpc.response.status_code` attribute." + note: "Use string representation of the error code on the `rpc.status_code` attribute." - id: rpc.jsonrpc.error_message type: string stability: development diff --git a/model/rpc/metrics.yaml b/model/rpc/metrics.yaml index 8ae20199cd..4f4463e73a 100644 --- a/model/rpc/metrics.yaml +++ b/model/rpc/metrics.yaml @@ -17,17 +17,17 @@ groups: brief: "RPC server metric attributes." extends: attributes.metrics.rpc.client attributes: - - ref: rpc.system.name - requirement_level: required - ref: server.address - note: "" requirement_level: opt_in + note: > + `server.address` and `server.port` describe the address the client + used to reach this server, as reported by the transport or RPC + framework. Instrumentations SHOULD NOT use actual network-level + connection information to populate these attributes. If the address + used by the client is unavailable, instrumentations SHOULD NOT set + these attributes. - ref: server.port - note: "" requirement_level: opt_in - - ref: rpc.method - requirement_level: - conditionally_required: if available. # RPC Server metrics - id: metric.rpc.server.call.duration diff --git a/model/rpc/registry.yaml b/model/rpc/registry.yaml index 68d20e565f..4a649c686d 100644 --- a/model/rpc/registry.yaml +++ b/model/rpc/registry.yaml @@ -4,7 +4,7 @@ groups: display_name: Remote Procedure Call (RPC) Attributes brief: 'This document defines attributes for remote procedure calls.' attributes: - - id: rpc.response.status_code + - id: rpc.status_code type: string stability: release_candidate brief: Status code of the RPC returned by the RPC server or generated by the client @@ -13,7 +13,7 @@ groups: warning, or differentiate between various types of successful outcomes. Semantic conventions for individual RPC frameworks SHOULD document what - `rpc.response.status_code` means in the context of that system and which values + `rpc.status_code` means in the context of that system and which values are considered to represent errors. examples: ["OK", "DEADLINE_EXCEEDED", "-32602"] - id: rpc.request.metadata diff --git a/model/rpc/spans.yaml b/model/rpc/spans.yaml index 20194777c3..d4f6ecbe9a 100644 --- a/model/rpc/spans.yaml +++ b/model/rpc/spans.yaml @@ -25,6 +25,26 @@ groups: requirement_level: conditionally_required: If and only if it's different than `rpc.method`. + - id: attributes.rpc.server.server + type: attribute_group + extends: rpc + brief: > + `server.address` and `server.port` for RPC server spans. + attributes: + - ref: server.address + requirement_level: + recommended: when available. + note: > + `server.address` and `server.port` describe the address the client + used to reach this server, as reported by the transport or RPC + framework. Instrumentations SHOULD NOT use actual network-level + connection information to populate these attributes. If the address + used by the client is unavailable, instrumentations SHOULD NOT set + these attributes. + - ref: server.port + requirement_level: + conditionally_required: if applicable and if `server.address` is set. + - id: span.rpc.call.client type: span stability: release_candidate @@ -56,7 +76,7 @@ groups: - id: span.rpc.call.server type: span stability: release_candidate - extends: rpc + extends: attributes.rpc.server.server span_kind: server brief: This span represents an incoming Remote Procedure Call (RPC). note: | @@ -94,7 +114,7 @@ groups: extends: rpc span_kind: client attributes: - - ref: rpc.response.status_code + - ref: rpc.status_code requirement_level: conditionally_required: if available. brief: The [error code](https://connectrpc.com//docs/protocol/#error-codes) of the Connect response. @@ -118,7 +138,7 @@ groups: - id: span.rpc.connect_rpc.call.server type: span stability: development - extends: rpc + extends: attributes.rpc.server.server span_kind: server brief: This span represents an incoming Remote Procedure Call (RPC). note: | @@ -131,7 +151,7 @@ groups: **Span status**: refer to the [Recording Errors](/docs/general/recording-errors.md) document for details on how to record span status. attributes: - - ref: rpc.response.status_code + - ref: rpc.status_code requirement_level: conditionally_required: if available. brief: The [error code](https://connectrpc.com/docs/protocol/#error-codes) of the Connect response. @@ -161,14 +181,14 @@ groups: **Span kind** MUST be `CLIENT`. **Span status**: refer to the [Recording Errors](/docs/general/recording-errors.md) - document for details on how to record span status. See also `rpc.response.status_code` attribute + document for details on how to record span status. See also `rpc.status_code` attribute for the details on which values classify as errors. extends: rpc span_kind: client attributes: - ref: rpc.method requirement_level: required - - ref: rpc.response.status_code + - ref: rpc.status_code requirement_level: required brief: > The string representation of the [status code](https://github.com/grpc/grpc/blob/v1.75.0/doc/statuscodes.md) @@ -227,7 +247,7 @@ groups: - id: span.rpc.grpc.call.server type: span stability: release_candidate - extends: rpc + extends: attributes.rpc.server.server span_kind: server brief: This span represents an incoming Remote Procedure Call (RPC). note: | @@ -238,10 +258,10 @@ groups: **Span kind** MUST be `SERVER`. **Span status**: refer to the [Recording Errors](/docs/general/recording-errors.md) - document for details on how to record span status. See also `rpc.response.status_code` attribute + document for details on how to record span status. See also `rpc.status_code` attribute for the details on which values classify as errors. attributes: - - ref: rpc.response.status_code + - ref: rpc.status_code requirement_level: required brief: > The string representation of the [status code](https://github.com/grpc/grpc/blob/v1.75.0/doc/statuscodes.md) @@ -260,6 +280,25 @@ groups: requirement_level: opt_in - ref: rpc.response.metadata requirement_level: opt_in + - ref: server.address + note: | + Instrumentations SHOULD populate `server.address` from the host + component of the HTTP/2 `:authority` pseudo-header the client used to + reach this server. + + Instrumentations SHOULD NOT use actual network-level connection + information for this purpose. + - ref: server.port + requirement_level: + conditionally_required: If `server.address` is set and the port is present in `:authority`. + note: | + Instrumentations SHOULD populate `server.port` from the port + component of the HTTP/2 `:authority` pseudo-header the client used to + reach this server. + + Instrumentations SHOULD NOT use actual network-level connection + information for this purpose. + examples: [50051] - id: span.rpc.jsonrpc.call.client type: span @@ -297,7 +336,7 @@ groups: When tracing instrumentation converts RPC method to `_OTHER`, it MUST also set `rpc.method_original` span attribute to the original value. requirement_level: opt_in - - ref: rpc.response.status_code + - ref: rpc.status_code brief: > The [`error.code`](https://www.jsonrpc.org/specification#error_object) property of response if it is an error response recorded as a string. @@ -316,7 +355,7 @@ groups: - id: span.rpc.jsonrpc.call.server type: span stability: development - extends: rpc + extends: attributes.rpc.server.server span_kind: server brief: This span represents an incoming Remote Procedure Call (RPC). note: | @@ -349,7 +388,7 @@ groups: When tracing instrumentation converts RPC method to `_OTHER`, it MUST also set `rpc.method_original` span attribute to the original value. requirement_level: opt_in - - ref: rpc.response.status_code + - ref: rpc.status_code brief: > The [`error.code`](https://www.jsonrpc.org/specification#error_object) property of response recorded as a string. @@ -370,14 +409,14 @@ groups: **Span kind** MUST be `CLIENT`. **Span status** Refer to the [Recording Errors](/docs/general/recording-errors.md) - document for details on how to record span status. See also `rpc.response.status_code` attribute + document for details on how to record span status. See also `rpc.status_code` attribute for the details on which values classify as errors. extends: rpc span_kind: client attributes: - ref: rpc.method requirement_level: required - - ref: rpc.response.status_code + - ref: rpc.status_code requirement_level: required brief: > The string representation of the Dubbo response status code returned by the server or generated by the client. @@ -469,7 +508,7 @@ groups: - id: span.rpc.dubbo.call.server type: span stability: release_candidate - extends: rpc + extends: attributes.rpc.server.server span_kind: server brief: This span represents an incoming Remote Procedure Call (RPC). note: | @@ -480,10 +519,10 @@ groups: **Span kind** MUST be `SERVER`. **Span status** Refer to the [Recording Errors](/docs/general/recording-errors.md) - document for details on how to record span status. See also `rpc.response.status_code` attribute + document for details on how to record span status. See also `rpc.status_code` attribute for the details on which values classify as errors. attributes: - - ref: rpc.response.status_code + - ref: rpc.status_code requirement_level: required brief: > The string representation of the Dubbo response status code returned by the server. diff --git a/model/server/common.yaml b/model/server/common.yaml index 08806f02b3..d530e0fb29 100644 --- a/model/server/common.yaml +++ b/model/server/common.yaml @@ -1,8 +1,16 @@ -groups: +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attribute_groups: - id: server - type: attribute_group + visibility: public + stability: stable brief: > - General server attributes. + 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't 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. attributes: - ref: server.address - ref: server.port diff --git a/model/server/registry.yaml b/model/server/registry.yaml index ba01672bfd..484c089867 100644 --- a/model/server/registry.yaml +++ b/model/server/registry.yaml @@ -1,28 +1,19 @@ -groups: - - id: registry.server - type: attribute_group - display_name: Server Attributes - 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't 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. - attributes: - - id: server.address - stability: stable - type: string - brief: "Server domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name." - note: > - When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent - the server address behind any intermediaries, for example proxies, if it's available. - examples: ['example.com', '10.1.2.80', '/tmp/my.sock'] - - id: server.port - stability: stable - type: int - brief: Server port number. - note: > - When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent - the server port behind any intermediaries, for example proxies, if it's available. - examples: [80, 8080, 443] +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attributes: + - key: server.address + stability: stable + type: string + brief: "Server domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name." + note: > + When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent + the server address behind any intermediaries, for example proxies, if it's available. + examples: ['example.com', '10.1.2.80', '/tmp/my.sock'] + - key: server.port + stability: stable + type: int + brief: Server port number. + note: > + When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent + the server port behind any intermediaries, for example proxies, if it's available. + examples: [80, 8080, 443] diff --git a/model/session/common.yaml b/model/session/common.yaml index e01af0acef..e355bb746b 100644 --- a/model/session/common.yaml +++ b/model/session/common.yaml @@ -1,14 +1,19 @@ -groups: +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attribute_groups: - id: session-id - type: attribute_group + visibility: public + stability: development brief: > Session is defined as the period of time encompassing all activities performed by the application and the actions executed by the end user. + Consequently, a Session is represented as a collection of Logs, Events, and Spans emitted by the Client Application throughout the Session's duration. Each Session is assigned a unique identifier, which is included as an attribute in the Logs, Events, and Spans generated during the Session's lifecycle. + When 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. diff --git a/model/session/events.yaml b/model/session/events.yaml index edc059470c..b0166190e6 100644 --- a/model/session/events.yaml +++ b/model/session/events.yaml @@ -1,8 +1,8 @@ -groups: - - id: event.session.start +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +events: + - name: session.start stability: development - type: event - name: session.start brief: > Indicates that a new session has been started, optionally linking to the prior session. note: > @@ -26,10 +26,9 @@ groups: the `session.previous_id` SHOULD be included in the event. The `session.id` and `session.previous_id` attributes MUST have different values. brief: The previous `session.id` for this user, when known. - - id: event.session.end + + - name: session.end stability: development - type: event - name: session.end brief: > Indicates that a session has ended. note: > diff --git a/model/session/registry.yaml b/model/session/registry.yaml index 3c6c0e4920..0dfffc219d 100644 --- a/model/session/registry.yaml +++ b/model/session/registry.yaml @@ -1,26 +1,13 @@ -groups: - - id: registry.session - type: attribute_group - display_name: Session Attributes - brief: > - Session is defined as the period of time encompassing all activities performed by the application and the actions - executed by the end user. - - Consequently, a Session is represented as a collection of Logs, Events, and Spans emitted by the Client Application - throughout the Session's duration. Each Session is assigned a unique identifier, which is included as an attribute in - the Logs, Events, and Spans generated during the Session's lifecycle. - - When 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. - attributes: - - id: session.id - type: string - stability: development - brief: "A unique ID to identify a session." - examples: "00112233-4455-6677-8899-aabbccddeeff" - - id: session.previous_id - type: string - stability: development - brief: "The previous `session.id` for this user, when known." - examples: "00112233-4455-6677-8899-aabbccddeeff" +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attributes: + - key: session.id + type: string + stability: development + brief: "A unique ID to identify a session." + examples: ['00112233-4455-6677-8899-aabbccddeeff'] + - key: session.previous_id + type: string + stability: development + brief: "The previous `session.id` for this user, when known." + examples: ['00112233-4455-6677-8899-aabbccddeeff'] diff --git a/model/source/common.yaml b/model/source/common.yaml index 5644041e24..2e979e667e 100644 --- a/model/source/common.yaml +++ b/model/source/common.yaml @@ -1,8 +1,16 @@ -groups: +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attribute_groups: - id: source - type: attribute_group + visibility: public + stability: development brief: > - General source attributes. + 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't 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't expose a clear notion of client and server. attributes: - ref: source.address - ref: source.port diff --git a/model/source/registry.yaml b/model/source/registry.yaml index a1cd9b7196..f31bf9504f 100644 --- a/model/source/registry.yaml +++ b/model/source/registry.yaml @@ -1,25 +1,16 @@ -groups: - - id: registry.source - type: attribute_group - display_name: Source Attributes - 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't 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't expose a clear notion of client and server. - attributes: - - id: source.address - type: string - stability: development - brief: "Source address - domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name." - 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's available. - examples: ['source.example.com', '10.1.2.80', '/tmp/my.sock'] - - id: source.port - type: int - stability: development - brief: 'Source port number' - examples: [3389, 2888] +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attributes: + - key: source.address + type: string + stability: development + brief: "Source address - domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name." + 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's available. + examples: ['source.example.com', '10.1.2.80', '/tmp/my.sock'] + - key: source.port + type: int + stability: development + brief: 'Source port number' + examples: [3389, 2888] diff --git a/model/thread/common.yaml b/model/thread/common.yaml index 572fb26996..2159d1c5eb 100644 --- a/model/thread/common.yaml +++ b/model/thread/common.yaml @@ -1,6 +1,9 @@ -groups: +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attribute_groups: - id: thread - type: attribute_group + visibility: public + stability: development brief: > These attributes may be used for any operation to store information about a thread that started a span. attributes: diff --git a/model/thread/registry.yaml b/model/thread/registry.yaml index 5a7d5c0879..3fde8a4f69 100644 --- a/model/thread/registry.yaml +++ b/model/thread/registry.yaml @@ -1,57 +1,53 @@ -groups: - - id: registry.thread - type: attribute_group - display_name: Thread Attributes +# yaml-language-server: $schema=https://raw.githubusercontent.com/open-telemetry/weaver/v0.25.1/schemas/semconv.schema.v2.json +file_format: definition/2 +attributes: + - key: thread.id + type: int + stability: development brief: > - These attributes may be used for any operation to store information about a thread that started a span. - attributes: - - id: thread.id - type: int - stability: development - brief: > - Current "managed" thread ID (as opposed to OS thread ID). - note: > + Current "managed" thread ID (as opposed to OS thread ID). + note: > - Examples of where the value can be extracted from: + Examples of where the value can be extracted from: - | Language or platform | Source | + | Language or platform | Source | - | --- | --- | + | --- | --- | - | JVM | `Thread.currentThread().threadId()` | + | JVM | `Thread.currentThread().threadId()` | - | .NET | `Thread.CurrentThread.ManagedThreadId` | + | .NET | `Thread.CurrentThread.ManagedThreadId` | - | Python | `threading.current_thread().ident` | + | Python | `threading.current_thread().ident` | - | Ruby | `Thread.current.object_id` | + | Ruby | `Thread.current.object_id` | - | C++ | `std::this_thread::get_id()` | + | C++ | `std::this_thread::get_id()` | - | Erlang | `erlang:self()` | - examples: 42 - - id: thread.name - type: string - stability: development - brief: > - Current thread name. - note: > + | Erlang | `erlang:self()` | + examples: [42] + - key: thread.name + type: string + stability: development + brief: > + Current thread name. + note: > - Examples of where the value can be extracted from: + Examples of where the value can be extracted from: - | Language or platform | Source | + | Language or platform | Source | - | --- | --- | + | --- | --- | - | JVM | `Thread.currentThread().getName()` | + | JVM | `Thread.currentThread().getName()` | - | .NET | `Thread.CurrentThread.Name` | + | .NET | `Thread.CurrentThread.Name` | - | Python | `threading.current_thread().name` | + | Python | `threading.current_thread().name` | - | Ruby | `Thread.current.name` | + | Ruby | `Thread.current.name` | - | Erlang | `erlang:process_info(self(), registered_name)` | - examples: main + | Erlang | `erlang:process_info(self(), registered_name)` | + examples: ['main'] diff --git a/model/url/registry.yaml b/model/url/registry.yaml index 598de23c34..ea27c2cbbe 100644 --- a/model/url/registry.yaml +++ b/model/url/registry.yaml @@ -58,9 +58,15 @@ groups: * [`X-Amz-Signature`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Credential`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Security-Token`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) + * [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/developerguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth) + * [`Signature`](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html) * [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token) * [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls) + Several of these keys are used by more than one service or signing scheme. Each link + points to one representative usage rather than an exhaustive list, and does not narrow + the scope of the key to the linked service or signing scheme. + This list is subject to change over time. Matching of query parameter keys against the sensitive list SHOULD be case-sensitive. @@ -122,9 +128,15 @@ groups: * [`X-Amz-Signature`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Credential`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) * [`X-Amz-Security-Token`](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-authentication-methods.html) + * [`AWSAccessKeyId`](https://docs.aws.amazon.com/AmazonS3/latest/developerguide/RESTAuthentication.html#RESTAuthenticationQueryStringAuth) + * [`Signature`](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html) * [`sig`](https://learn.microsoft.com/azure/storage/common/storage-sas-overview#sas-token) * [`X-Goog-Signature`](https://cloud.google.com/storage/docs/access-control/signed-urls) + Several of these keys are used by more than one service or signing scheme. Each link + points to one representative usage rather than an exhaustive list, and does not narrow + the scope of the key to the linked service or signing scheme. + This list is subject to change over time. Matching of query parameter keys against the sensitive list SHOULD be case-sensitive. diff --git a/package-lock.json b/package-lock.json index 3c1fab2df6..1fd6c7e893 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,9 +7,9 @@ "devDependencies": { "cspell": "10.0.1", "doctoc": "2.5.0", - "markdownlint-cli2": "0.23.1", + "markdownlint-cli2": "0.23.2", "prettier": "3.9.6", - "textlint": "15.7.1", + "textlint": "15.8.0", "textlint-filter-rule-allowlist": "4.0.0", "textlint-filter-rule-comments": "1.3.0", "textlint-rule-common-misspellings": "1.0.1", @@ -272,9 +272,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-cpp": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-7.0.2.tgz", - "integrity": "sha512-dfbeERiVNeqmo/npivdR6rDiBCqZi3QtjH2Z0HFcXwpdj6i97dX1xaKyK2GUsO/p4u1TOv63Dmj5Vm48haDpuA==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-7.1.0.tgz", + "integrity": "sha512-rcjycobioQUd9Jm/Y1n8U+sq6ytpZ0iV8AYIo+vyEFfutC5x7g6hL6Fh3bCdh6IporGHRqfEutGK/4sfopD2ZA==", "dev": true, "license": "MIT" }, @@ -349,9 +349,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.13.tgz", - "integrity": "sha512-00rpydUxKNWY2xxrSx+h46aNWLvbkJdd57SsnEFt24fbs1fROhXZ6XSQu+gQz/zNuiCvFi4Ro3ej9DLbEdWQmQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.2.0.tgz", + "integrity": "sha512-5PmCHv+AhY0LVNo3bE1FdRKMmw1esKj83GPwLymnVPYNtlI2Jf6y27EjC0azg4zny5keWmku0GQiMf55Fi+qeA==", "dev": true, "license": "CC BY-SA 4.0" }, @@ -516,9 +516,9 @@ } }, "node_modules/@cspell/dict-monkeyc": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.12.tgz", - "integrity": "sha512-MN7Vs11TdP5mbdNFQP5x2Ac8zOBm97ARg6zM5Sb53YQt/eMvXOMvrep7+/+8NJXs0jkp70bBzjqU4APcqBFNAw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.1.0.tgz", + "integrity": "sha512-mc/hgvSy/emOIYtc8kuVEaLUlnaERunfAubfJ5plUXq6s0A69bcukJzUzSt9C0UTCwS28641ILRPv80m3L9QbA==", "dev": true, "license": "MIT" }, @@ -530,9 +530,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.43", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.43.tgz", - "integrity": "sha512-H2gYwtu59dNO9662Uq0usfuhyNd7lZJE1C61a/UXcpRyWWSrTo2Bz+vwGYp1bXZ1LmjXadqvwJ8ArFlGdiadNQ==", + "version": "5.2.45", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.45.tgz", + "integrity": "sha512-BXUmMMspl+AhPIk/ZOjxlNu5k1yCRAzSMzdNPYM+2vaBL8ffev7ZFfOyBCDk8kgcpsHotz8/3fLNX+xwWaDR2w==", "dev": true, "license": "MIT" }, @@ -558,9 +558,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.29", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.29.tgz", - "integrity": "sha512-OnEt1a35iuQzc2Ize1qU/43ZyF10urRKAm+mlTz++vnAgDLBHpKfWakpSK50nyL5/1WvyQ8BaMjb52MBLEpTeA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.3.0.tgz", + "integrity": "sha512-afVcbsCOYtpdvu8I4ANiIXVcxqxzrno+oEuObNx9hwpvEmf/AbXQBk9CMjFR9QZllcfnOfpjCSXgGuTna5hKQA==", "dev": true, "license": "MIT", "dependencies": { @@ -603,9 +603,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.2.4.tgz", - "integrity": "sha512-z6y/TGH3QNf5wB4pVvN/P3GfFEW/Whf6QAekNsIn06VKl95dnamfpkPWqV8rEtCixQFaKalb5+y9hRQXH3XQ1g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.3.0.tgz", + "integrity": "sha512-HEMvFWeItTA5A/MFxrH5fpOz9DU7ormXaGp1PJPsd0jt+qqaYNpevGIgTfIhfp/hsabPyAGa51N/DeDT0ZMg2Q==", "dev": true, "license": "MIT" }, @@ -712,19 +712,6 @@ "node": ">=22.18.0" } }, - "node_modules/@hono/node-server": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.0.12.tgz", - "integrity": "sha512-eWpQYr67tqJLeaSUl0Q+TquuYfUdTibpOJlUMV2FfUP7+KqCC5TufnwnlXL6mobZBJbGAYRd7ZvEBDCbLInjhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "peerDependencies": { - "hono": "^4" - } - }, "node_modules/@keyv/bigmap": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", @@ -749,45 +736,31 @@ "dev": true, "license": "MIT" }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", - "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", + "node_modules/@modelcontextprotocol/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/core/-/core-2.0.0.tgz", + "integrity": "sha512-pJCEwGG7Lfr/+PQp9ZTwKXNeO5wzbfKL7H3MYpCorM4oFBoQrdjnBgEoqG+RjhsvS1FKrDbKux+M1HhlnGWqcA==", "dev": true, "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.9 || ^2.0.5", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.2.1", - "express-rate-limit": "^8.2.1", - "hono": "^4.11.4", - "jose": "^6.1.3", - "json-schema-typed": "^8.0.2", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.1" + "zod": "^4.2.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" + "node": ">=20" + } + }, + "node_modules/@modelcontextprotocol/server": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.0.0.tgz", + "integrity": "sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/core": "2.0.0", + "zod": "^4.2.0" }, - "peerDependenciesMeta": { - "@cfworker/json-schema": { - "optional": true - }, - "zod": { - "optional": false - } + "engines": { + "node": ">=20" } }, "node_modules/@nodelib/fs.scandir": { @@ -842,72 +815,74 @@ } }, "node_modules/@textlint/ast-node-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.7.1.tgz", - "integrity": "sha512-Wii5UgUKFEh9Uv6wbq1zr4/Kf+dtjiUuzPrrXzKp8H+ifkvKNzi23V4Nz+6wVyHQn5T28AFuc8VH8OtzvGYecA==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-15.8.0.tgz", + "integrity": "sha512-5CiH9COYmovWmExQgs7763DzX6Gy9zjkjJ7JxCC95wyTcjwQn/8poNF6fv3qzRlmx8CRRde8DHr9FcgAAiPzgw==", "dev": true, "license": "MIT" }, "node_modules/@textlint/ast-tester": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-15.7.1.tgz", - "integrity": "sha512-0CZWFKB7D21y8LA4Dv5irOX1/iGDGwM4OTaW7PxJpfRhXCL40uMOhS+P+1bjFmpSkM/DF/5HPRph0E744iJobw==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-15.8.0.tgz", + "integrity": "sha512-EoNPm/Xpv59BYQimlUcEsD8iHWVLMiyA/U66ATQCiZQTrvS93C67q3V630fhCJWeSuSR660BGadHGX1jv+IeTg==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.7.1", + "@textlint/ast-node-types": "15.8.0", "debug": "^4.4.3" } }, "node_modules/@textlint/ast-traverse": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-15.7.1.tgz", - "integrity": "sha512-tFgFiSbh6fdQo7MF4FYQoQBHqM8BoTEfvubGXm7Xi65QRYefNz+iuXYaoyto6OlMj5M95u9Gk/Ni7577rZ8uow==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-15.8.0.tgz", + "integrity": "sha512-N/FhYDJLXUFOIlsRAuyx78ll2/O2SCU5mZBB1jWQhX71653YcrJvFf6r+EavnKlxNie0mcaTt0hrCnX2q0SdLg==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.7.1" + "@textlint/ast-node-types": "15.8.0" } }, "node_modules/@textlint/config-loader": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-15.7.1.tgz", - "integrity": "sha512-K5KTpQFclHn0zby48wvckhOzUg2gXJyFXeagYt9mFgYOnCgMzTYL/P/TIE6ljhtZ0arhK1aH0e1uFZYasGbXog==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-15.8.0.tgz", + "integrity": "sha512-iJjgkZxURc7YAIRwNkhjsD2d0j3zKzlyRAw5EAmX/Rxr1/jBXPm2taaLOX1yMaaeZxVpWZ+7mauU5B96qjfQpQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/kernel": "15.7.1", - "@textlint/module-interop": "15.7.1", - "@textlint/resolver": "15.7.1", - "@textlint/types": "15.7.1", - "@textlint/utils": "15.7.1", + "@textlint/kernel": "15.8.0", + "@textlint/module-interop": "15.8.0", + "@textlint/resolver": "15.8.0", + "@textlint/types": "15.8.0", + "@textlint/utils": "15.8.0", "debug": "^4.4.3", "rc-config-loader": "^4.1.4" } }, "node_modules/@textlint/feature-flag": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-15.7.1.tgz", - "integrity": "sha512-ZFIJ2edV7K04UJ7/7ptvL61vs54MHYzDaIfTW+vaXwq5KDeCD2QyjsKt+TbOHQ8n8sW6fO171n4p0gwRo01Ojg==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-15.8.0.tgz", + "integrity": "sha512-qvk6DV9lazH9EVHGLglvO9LwJbi22yy2LdZDQNH4EvlGk5+cNxbV1yZzuLdk+7elOuK2Lb9l5geMpZPa/j11XQ==", "dev": true, "license": "MIT" }, "node_modules/@textlint/fixer-formatter": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-15.7.1.tgz", - "integrity": "sha512-vqF17A1aUJeIulvWQUWX4SX0tYWT6Burx8L1qPHbf8ZlpUAHSXPVzorwmZyw6bAkKl6cODHj2EtK2HrnqjV1Ow==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-15.8.0.tgz", + "integrity": "sha512-/Lwo9E6Kvltb/cYsOCKvBwVRz4GZ8CLgOVNTDRdyYVtXE6EGk5utCPCdzjEm1h3C6bdXcnoArGvgyhlFw7AsUg==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/module-interop": "15.7.1", - "@textlint/resolver": "15.7.1", - "@textlint/types": "15.7.1", - "chalk": "^4.1.2", + "@textlint/module-interop": "15.8.0", + "@textlint/resolver": "15.8.0", + "@textlint/types": "15.8.0", "debug": "^4.4.3", "diff": "^8.0.4", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" + }, + "engines": { + "node": ">=20.18.0" } }, "node_modules/@textlint/fixer-formatter/node_modules/ansi-regex": { @@ -920,23 +895,6 @@ "node": ">=8" } }, - "node_modules/@textlint/fixer-formatter/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@textlint/fixer-formatter/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -980,19 +938,19 @@ "license": "MIT" }, "node_modules/@textlint/kernel": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-15.7.1.tgz", - "integrity": "sha512-OGghiMbXLD3ULHedZYP1B+A8Bj4snlCatzsOdz0M8q0v4I79NdcamWt/5GYmbp6AOQg3HBQG8+9V+0H+do19mw==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-15.8.0.tgz", + "integrity": "sha512-Wc2Z2Oq95v+IXj+G4j3cKpfQ1t2YRgubxHHj8i93Nu+R2F/GvszRC7pYBHYBH9HMmlJyTBq8jcjBOYG/b52CUQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.7.1", - "@textlint/ast-tester": "15.7.1", - "@textlint/ast-traverse": "15.7.1", - "@textlint/feature-flag": "15.7.1", - "@textlint/source-code-fixer": "15.7.1", - "@textlint/types": "15.7.1", - "@textlint/utils": "15.7.1", + "@textlint/ast-node-types": "15.8.0", + "@textlint/ast-tester": "15.8.0", + "@textlint/ast-traverse": "15.8.0", + "@textlint/feature-flag": "15.8.0", + "@textlint/source-code-fixer": "15.8.0", + "@textlint/types": "15.8.0", + "@textlint/utils": "15.8.0", "debug": "^4.4.3", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" @@ -1006,26 +964,28 @@ "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.7.1.tgz", - "integrity": "sha512-TdwZ/debWYFD05K3CcoHtwvnCrza29wZxD+BjDTk/V5N7iRqkK1dTTHSD4A8AIgROLiDkHJmIKQbasbmsg8AvA==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-15.8.0.tgz", + "integrity": "sha512-+oU3A235NATv6Lzi4xa4kJ65PuNJlIxesaO4AvDhDWA9FWm7y4XKWaoQCW1esgaQQ6dwnUiFKArQ8TcJ86mC4w==", "dev": true, "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "15.7.1", - "@textlint/resolver": "15.7.1", - "@textlint/types": "15.7.1", - "chalk": "^4.1.2", + "@textlint/module-interop": "15.8.0", + "@textlint/resolver": "15.8.0", + "@textlint/types": "15.8.0", "debug": "^4.4.3", - "js-yaml": "^4.1.1", + "js-yaml": "^4.3.0", "lodash": "^4.18.1", "pluralize": "^2.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "table": "^6.9.0", "text-table": "^0.2.0" + }, + "engines": { + "node": ">=20.18.0" } }, "node_modules/@textlint/linter-formatter/node_modules/ansi-regex": { @@ -1038,23 +998,6 @@ "node": ">=8" } }, - "node_modules/@textlint/linter-formatter/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@textlint/linter-formatter/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1063,9 +1006,9 @@ "license": "MIT" }, "node_modules/@textlint/linter-formatter/node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { @@ -1114,13 +1057,13 @@ } }, "node_modules/@textlint/markdown-to-ast": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-15.7.1.tgz", - "integrity": "sha512-9DLSah7g6mYNHvO6pssLdFvFPAl3HHyEIm4RE5of/1QN9FXJXDgdOcVV3YpQmbYT/YntuIvOQiqOndCSPWTW2A==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-15.8.0.tgz", + "integrity": "sha512-gWOcd2+UCqODMLGIIY5WiPE9zmR9L4aut3FIkxH8gSCiZ6EVkBaU2mgm+8KiGOjJqdtT98xkWocCwDtQ1kypOQ==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.7.1", + "@textlint/ast-node-types": "15.8.0", "debug": "^4.4.3", "mdast-util-gfm-autolink-literal": "^0.1.3", "neotraverse": "^0.6.18", @@ -1133,9 +1076,9 @@ } }, "node_modules/@textlint/module-interop": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.7.1.tgz", - "integrity": "sha512-Jg+sQW2L/cRJypk59wtcMUVVpt8vmit5ZMT3gUnFwevP3A6Qp1HfOtUy9ObT4hBX3lOSGT/ekcCDxR1pL7uH1g==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-15.8.0.tgz", + "integrity": "sha512-rt+OR1WYGoLOY8HkA/aBPrqufF6yUUEsKEAh7XohTsT3lp9IyZFT6zOIbjul9P4FAzsmSPkcrYjVx3Bz/IUfkg==", "dev": true, "license": "MIT" }, @@ -1165,69 +1108,69 @@ } }, "node_modules/@textlint/resolver": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.7.1.tgz", - "integrity": "sha512-8XnO0pgF6mXnm41VvWmBbEIdGPhiCUt31uLZkOis1ECeg/1SoUcIT6Mx/F0e1rukq8l0UlOSeY9a31CsvRMK0g==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-15.8.0.tgz", + "integrity": "sha512-E88tzfX3K8Jykk+38aJ9cy8RquD8ABVOPTO2rFEESq0wcg8x6/ypdAS8ZgR7OKiGqlRF0hkO/m5PbQwVfKM3VA==", "dev": true, "license": "MIT" }, "node_modules/@textlint/source-code-fixer": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-15.7.1.tgz", - "integrity": "sha512-Z8ZfQQbVH2GIUMzSGEQWKKnAFCH+mbQtw5ipigFHExUImx2RC2ppaR1m8ZAy7SYgbXGhvfkPKZ4ndEmVWTs5Mg==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-15.8.0.tgz", + "integrity": "sha512-oWEBXLRzvv9bMu7/8NFMDM6GXil6iPXbNdiopQfxmrEVduc7mZ5gPoKr77gwrUO05jLS5ycfxE7kwPUu5sXP8Q==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/types": "15.7.1", + "@textlint/types": "15.8.0", "debug": "^4.4.3" } }, "node_modules/@textlint/text-to-ast": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-15.7.1.tgz", - "integrity": "sha512-W6AYCOcEAtw9hs0u69+Tte8hmWaLKYGdo3yBxgOpl20Q6AOkxxEaG305Nr5rgbO6caWJWkR/t2WxBkZzm3KG0A==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-15.8.0.tgz", + "integrity": "sha512-Mmhy0tW9fOhekLNMouyy93WEQR9xVrbigKtgCA+jyoqrs5vqSC6x06f/KeZZSvDXQ6hy2gA25m36Swfcg35BPA==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.7.1" + "@textlint/ast-node-types": "15.8.0" } }, "node_modules/@textlint/textlint-plugin-markdown": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-15.7.1.tgz", - "integrity": "sha512-vnTU1/0ZLEC0cSBK5bBfR3aXYJbn3rMFR455y848Df6DHI4gLc1L2uNXDkYYPh84KvzIs7RfEUHZyHSwSISFLg==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-15.8.0.tgz", + "integrity": "sha512-susQtSt0omGIkQmb3vNXx3CQS92OViTHD7Qe79quSMxYv0jgN/bCZUa8ej96qOOqPeuoSDDDpMdEZ4D+B6Lb+A==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/markdown-to-ast": "15.7.1", - "@textlint/types": "15.7.1" + "@textlint/markdown-to-ast": "15.8.0", + "@textlint/types": "15.8.0" } }, "node_modules/@textlint/textlint-plugin-text": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-15.7.1.tgz", - "integrity": "sha512-krU0KiDmG2LrESF3LchgfbSwclB/8I2itA4uzSY9Tln3miaWGKzUpLu00bQtvua0f2Ux7tsLnSmwAgGFf9gERA==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-15.8.0.tgz", + "integrity": "sha512-oz+tip3nSEkzPv5h4WVtXngLorBtJe97Sc1o3EddbcpIvI57jj5cCM7tNMQVGpgpQnGYplfzJt4M1EyFPopfCw==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/text-to-ast": "15.7.1", - "@textlint/types": "15.7.1" + "@textlint/text-to-ast": "15.8.0", + "@textlint/types": "15.8.0" } }, "node_modules/@textlint/types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.7.1.tgz", - "integrity": "sha512-Vye/GmFNBTgVzZFtIFJTmLB+s2A7oIADxNG6r9UhfPuY+Czv0z5G3xeyFZZudPlfxURsKUyPIU5XsjOFqVp33A==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-15.8.0.tgz", + "integrity": "sha512-Anhc6y5736YIsvqae0U6k0YmB2M/QVHkEeOv2aydAn/WIkdI69dCOiDbe3/+RagS3qstFTSFWJzNRA2lUjv19w==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "15.7.1" + "@textlint/ast-node-types": "15.8.0" } }, "node_modules/@textlint/utils": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-15.7.1.tgz", - "integrity": "sha512-+q5Z5fsNk/ixDY5D70ZCQungr7ppzBAAhmi207qDBzSBFeA5MM2ASGwMjPc5aMJ/3DvonI/01B3UIgbpVgIXVA==", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-15.8.0.tgz", + "integrity": "sha512-waINJCI7sBVs1A3K05UFKe8QoNAsdJFCXr3PJ1QsgAf0BeEgCtyrLVcZUdbOtKxRkF4QB4NuClB0By1Ty4znpQ==", "dev": true, "license": "MIT" }, @@ -1279,20 +1222,6 @@ "dev": true, "license": "MIT" }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/ajv": { "version": "8.20.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", @@ -1310,24 +1239,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, "node_modules/anchor-markdown-header": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.8.4.tgz", @@ -1340,9 +1251,9 @@ } }, "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, "license": "MIT", "engines": { @@ -1423,45 +1334,6 @@ "node": "18 || 20 || >=22" } }, - "node_modules/body-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", - "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^2.0.0", - "debug": "^4.4.3", - "http-errors": "^2.0.1", - "iconv-lite": "^0.7.2", - "on-finished": "^2.4.1", - "qs": "^6.15.2", - "raw-body": "^3.0.2", - "type-is": "^2.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/body-parser/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/boundary": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/boundary/-/boundary-2.0.0.tgz", @@ -1470,9 +1342,9 @@ "license": "BSD-2-Clause" }, "node_modules/brace-expansion": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz", - "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, "license": "MIT", "dependencies": { @@ -1495,16 +1367,6 @@ "node": ">=8" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/cacheable": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz", @@ -1519,37 +1381,6 @@ "qified": "^0.10.1" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", @@ -1700,83 +1531,6 @@ "node": ">= 6" } }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/crypt": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", @@ -2024,16 +1778,6 @@ "node": ">=0.10.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -2154,28 +1898,6 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, "node_modules/emoji-regex": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", @@ -2183,16 +1905,6 @@ "dev": true, "license": "MIT" }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/entities": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", @@ -2222,46 +1934,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2289,39 +1961,6 @@ "node": ">=4" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventsource-parser": "^3.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/eventsource-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", - "integrity": "sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.0.0" - } - }, "node_modules/execall": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", @@ -2335,70 +1974,6 @@ "node": ">=8" } }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-rate-limit": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.1.tgz", - "integrity": "sha512-0D493aP61w0TJ2A0wy27riRsO7FMQ7FK+KUHOKCSfPvYo0R55aiC6emCVgFUeShH0fq0ICPVzNcgoS+BsbXQCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "ip-address": "^10.2.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" - }, - "peerDependencies": { - "express": ">= 4.11" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2469,9 +2044,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", - "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz", + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==", "dev": true, "funding": [ { @@ -2550,28 +2125,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/find-up-simple": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", @@ -2598,9 +2151,9 @@ } }, "node_modules/flatted": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.3.tgz", - "integrity": "sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz", + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==", "dev": true, "license": "ISC" }, @@ -2613,26 +2166,6 @@ "node": ">=0.4.x" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -2666,45 +2199,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -2753,9 +2247,9 @@ } }, "node_modules/globby": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.1.tgz", - "integrity": "sha512-JmsqJalahxxgW8V2ecSQ2G7UjPlI9cpKdrkG9KoNiXhd/YslXOTEB0cViENWUznuovIuNT+FkMbraDGjr4FCUg==", + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.2.tgz", + "integrity": "sha512-NLvV9ubZ6NDsJaOpKPy3cQeJpKi9DcWiyCiFUpJPA0YihRqiE6RWaLUmgNNPr8MgPpLZjnBjSmou7uZBRJv9wA==", "dev": true, "license": "MIT", "dependencies": { @@ -2773,42 +2267,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hashery": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", @@ -2835,16 +2293,6 @@ "node": ">= 0.4" } }, - "node_modules/hono": { - "version": "4.12.32", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.32.tgz", - "integrity": "sha512-XcuyW9qE2kJn07PkecMOBd5Vq/hMy7mmGw+idz1yblbg9N17ijJODrvPkn7/dwL3Kulj8LcRJ69DLOWf91dRUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.9.0" - } - }, "node_modules/hookified": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", @@ -2892,44 +2340,6 @@ "entities": "^3.0.1" } }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", - "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/ignore": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", @@ -2977,13 +2387,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, "node_modules/ini": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", @@ -2994,26 +2397,6 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/ip-address": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.3.1.tgz", - "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-accessor-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.2.tgz", @@ -3201,13 +2584,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-regexp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", @@ -3231,13 +2607,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", @@ -3248,16 +2617,6 @@ "node": ">=0.10.0" } }, - "node_modules/jose": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.4.tgz", - "integrity": "sha512-N8acGzVsQy6M/fjFcxtysNc4Q379TcM5dM/qKkNtsHFji88yANnXTr7BLeP75iPnFwBfQzM/jg2BZ9+HZrHCZA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3266,9 +2625,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.1.tgz", - "integrity": "sha512-zfLtNfQqxVqq3uaTqSkh4x4hZw3KHobGUA0fJUj4wawW8bsQLTVqpHdXSIzidh7o+4lEW36tANuAGdaFx6Zgnw==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.2.tgz", + "integrity": "sha512-dayzUzKkJ1MkuUtZglSebU43utNXH0OWQByK9rKOOuYIO8M5TV1y+n8ALMdG0rdzBnfNkOmZEqrURepb0ejqBw==", "dev": true, "funding": [ { @@ -3295,13 +2654,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-schema-typed": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -3553,14 +2905,14 @@ } }, "node_modules/markdownlint-cli2": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.23.1.tgz", - "integrity": "sha512-20JPI5W+HpV1OA+pUM712wgvL4GzYNUvbmhLU8KlEYJ1kCDx4soZ4/Xqd+WkLrPTOKMAn8SfO3zYFrK8GLlwQg==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.23.2.tgz", + "integrity": "sha512-eUhcnkSpzURo/o4htSqc7LPDszgOOTknhU4eY/sPHvMCLxnTCYscv1gw1/js/idmaZPisv9ECVEIORcllqjTUw==", "dev": true, "license": "MIT", "dependencies": { - "globby": "16.2.1", - "js-yaml": "5.2.1", + "globby": "16.2.2", + "js-yaml": "5.2.2", "jsonc-parser": "3.3.1", "jsonpointer": "5.0.1", "markdown-it": "14.3.0", @@ -3605,16 +2957,6 @@ "url": "https://github.com/sponsors/cyyynthia" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -4267,33 +3609,6 @@ "dev": true, "license": "MIT" }, - "node_modules/media-typer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", - "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -5465,33 +4780,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/minimatch": { "version": "10.2.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", @@ -5542,16 +4830,6 @@ "dev": true, "license": "MIT" }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neotraverse": { "version": "0.6.18", "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", @@ -5577,52 +4855,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -5679,26 +4911,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -5723,17 +4935,6 @@ "dev": true, "license": "MIT" }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -5754,16 +4955,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, "node_modules/pluralize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", @@ -5797,20 +4988,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/punycode.js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", @@ -5841,23 +5018,6 @@ "dev": true, "license": "MIT" }, - "node_modules/qs": { - "version": "6.15.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", - "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5879,36 +5039,6 @@ ], "license": "MIT" }, - "node_modules/range-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", - "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/rc-config-loader": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.4.tgz", @@ -5923,9 +5053,9 @@ } }, "node_modules/rc-config-loader/node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { @@ -6127,23 +5257,6 @@ "node": ">=0.10.0" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6178,13 +5291,6 @@ "ret": "~0.1.10" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, "node_modules/semver": { "version": "7.8.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", @@ -6198,159 +5304,6 @@ "node": ">=10" } }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", - "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/slash": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", @@ -6383,9 +5336,9 @@ } }, "node_modules/smol-toml": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz", - "integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz", + "integrity": "sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -6431,16 +5384,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/string-width": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", @@ -6497,19 +5440,6 @@ "boundary": "^2.0.0" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/table": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", @@ -6580,26 +5510,26 @@ "license": "MIT" }, "node_modules/textlint": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-15.7.1.tgz", - "integrity": "sha512-T6WRImq6XBnf7kRUE401/gz4USDcrsr9ksDfpwspPAHcvlptsTmd5CrRuPc2brd6t93Z6xSGIGlvV4QAMUHx+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@modelcontextprotocol/sdk": "^1.29.0", - "@textlint/ast-node-types": "15.7.1", - "@textlint/ast-traverse": "15.7.1", - "@textlint/config-loader": "15.7.1", - "@textlint/feature-flag": "15.7.1", - "@textlint/fixer-formatter": "15.7.1", - "@textlint/kernel": "15.7.1", - "@textlint/linter-formatter": "15.7.1", - "@textlint/module-interop": "15.7.1", - "@textlint/resolver": "15.7.1", - "@textlint/textlint-plugin-markdown": "15.7.1", - "@textlint/textlint-plugin-text": "15.7.1", - "@textlint/types": "15.7.1", - "@textlint/utils": "15.7.1", + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-15.8.0.tgz", + "integrity": "sha512-3xE8MknztkpEC5MYDO1lXhUDXx+uq45gdvZB16Xh80rX148NgUehSyWCc5ir2SBW0KVpzRRgU3EWAJZqsBfqtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/server": "^2.0.0", + "@textlint/ast-node-types": "15.8.0", + "@textlint/ast-traverse": "15.8.0", + "@textlint/config-loader": "15.8.0", + "@textlint/feature-flag": "15.8.0", + "@textlint/fixer-formatter": "15.8.0", + "@textlint/kernel": "15.8.0", + "@textlint/linter-formatter": "15.8.0", + "@textlint/module-interop": "15.8.0", + "@textlint/resolver": "15.8.0", + "@textlint/textlint-plugin-markdown": "15.8.0", + "@textlint/textlint-plugin-text": "15.8.0", + "@textlint/types": "15.8.0", + "@textlint/utils": "15.8.0", "debug": "^4.4.3", "file-entry-cache": "^10.1.4", "glob": "^13.0.6", @@ -6609,13 +5539,13 @@ "rc-config-loader": "^4.1.4", "read-package-up": "^11.0.0", "structured-source": "^4.0.0", - "zod": "^3.25.76" + "zod": "^4.2.0" }, "bin": { "textlint": "bin/textlint.js" }, "engines": { - "node": ">=20.0.0" + "node": ">=20.18.0" } }, "node_modules/textlint-filter-rule-allowlist": { @@ -6642,9 +5572,9 @@ "license": "MIT" }, "node_modules/textlint-filter-rule-allowlist/node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { @@ -6796,16 +5726,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", @@ -6843,39 +5763,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", - "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", - "dev": true, - "license": "MIT", - "dependencies": { - "content-type": "^2.0.0", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/type-is/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -7006,16 +5893,6 @@ "unist-util-is": "^3.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -7027,16 +5904,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -7107,22 +5974,6 @@ "dev": true, "license": "MIT" }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -7133,13 +5984,6 @@ "node": ">=0.10.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, "node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", @@ -7170,25 +6014,15 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/zod-to-json-schema": { - "version": "3.25.2", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", - "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "zod": "^3.25.28 || ^4" - } - }, "node_modules/zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", diff --git a/package.json b/package.json index 0665f7f6e6..5b48fd59e6 100644 --- a/package.json +++ b/package.json @@ -13,9 +13,9 @@ "devDependencies": { "cspell": "10.0.1", "doctoc": "2.5.0", - "markdownlint-cli2": "0.23.1", + "markdownlint-cli2": "0.23.2", "prettier": "3.9.6", - "textlint": "15.7.1", + "textlint": "15.8.0", "textlint-filter-rule-allowlist": "4.0.0", "textlint-filter-rule-comments": "1.3.0", "textlint-rule-common-misspellings": "1.0.1", diff --git a/schemas/1.44.0 b/schemas/1.44.0 new file mode 100644 index 0000000000..c6217ff8d1 --- /dev/null +++ b/schemas/1.44.0 @@ -0,0 +1,768 @@ + + +file_format: 1.1.0 +schema_url: https://opentelemetry.io/schemas/1.44.0 +versions: + 1.44.0: + metrics: + changes: + - rename_metrics: + container.memory.paging.faults: container.paging.faults + k8s.node.memory.paging.faults: k8s.node.paging.faults + k8s.pod.memory.paging.faults: k8s.pod.paging.faults + 1.43.0: + 1.42.0: + metrics: + changes: + - rename_metrics: + v8js.memory.heap.limit: v8js.memory.heap.space.size + 1.41.1: + 1.41.0: + metrics: + changes: + - rename_metrics: + k8s.container.cpu.limit: k8s.container.cpu.limit.desired + k8s.container.cpu.limit_utilization: k8s.container.cpu.limit.utilization + k8s.container.cpu.request: k8s.container.cpu.request.desired + k8s.container.cpu.request_utilization: k8s.container.cpu.request.utilization + k8s.container.memory.limit: k8s.container.memory.limit.desired + k8s.container.memory.request: k8s.container.memory.request.desired + 1.40.0: + all: + changes: + - rename_attributes: + attribute_map: + feature_flag.evaluation.error.message: feature_flag.error.message + metrics: + changes: + - rename_metrics: + system.memory.shared: system.memory.linux.shared + 1.39.0: + all: + changes: + - rename_attributes: + attribute_map: + linux.memory.slab.state: system.memory.linux.slab.state + peer.service: service.peer.name + rpc.connect_rpc.error_code: rpc.response.status_code + rpc.connect_rpc.request.metadata: rpc.request.metadata + rpc.connect_rpc.response.metadata: rpc.response.metadata + rpc.grpc.request.metadata: rpc.request.metadata + rpc.grpc.response.metadata: rpc.response.metadata + rpc.jsonrpc.request_id: jsonrpc.request.id + rpc.jsonrpc.version: jsonrpc.protocol.version + rpc.system: rpc.system.name + metrics: + changes: + - rename_metrics: + process.open_file_descriptor.count: process.unix.file_descriptor.count + system.linux.memory.available: system.memory.linux.available + system.linux.memory.slab.usage: system.memory.linux.slab.usage + 1.38.0: + all: + changes: + - rename_attributes: + attribute_map: + process.context_switch_type: process.context_switch.type + process.paging.fault_type: system.paging.fault.type + system.cpu.logical_number: cpu.logical_number + system.paging.type: system.paging.fault.type + system.process.status: process.state + system.processes.status: process.state + metrics: + changes: + - rename_metrics: + k8s.cronjob.active_jobs: k8s.cronjob.job.active + k8s.daemonset.current_scheduled_nodes: k8s.daemonset.node.current_scheduled + k8s.daemonset.desired_scheduled_nodes: k8s.daemonset.node.desired_scheduled + k8s.daemonset.misscheduled_nodes: k8s.daemonset.node.misscheduled + k8s.daemonset.ready_nodes: k8s.daemonset.node.ready + k8s.deployment.available_pods: k8s.deployment.pod.available + k8s.deployment.desired_pods: k8s.deployment.pod.desired + k8s.hpa.current_pods: k8s.hpa.pod.current + k8s.hpa.desired_pods: k8s.hpa.pod.desired + k8s.hpa.max_pods: k8s.hpa.pod.max + k8s.hpa.min_pods: k8s.hpa.pod.min + k8s.job.active_pods: k8s.job.pod.active + k8s.job.desired_successful_pods: k8s.job.pod.desired_successful + k8s.job.failed_pods: k8s.job.pod.failed + k8s.job.max_parallel_pods: k8s.job.pod.max_parallel + k8s.job.successful_pods: k8s.job.pod.successful + k8s.node.allocatable.cpu: k8s.node.cpu.allocatable + k8s.node.allocatable.ephemeral_storage: k8s.node.ephemeral_storage.allocatable + k8s.node.allocatable.memory: k8s.node.memory.allocatable + k8s.node.allocatable.pods: k8s.node.pod.allocatable + k8s.replicaset.available_pods: k8s.replicaset.pod.available + k8s.replicaset.desired_pods: k8s.replicaset.pod.desired + k8s.replication_controller.available_pods: k8s.replicationcontroller.pod.available + k8s.replication_controller.desired_pods: k8s.replicationcontroller.pod.desired + k8s.replicationcontroller.available_pods: k8s.replicationcontroller.pod.available + k8s.replicationcontroller.desired_pods: k8s.replicationcontroller.pod.desired + k8s.statefulset.current_pods: k8s.statefulset.pod.current + k8s.statefulset.desired_pods: k8s.statefulset.pod.desired + k8s.statefulset.ready_pods: k8s.statefulset.pod.ready + k8s.statefulset.updated_pods: k8s.statefulset.pod.updated + v8js.heap.space.available_size: v8js.memory.heap.space.available_size + v8js.heap.space.physical_size: v8js.memory.heap.space.physical_size + 1.37.0: + all: + changes: + - rename_attributes: + attribute_map: + android.state: android.app.state + container.runtime: container.runtime.name + enduser.role: user.roles + gen_ai.openai.request.service_tier: openai.request.service_tier + gen_ai.openai.response.service_tier: openai.response.service_tier + gen_ai.openai.response.system_fingerprint: openai.response.system_fingerprint + gen_ai.system: gen_ai.provider.name + ios.state: ios.app.state + 1.36.0: + 1.35.0: + all: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1698 + - rename_attributes: + attribute_map: + az.namespace: azure.resource_provider.namespace + az.service_request_id: azure.service.request.id + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/issues/1800 + - rename_metrics: + system.network.connections: system.network.connection.count + 1.34.0: + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/2295 + - rename_metrics: + cpu.time: system.cpu.time + cpu.utilization: system.cpu.utilization + cpu.frequency: system.cpu.frequency + 1.33.0: + all: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1982 + - rename_attributes: + attribute_map: + feature_flag.provider_name: feature_flag.provider.name + # https://github.com/open-telemetry/semantic-conventions/pull/1994 + - rename_attributes: + attribute_map: + feature_flag.evaluation.error.message: error.message + 1.32.0: + all: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1989 + - rename_attributes: + attribute_map: + feature_flag.evaluation.reason: feature_flag.result.reason + feature_flag.variant: feature_flag.result.variant + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/2042 + - rename_metrics: + otel.sdk.span.live.count: otel.sdk.span.live + otel.sdk.span.ended.count: otel.sdk.span.ended + otel.sdk.processor.span.processed.count: otel.sdk.processor.span.processed + otel.sdk.exporter.span.inflight.count: otel.sdk.exporter.span.inflight + otel.sdk.exporter.span.exported.count: otel.sdk.exporter.span.exported + 1.31.0: + all: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1880 + - rename_attributes: + attribute_map: + android.state: android.app.state + io.state: ios.app.state + metrics: + changes: + - rename_metrics: + k8s.replication_controller.desired_pods: k8s.replicationcontroller.desired_pods + k8s.replication_controller.available_pods: k8s.replicationcontroller.available_pods + # https://github.com/open-telemetry/semantic-conventions/pull/1896 + - rename_metrics: + system.cpu.time: cpu.time + system.cpu.utilization: cpu.utilization + system.cpu.frequency: cpu.frequency + # https://github.com/open-telemetry/semantic-conventions/pull/1896 + - rename_attributes: + attribute_map: + system.cpu.logical_number: cpu.logical_number + 1.30.0: + all: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1632 + - rename_attributes: + attribute_map: + gen_ai.openai.request.seed: gen_ai.request.seed + system.network.state: network.connection.state + # https://github.com/open-telemetry/semantic-conventions/pull/1624 + - rename_attributes: + attribute_map: + code.function: code.function.name + code.filepath: code.file.path + code.lineno: code.line.number + code.column: code.column.number + # https://github.com/open-telemetry/semantic-conventions/pull/1734 + - rename_attributes: + attribute_map: + db.system: db.system.name + db.cassandra.coordinator.dc: cassandra.coordinator.dc + db.cassandra.coordinator.id: cassandra.coordinator.id + db.cassandra.consistency_level: cassandra.consistency.level + db.cassandra.idempotence: cassandra.query.idempotent + db.cassandra.page_size: cassandra.page.size + db.cassandra.speculative_execution_count: cassandra.speculative_execution.count + db.cosmosdb.client_id: azure.client.id + db.cosmosdb.connection_mode: azure.cosmosdb.connection.mode + db.cosmosdb.consistency_level: azure.cosmosdb.consistency.level + db.cosmosdb.request_charge: azure.cosmosdb.operation.request_charge + db.cosmosdb.request_content_length: azure.cosmosdb.request.body.size + db.cosmosdb.regions_contacted: azure.cosmosdb.operation.contacted_regions + db.cosmosdb.sub_status_code: azure.cosmosdb.response.sub_status_code + db.elasticsearch.node.name: elasticsearch.node.name + # db.elasticsearch.path_parts is a template attribute, schema transformation + # does not support it, adding as a comment for consistency + # db.elasticsearch.path_parts. -> db.operation.parameter. + metrics: + changes: + - rename_metrics: + db.client.cosmosdb.operation.request_charge: azure.cosmosdb.client.operation.request_charge + db.client.cosmosdb.active_instance.count: azure.cosmosdb.client.active_instance.count + + 1.29.0: + all: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1520 + - rename_attributes: + attribute_map: + process.executable.build_id.profiling: process.executable.build_id.htlhash + # https://github.com/open-telemetry/semantic-conventions/pull/1383 + - rename_attributes: + attribute_map: + vcs.repository.change.id: vcs.change.id + vcs.repository.change.title: vcs.change.title + vcs.repository.ref.name: vcs.ref.head.name + vcs.repository.ref.revision: vcs.ref.head.revision + vcs.repository.ref.type: vcs.ref.head.type + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1492 + - rename_attributes: + attribute_map: + system.device: network.interface.name + apply_to_metrics: + - container.network.io + - system.network.dropped + - system.network.errors + - system.network.io + - system.network.connections + 1.28.0: + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1422 + - rename_metrics: + messaging.client.published.messages: messaging.client.sent.messages + 1.27.0: + all: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1216 + - rename_attributes: + attribute_map: + tls.client.server_name: server.address + # https://github.com/open-telemetry/semantic-conventions/pull/1075 + - rename_attributes: + attribute_map: + deployment.environment: deployment.environment.name + # https://github.com/open-telemetry/semantic-conventions/pull/1245 + - rename_attributes: + attribute_map: + messaging.kafka.message.offset: messaging.kafka.offset + # https://github.com/open-telemetry/semantic-conventions/pull/815 + - rename_attributes: + attribute_map: + messaging.kafka.consumer.group: messaging.consumer.group.name + messaging.rocketmq.client_group: messaging.consumer.group.name + messaging.eventhubs.consumer.group: messaging.consumer.group.name + messaging.servicebus.destination.subscription_name: messaging.destination.subscription.name + # https://github.com/open-telemetry/semantic-conventions/pull/1200 + - rename_attributes: + attribute_map: + gen_ai.usage.completion_tokens: gen_ai.usage.output_tokens + gen_ai.usage.prompt_tokens: gen_ai.usage.input_tokens + spans: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1002 + - rename_attributes: + attribute_map: + db.elasticsearch.cluster.name: db.namespace + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/1125 + - rename_attributes: + attribute_map: + db.client.connections.state: db.client.connection.state + apply_to_metrics: + - db.client.connection.count + - rename_attributes: + attribute_map: + db.client.connections.pool.name: db.client.connection.pool.name + apply_to_metrics: + - db.client.connection.count + - db.client.connection.idle.max + - db.client.connection.idle.min + - db.client.connection.max + - db.client.connection.pending_requests + - db.client.connection.timeouts + - db.client.connection.create_time + - db.client.connection.wait_time + - db.client.connection.use_time + # https://github.com/open-telemetry/semantic-conventions/pull/1006 + - rename_metrics: + messaging.publish.messages: messaging.client.published.messages + # https://github.com/open-telemetry/semantic-conventions/pull/1026 + - rename_attributes: + attribute_map: + system.cpu.state: cpu.mode + process.cpu.state: cpu.mode + container.cpu.state: cpu.mode + apply_to_metrics: + - system.cpu.time + - system.cpu.utilization + - process.cpu.time + - process.cpu.utilization + - container.cpu.time + # https://github.com/open-telemetry/semantic-conventions/pull/1265 + - rename_metrics: + jvm.buffer.memory.usage: jvm.buffer.memory.used + 1.26.0: + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/966 + - rename_metrics: + db.client.connections.usage: db.client.connection.count + db.client.connections.idle.max: db.client.connection.idle.max + db.client.connections.idle.min: db.client.connection.idle.min + db.client.connections.max: db.client.connection.max + db.client.connections.pending_requests: db.client.connection.pending_requests + db.client.connections.timeouts: db.client.connection.timeouts + # https://github.com/open-telemetry/semantic-conventions/pull/948 + - rename_attributes: + attribute_map: + messaging.client_id: messaging.client.id + # https://github.com/open-telemetry/semantic-conventions/pull/909 + - rename_attributes: + attribute_map: + state: db.client.connections.state + apply_to_metrics: + - db.client.connections.usage + - rename_attributes: + attribute_map: + pool.name: db.client.connections.pool.name + apply_to_metrics: + - db.client.connections.usage + - db.client.connections.idle.max + - db.client.connections.idle.min + - db.client.connections.max + - db.client.connections.pending_requests + - db.client.connections.timeouts + - db.client.connections.create_time + - db.client.connections.wait_time + - db.client.connections.use_time + all: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/731 + - rename_attributes: + attribute_map: + enduser.id: user.id + + 1.25.0: + spans: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/911 + - rename_attributes: + attribute_map: + db.name: db.namespace + # https://github.com/open-telemetry/semantic-conventions/pull/870 + - rename_attributes: + attribute_map: + db.sql.table: db.collection.name + db.mongodb.collection: db.collection.name + db.cosmosdb.container: db.collection.name + db.cassandra.table: db.collection.name + # https://github.com/open-telemetry/semantic-conventions/pull/798 + - rename_attributes: + attribute_map: + messaging.kafka.destination.partition: messaging.destination.partition.id + # https://github.com/open-telemetry/semantic-conventions/pull/875 + - rename_attributes: + attribute_map: + db.operation: db.operation.name + # https://github.com/open-telemetry/semantic-conventions/pull/913 + - rename_attributes: + attribute_map: + messaging.operation: messaging.operation.type + # https://github.com/open-telemetry/semantic-conventions/pull/866 + - rename_attributes: + attribute_map: + db.statement: db.query.text + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/484 + - rename_attributes: + attribute_map: + system.processes.status: system.process.status + apply_to_metrics: + - system.processes.count + - rename_metrics: + system.processes.count: system.process.count + system.processes.created: system.process.created + # https://github.com/open-telemetry/semantic-conventions/pull/625 + - rename_attributes: + attribute_map: + container.labels: container.label + k8s.pod.labels: k8s.pod.label + # https://github.com/open-telemetry/semantic-conventions/pull/330 + - rename_metrics: + process.threads: process.thread.count + process.open_file_descriptors: process.open_file_descriptor.count + - rename_attributes: + attribute_map: + state: process.cpu.state + apply_to_metrics: + - process.cpu.time + - process.cpu.utilization + - rename_attributes: + attribute_map: + direction: disk.io.direction + apply_to_metrics: + - process.disk.io + - rename_attributes: + attribute_map: + type: process.context_switch_type + apply_to_metrics: + - process.context_switches + - rename_attributes: + attribute_map: + direction: network.io.direction + apply_to_metrics: + - process.network.io + - rename_attributes: + attribute_map: + type: process.paging.fault_type + apply_to_metrics: + - process.paging.faults + all: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/854 + - rename_attributes: + attribute_map: + message.type: rpc.message.type + message.id: rpc.message.id + message.compressed_size: rpc.message.compressed_size + message.uncompressed_size: rpc.message.uncompressed_size + + 1.24.0: + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/536 + - rename_metrics: + jvm.memory.usage: jvm.memory.used + jvm.memory.usage_after_last_gc: jvm.memory.used_after_last_gc + # https://github.com/open-telemetry/semantic-conventions/pull/530 + - rename_attributes: + attribute_map: + system.network.io.direction: network.io.direction + system.disk.io.direction: disk.io.direction + 1.23.1: + 1.23.0: + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/20 + - rename_attributes: + attribute_map: + thread.daemon: jvm.thread.daemon + apply_to_metrics: + - jvm.thread.count + 1.22.0: + spans: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/229 + - rename_attributes: + attribute_map: + messaging.message.payload_size_bytes: messaging.message.body.size + # https://github.com/open-telemetry/opentelemetry-specification/pull/374 + - rename_attributes: + attribute_map: + http.resend_count: http.request.resend_count + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/224 + - rename_metrics: + http.client.duration: http.client.request.duration + http.server.duration: http.server.request.duration + # https://github.com/open-telemetry/semantic-conventions/pull/241 + - rename_metrics: + process.runtime.jvm.memory.usage: jvm.memory.usage + process.runtime.jvm.memory.committed: jvm.memory.committed + process.runtime.jvm.memory.limit: jvm.memory.limit + process.runtime.jvm.memory.usage_after_last_gc: jvm.memory.usage_after_last_gc + process.runtime.jvm.gc.duration: jvm.gc.duration + # also https://github.com/open-telemetry/semantic-conventions/pull/252 + process.runtime.jvm.threads.count: jvm.thread.count + # also https://github.com/open-telemetry/semantic-conventions/pull/252 + process.runtime.jvm.classes.loaded: jvm.class.loaded + # also https://github.com/open-telemetry/semantic-conventions/pull/252 + process.runtime.jvm.classes.unloaded: jvm.class.unloaded + # also https://github.com/open-telemetry/semantic-conventions/pull/252 + # and https://github.com/open-telemetry/semantic-conventions/pull/60 + process.runtime.jvm.classes.current_loaded: jvm.class.count + process.runtime.jvm.cpu.time: jvm.cpu.time + process.runtime.jvm.cpu.recent_utilization: jvm.cpu.recent_utilization + process.runtime.jvm.memory.init: jvm.memory.init + process.runtime.jvm.system.cpu.utilization: jvm.system.cpu.utilization + process.runtime.jvm.system.cpu.load_1m: jvm.system.cpu.load_1m + # https://github.com/open-telemetry/semantic-conventions/pull/253 + process.runtime.jvm.buffer.usage: jvm.buffer.memory.usage + # https://github.com/open-telemetry/semantic-conventions/pull/253 + process.runtime.jvm.buffer.limit: jvm.buffer.memory.limit + process.runtime.jvm.buffer.count: jvm.buffer.count + # https://github.com/open-telemetry/semantic-conventions/pull/20 + - rename_attributes: + attribute_map: + type: jvm.memory.type + pool: jvm.memory.pool.name + apply_to_metrics: + - jvm.memory.usage + - jvm.memory.committed + - jvm.memory.limit + - jvm.memory.usage_after_last_gc + - jvm.memory.init + - rename_attributes: + attribute_map: + name: jvm.gc.name + action: jvm.gc.action + apply_to_metrics: + - jvm.gc.duration + - rename_attributes: + attribute_map: + daemon: thread.daemon + apply_to_metrics: + - jvm.threads.count + - rename_attributes: + attribute_map: + pool: jvm.buffer.pool.name + apply_to_metrics: + - jvm.buffer.memory.usage + - jvm.buffer.memory.limit + - jvm.buffer.count + # https://github.com/open-telemetry/semantic-conventions/pull/89 + - rename_attributes: + attribute_map: + state: system.cpu.state + cpu: system.cpu.logical_number + apply_to_metrics: + - system.cpu.time + - system.cpu.utilization + - rename_attributes: + attribute_map: + state: system.memory.state + apply_to_metrics: + - system.memory.usage + - system.memory.utilization + - rename_attributes: + attribute_map: + state: system.paging.state + apply_to_metrics: + - system.paging.usage + - system.paging.utilization + - rename_attributes: + attribute_map: + type: system.paging.type + direction: system.paging.direction + apply_to_metrics: + - system.paging.faults + - system.paging.operations + - rename_attributes: + attribute_map: + device: system.device + direction: system.disk.direction + apply_to_metrics: + - system.disk.io + - system.disk.operations + - system.disk.io_time + - system.disk.operation_time + - system.disk.merged + - rename_attributes: + attribute_map: + device: system.device + state: system.filesystem.state + type: system.filesystem.type + mode: system.filesystem.mode + mountpoint: system.filesystem.mountpoint + apply_to_metrics: + - system.filesystem.usage + - system.filesystem.utilization + - rename_attributes: + attribute_map: + device: system.device + direction: system.network.direction + protocol: network.protocol + state: system.network.state + apply_to_metrics: + - system.network.dropped + - system.network.packets + - system.network.errors + - system.network.io + - system.network.connections + - rename_attributes: + attribute_map: + status: system.processes.status + apply_to_metrics: + - system.processes.count + # https://github.com/open-telemetry/semantic-conventions/pull/247 + - rename_metrics: + http.server.request.size: http.server.request.body.size + http.server.response.size: http.server.response.body.size + resources: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/178 + - rename_attributes: + attribute_map: + telemetry.auto.version: telemetry.distro.version + 1.21.0: + spans: + changes: + # https://github.com/open-telemetry/opentelemetry-specification/pull/3336 + - rename_attributes: + attribute_map: + messaging.kafka.client_id: messaging.client_id + messaging.rocketmq.client_id: messaging.client_id + # https://github.com/open-telemetry/opentelemetry-specification/pull/3402 + - rename_attributes: + attribute_map: + # net.peer.(name|port) attributes were usually populated on client side + # so they should be usually translated to server.(address|port) + # net.host.* attributes were only populated on server side + net.host.name: server.address + net.host.port: server.port + # was only populated on client side + net.sock.peer.name: server.socket.domain + # net.sock.peer.(addr|port) mapping is not possible + # since they applied to both client and server side + # were only populated on server side + net.sock.host.addr: server.socket.address + net.sock.host.port: server.socket.port + http.client_ip: client.address + # https://github.com/open-telemetry/opentelemetry-specification/pull/3426 + - rename_attributes: + attribute_map: + net.protocol.name: network.protocol.name + net.protocol.version: network.protocol.version + net.host.connection.type: network.connection.type + net.host.connection.subtype: network.connection.subtype + net.host.carrier.name: network.carrier.name + net.host.carrier.mcc: network.carrier.mcc + net.host.carrier.mnc: network.carrier.mnc + net.host.carrier.icc: network.carrier.icc + # https://github.com/open-telemetry/opentelemetry-specification/pull/3355 + - rename_attributes: + attribute_map: + http.method: http.request.method + http.status_code: http.response.status_code + http.scheme: url.scheme + http.url: url.full + http.request_content_length: http.request.body.size + http.response_content_length: http.response.body.size + metrics: + changes: + # https://github.com/open-telemetry/semantic-conventions/pull/53 + - rename_metrics: + process.runtime.jvm.cpu.utilization: process.runtime.jvm.cpu.recent_utilization + 1.20.0: + spans: + changes: + # https://github.com/open-telemetry/opentelemetry-specification/pull/3272 + - rename_attributes: + attribute_map: + net.app.protocol.name: net.protocol.name + net.app.protocol.version: net.protocol.version + 1.19.0: + spans: + changes: + # https://github.com/open-telemetry/opentelemetry-specification/pull/3209 + - rename_attributes: + attribute_map: + faas.execution: faas.invocation_id + # https://github.com/open-telemetry/opentelemetry-specification/pull/3188 + - rename_attributes: + attribute_map: + faas.id: cloud.resource_id + # https://github.com/open-telemetry/opentelemetry-specification/pull/3190 + - rename_attributes: + attribute_map: + http.user_agent: user_agent.original + resources: + changes: + # https://github.com/open-telemetry/opentelemetry-specification/pull/3190 + - rename_attributes: + attribute_map: + browser.user_agent: user_agent.original + 1.18.0: + 1.17.0: + spans: + changes: + # https://github.com/open-telemetry/opentelemetry-specification/pull/2957 + - rename_attributes: + attribute_map: + messaging.consumer_id: messaging.consumer.id + messaging.protocol: net.app.protocol.name + messaging.protocol_version: net.app.protocol.version + messaging.destination: messaging.destination.name + messaging.temp_destination: messaging.destination.temporary + messaging.destination_kind: messaging.destination.kind + messaging.message_id: messaging.message.id + messaging.conversation_id: messaging.message.conversation_id + messaging.message_payload_size_bytes: messaging.message.payload_size_bytes + messaging.message_payload_compressed_size_bytes: messaging.message.payload_compressed_size_bytes + messaging.rabbitmq.routing_key: messaging.rabbitmq.destination.routing_key + messaging.kafka.message_key: messaging.kafka.message.key + messaging.kafka.partition: messaging.kafka.destination.partition + messaging.kafka.tombstone: messaging.kafka.message.tombstone + messaging.rocketmq.message_type: messaging.rocketmq.message.type + messaging.rocketmq.message_tag: messaging.rocketmq.message.tag + messaging.rocketmq.message_keys: messaging.rocketmq.message.keys + messaging.kafka.consumer_group: messaging.kafka.consumer.group + 1.16.0: + 1.15.0: + spans: + changes: + # https://github.com/open-telemetry/opentelemetry-specification/pull/2743 + - rename_attributes: + attribute_map: + http.retry_count: http.resend_count + 1.14.0: + 1.13.0: + spans: + changes: + # https://github.com/open-telemetry/opentelemetry-specification/pull/2614 + - rename_attributes: + attribute_map: + net.peer.ip: net.sock.peer.addr + net.host.ip: net.sock.host.addr + 1.12.0: + 1.11.0: + 1.10.0: + 1.9.0: + 1.8.0: + spans: + changes: + - rename_attributes: + attribute_map: + db.cassandra.keyspace: db.name + db.hbase.namespace: db.name + 1.7.0: + 1.6.1: + 1.5.0: + 1.4.0: diff --git a/templates/registry/markdown/attribute_macros.j2 b/templates/registry/markdown/attribute_macros.j2 index cc05fcb679..f7dccbf364 100644 --- a/templates/registry/markdown/attribute_macros.j2 +++ b/templates/registry/markdown/attribute_macros.j2 @@ -18,10 +18,12 @@ {% macro find_lineage(attr_id, lineage) %}{% if attr_id in lineage %}{{lineage[attr_id].source_group}}{% endif %}{% endmacro %} -{% macro name_with_link(attribute, attribute_registry_base_url, lineage_attributes) %}[`{{name(attribute)}}`]({{attribute_registry_base_url}}/{{ find_lineage(attribute.name, lineage_attributes) | split_id | list | reject("eq", "registry")| first | kebab_case }}.md){% endmacro %} +{% macro name_with_link(attribute, attribute_registry_base_url, lineage_attributes) %}[`{{name(attribute)}}`]({{attribute_registry_base_url}}/{{ attribute.name | split_id | list | first | kebab_case | map_text("root_namespace_aliases") }}.md){% endmacro %} -{% macro display_name(group) %} +{# v2 files have no registry group: weaver synthesizes one with a file-path-based id, so fall back to the namespace #} +{% macro display_name(group, namespace) %} {%- if 'display_name' in group %}{{ group.display_name }} +{%- elif group.brief == "" %}{{ namespace | title_case | acronym }} Attributes {%- else %}{{ group.id | split_id | list | reject("eq", "registry") | join(" ") | title_case | acronym }} Attributes {%- endif %}{% endmacro %} diff --git a/templates/registry/markdown/attribute_namespace.md.j2 b/templates/registry/markdown/attribute_namespace.md.j2 index 0fd239115c..1d1aee130b 100644 --- a/templates/registry/markdown/attribute_namespace.md.j2 +++ b/templates/registry/markdown/attribute_namespace.md.j2 @@ -25,13 +25,14 @@ {%- if attr_groups | length > 1 %} {% for group in attr_groups %} -- [{{ attrs.display_name(group) }}](#{{ attrs.heading_link_fragments(attrs.display_name(group)) }}) +- [{{ attrs.display_name(group, ctx.id) }}](#{{ attrs.heading_link_fragments(attrs.display_name(group, ctx.id)) }}) {%- endfor -%} {%- endif %} {% for group in attr_groups %} -## {{ attrs.display_name(group) }} +## {{ attrs.display_name(group, ctx.id) }} -{% if group.brief.endswith("\n") -%} +{% if group.brief == "" -%} +{% elif group.brief.endswith("\n") -%} {{ group.brief }} {% else -%} {{ group.brief }} @@ -42,7 +43,7 @@ | Key | Stability | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | {%- for attribute in group.attributes | sort(attribute="name") %}{% set attr_anchor = attribute.name | kebab_case %} -| `{{ attrs.name(attribute) }}` | {{ stability.badge(attribute.stability, attribute.deprecated, attribute.brief) | trim }} | {{ attrs.type(attribute) }} | {{ attribute.brief | trim }}{{ notes.add({"note": attribute.note, "name": attrs.name(attribute)}) }} | {{ examples.format(attribute) }}| +| `{{ attrs.name(attribute) }}` | {{ stability.badge(attribute.stability, attribute.deprecated, attribute.brief) | trim }} | {{ attrs.type(attribute) }} | {{ notes.table_cell(attribute.brief | trim) }}{{ notes.add({"note": attribute.note, "name": attrs.name(attribute)}) }} | {{ examples.format(attribute) }}| {%- endfor %} {{ notes.render() }} {%- for enum in group.attributes | sort(attribute="name") %} diff --git a/templates/registry/markdown/attribute_table.j2 b/templates/registry/markdown/attribute_table.j2 index fad7220227..9cdf3ab88d 100644 --- a/templates/registry/markdown/attribute_table.j2 +++ b/templates/registry/markdown/attribute_table.j2 @@ -10,6 +10,6 @@ | Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -{% for attribute in filtered_attributes | attribute_sort %}| {{ attrs.name_with_link(attribute, attribute_registry_base_url, lineage_attributes) }} | {{ stability.badge(attribute.stability, attribute.deprecated, attribute.brief) | trim }} | {{ requirement.render({"level": attribute.requirement_level, "name": attrs.name(attribute)}, notes) | trim }} | {{ attrs.type(attribute) }} | {{ attribute.brief | trim }}{{ notes.add({"note": attribute.note, "name": attrs.name(attribute)}) }} | {{ examples.format(attribute) }}| +{% for attribute in filtered_attributes | attribute_sort %}| {{ attrs.name_with_link(attribute, attribute_registry_base_url, lineage_attributes) }} | {{ stability.badge(attribute.stability, attribute.deprecated, attribute.brief) | trim }} | {{ requirement.render({"level": attribute.requirement_level, "name": attrs.name(attribute)}, notes) | trim }} | {{ attrs.type(attribute) }} | {{ notes.table_cell(attribute.brief | trim) }}{{ notes.add({"note": attribute.note, "name": attrs.name(attribute)}) }} | {{ examples.format(attribute) }}| {% endfor %}{{ notes.render() }}{{ sampling.snippet(filtered_attributes, attribute_registry_base_url, lineage_attributes) }}{{ enums.tables(filtered_attributes | selectattr("type", "mapping"), notes) }} {% endif %}{% endmacro %} diff --git a/templates/registry/markdown/body_field_table.j2 b/templates/registry/markdown/body_field_table.j2 index f846f5eb02..88e3ceb128 100644 --- a/templates/registry/markdown/body_field_table.j2 +++ b/templates/registry/markdown/body_field_table.j2 @@ -13,6 +13,6 @@ {#- Macro for creating body table -#} {% macro generate(fields) %}{% if (fields | length > 0) %}{% set ns = namespace(flat=[])%}{% set _ = flatten(fields, ns, 0) %}| Field Name | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values | | --- | --- | --- | --- | --- | --- | -{% for f in ns.flat %}| {{ field_name(f.field, f.depth) }} | {{ stability.badge(f.field.stability, f.field.deprecated, f.field.brief) | trim }} | {{ requirement.render({"level": f.field.requirement_level, "name": f.field.id}, notes) | trim }} | {{ f.field.type }} | {{ f.field.brief | trim }}{{ notes.add({"note": f.field.note}) }} | {{ examples.format(f.field) }}| +{% for f in ns.flat %}| {{ field_name(f.field, f.depth) }} | {{ stability.badge(f.field.stability, f.field.deprecated, f.field.brief) | trim }} | {{ requirement.render({"level": f.field.requirement_level, "name": f.field.id}, notes) | trim }} | {{ f.field.type }} | {{ notes.table_cell(f.field.brief | trim) }}{{ notes.add({"note": f.field.note}) }} | {{ examples.format(f.field) }}| {% endfor %}{{ notes.render() }}{{ enums.field_tables(ns.flat | map(attribute="field") | selectattr("type", "eq", "enum"), notes) -}} {%- endif %}{% endmacro %} diff --git a/templates/registry/markdown/entity_macros.j2 b/templates/registry/markdown/entity_macros.j2 index bddb6464ef..fbdd170a69 100644 --- a/templates/registry/markdown/entity_macros.j2 +++ b/templates/registry/markdown/entity_macros.j2 @@ -31,7 +31,7 @@ {%- endmacro %} {#- Render a single row on the entity table. -#} {% macro attribute_row(attribute, attribute_registry_base_url, lineage_attributes, notes, role) -%} -| {{ role_tag(role) | trim }} | {{ attrs.name_with_link(attribute, attribute_registry_base_url, lineage_attributes) }} | {{ stability.badge(attribute.stability, attribute.deprecated, attribute.brief) | trim }} | {{ requirement.render({"level": attribute.requirement_level, "name": attrs.name(attribute)}, notes) | trim }} | {{ attrs.type(attribute) }} | {{ attribute.brief | trim }}{{ notes.add({"note": attribute.note, "name": attrs.name(attribute)}) }} | {{ examples.format(attribute) }}| +| {{ role_tag(role) | trim }} | {{ attrs.name_with_link(attribute, attribute_registry_base_url, lineage_attributes) }} | {{ stability.badge(attribute.stability, attribute.deprecated, attribute.brief) | trim }} | {{ requirement.render({"level": attribute.requirement_level, "name": attrs.name(attribute)}, notes) | trim }} | {{ attrs.type(attribute) }} | {{ notes.table_cell(attribute.brief | trim) }}{{ notes.add({"note": attribute.note, "name": attrs.name(attribute)}) }} | {{ examples.format(attribute) }}| {%- endmacro %} {#- Render attribute tables for entities. -#} {% macro attribute_table(attributes, attribute_registry_base_url, lineage_attributes, notes, role) %}{% for attribute in attributes | attribute_sort %}{{ attribute_row(attribute, attribute_registry_base_url, lineage_attributes, notes, role) }} diff --git a/templates/registry/markdown/enum_macros.j2 b/templates/registry/markdown/enum_macros.j2 index b24de351cd..d247d9aa3c 100644 --- a/templates/registry/markdown/enum_macros.j2 +++ b/templates/registry/markdown/enum_macros.j2 @@ -9,7 +9,7 @@ | --- | --- | --- | {% for espec in enum.type.members | sort(attribute='value') %} {%- if filter(espec) == "True" -%} -| `{{ espec.value }}` | {{ (espec.brief or espec.id) | trim }}{{ notes.add({"note": espec.note}) }} | {{ stability.badge(espec.stability, espec.deprecated, espec.brief) }} | +| `{{ espec.value }}` | {{ notes.table_cell((espec.brief or espec.id) | trim) }}{{ notes.add({"note": espec.note}) }} | {{ stability.badge(espec.stability, espec.deprecated, espec.brief) }} | {% endif %}{% endfor %}{{ notes.render() }}{% endmacro %} {% macro tables(enums, notes) -%} {% for enum in enums | sort(attribute="name") -%} @@ -22,7 +22,7 @@ | --- | --- | --- | {% for espec in enum.members | sort(attribute='value') %} {%- if filter(espec) == "True" -%} -| `{{ espec.value }}` | {{ (espec.brief or espec.id) | trim }}{{ notes.add({"note": espec.note}) }} | {{ stability.badge(espec.stability, espec.deprecated, espec.brief) }} | +| `{{ espec.value }}` | {{ notes.table_cell((espec.brief or espec.id) | trim) }}{{ notes.add({"note": espec.note}) }} | {{ stability.badge(espec.stability, espec.deprecated, espec.brief) }} | {% endif %}{% endfor %}{{ notes.render() }}{% endmacro %} {% macro field_tables(enums, notes) -%} {% for enum in enums | sort(attribute="id") -%} diff --git a/templates/registry/markdown/metric_table.j2 b/templates/registry/markdown/metric_table.j2 index 3a106234dd..609ac0488a 100644 --- a/templates/registry/markdown/metric_table.j2 +++ b/templates/registry/markdown/metric_table.j2 @@ -4,5 +4,5 @@ {% import 'entity_macros.j2' as entities %} {% macro generate(group, entity_registry) %}| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations | | -------- | --------------- | ----------- | -------------- | --------- | ------ | -| `{{ group.metric_name }}` | {{ metrics.instrument(group.instrument) | trim }} | `{{ group.unit }}` | {{ group.brief | trim }}{{ notes.add({"note": group.note}) }} | {{ stability.badge(group.stability, group.deprecated, group.brief) | trim }} | {{ entities.print_associations(group.entity_associations, entity_registry) }}| +| `{{ group.metric_name }}` | {{ metrics.instrument(group.instrument) | trim }} | `{{ group.unit }}` | {{ notes.table_cell(group.brief | trim) }}{{ notes.add({"note": group.note}) }} | {{ stability.badge(group.stability, group.deprecated, group.brief) | trim }} | {{ entities.print_associations(group.entity_associations, entity_registry) }}| {{ notes.render() }}{% endmacro %} diff --git a/templates/registry/markdown/notes.j2 b/templates/registry/markdown/notes.j2 index 0c8bd324f4..c7dd86ebec 100644 --- a/templates/registry/markdown/notes.j2 +++ b/templates/registry/markdown/notes.j2 @@ -1,4 +1,25 @@ {%- set ns = namespace(notes=[],index=0) -%} +{#- A YAML `brief` can be a multi-line block scalar, and free text may contain a + literal `|`. Rendered as-is inside a single-row markdown table cell, either one + breaks the table (embedded newlines split the row across lines; an unescaped `|` + is read as a column separator). This macro makes such text safe to embed inline: + it escapes pipe characters, and, for multi-line text, trims each line, drops ones + left blank by the block scalar, and joins what remains with `
`. -#} +{%- macro table_cell(text) -%} + {%- if text and '\n' in text -%} + {%- set cell_ns = namespace(first=True) -%} + {%- for line in text.split('\n') -%} + {%- set trimmed = line | trim | replace('|', '|') -%} + {%- if trimmed -%} + {%- if not cell_ns.first -%}
{%- endif -%} + {{- trimmed -}} + {%- set cell_ns.first = False -%} + {%- endif -%} + {%- endfor -%} + {%- else -%} + {{- text | replace('|', '|') -}} + {%- endif -%} +{%- endmacro -%} {%- macro add(note) %}{% if note.note %}{% set ns.notes = [ns.notes, [note]] | flatten %} [{{ ns.notes | length + ns.index }}]{% endif %}{% endmacro %} {%- macro add_with_limit(note) %}{% if note.note | length > 50 %}{% set ns.notes = [ns.notes, [note]] | flatten %} [{{ ns.notes | length + ns.index }}]{% elif note.note %} {{ note.note | trim }}{% endif %}{% endmacro %} {% macro render() %}{% if ns.notes | length > 0 %} diff --git a/templates/registry/markdown/snippet.md.j2 b/templates/registry/markdown/snippet.md.j2 index 32440c7407..13438f975c 100644 --- a/templates/registry/markdown/snippet.md.j2 +++ b/templates/registry/markdown/snippet.md.j2 @@ -5,7 +5,8 @@ {%- import 'metric_table.j2' as mt -%} {%- import 'event_macros.j2' as event -%} {%- import 'entity_macros.j2' as entity -%} -{%- import 'span_macros.j2' as span %} +{%- import 'span_macros.j2' as span -%} +{%- import 'stability.j2' as stability %} {%- set attribute_registry_base_url=params.registry_base_url~"attributes" %} {%- set entity_registry_base_url=params.registry_base_url~"entities" %} @@ -23,6 +24,17 @@ {{ span.header(group) }}{{ generate_attributes(group) }}{% endmacro -%} {%- macro generate_attributes(group) -%} {{ at.generate(group.attributes, tag_filter, attribute_registry_base_url, group.lineage.attributes) }}{% endmacro -%} +{#- Public attribute groups carry stability and brief, same as signals -#} +{%- macro generate_attribute_group(group) -%} +{%- if group.stability %}**Status:** {{ stability.badge(group.stability, group.deprecated) }} + +{{ group.brief | trim }} +{%- if group.note %} + +{{ group.note | trim }} +{%- endif %} + +{% endif %}{{ generate_attributes(group) }}{% endmacro -%} {% if group.type == "event" -%} {{ generate_event(group) -}} @@ -34,7 +46,7 @@ {%- elif group.type == "span" -%} {{ generate_span(group) }} {%- else -%} -{{ generate_attributes(group) -}} +{{ generate_attribute_group(group) -}} {% endif -%} diff --git a/templates/registry/markdown/weaver.yaml b/templates/registry/markdown/weaver.yaml index 0ed6e924c3..d01ccee42d 100644 --- a/templates/registry/markdown/weaver.yaml +++ b/templates/registry/markdown/weaver.yaml @@ -1,12 +1,26 @@ templates: - pattern: attributes_readme.md.j2 - filter: '.groups | map(select(.type == "attribute_group")) | map(select(.id | startswith("registry"))) | group_by(.id | split(".") | .[1]) | map({id: .[0].id | split(".") | .[1], groups: .})' + # v1 files declare a `registry.` group; v2 files don't, so weaver + # synthesizes one with a file-path-based id - key those off the attribute namespace. + filter: '.groups | map(select(.type == "attribute_group")) | + map(select(.id | startswith("registry"))) | + map(. + {ns: (if .brief == "" + then (.attributes[0].name | split(".") | .[0]) + else (.id | split(".") | .[1]) end)}) | + group_by(.ns) | map({id: .[0].ns, groups: .})' application_mode: single file_name: attributes/README.md - pattern: attribute_namespace.md.j2 - filter: '.groups | map(select(.type == "attribute_group")) | map(select(.id | startswith("registry"))) | group_by(.id | split(".") | .[1]) | map({id: .[0].id | split(".") | .[1], groups: .})' + # v1 files declare a `registry.` group; v2 files don't, so weaver + # synthesizes one with a file-path-based id - key those off the attribute namespace. + filter: '.groups | map(select(.type == "attribute_group")) | + map(select(.id | startswith("registry"))) | + map(. + {ns: (if .brief == "" + then (.attributes[0].name | split(".") | .[0]) + else (.id | split(".") | .[1]) end)}) | + group_by(.ns) | map({id: .[0].ns, groups: .})' application_mode: each - file_name: attributes/{{ ctx.id | lower | kebab_case }}.md + file_name: attributes/{{ ctx.id | lower | kebab_case | map_text("root_namespace_aliases") }}.md - pattern: registry_readme.md.j2 filter: "." application_mode: single @@ -61,6 +75,12 @@ acronyms: - zOS - JSONRPC text_maps: + root_namespace_aliases: + az: azure + hw: hardware + message: rpc + net: network + oracle: oracledb namespace_mapping: CICD: CI/CD CICD Pipeline: CI/CD Pipeline