{"semconvVersion":"1.44.0","specVersion":"1.60.0","protoVersion":"1.11.0","count":3668,"entries":[{"type":"domain","id":"Databases","text":"Client calls to SQL and NoSQL stores: the query, the operation, the collection, and the connection pool behind them.","url":"/domains/database","meta":"db cassandra oracle elasticsearch pool"},{"type":"domain","id":"HTTP and the web","text":"Client and server HTTP calls, the URL they address, and the browser that made them.","url":"/domains/http","meta":"http url browser user_agent graphql webengine"},{"type":"domain","id":"RPC","text":"Remote procedure calls: gRPC, JSON-RPC, ONC RPC and the framework layers on top of them.","url":"/domains/rpc","meta":"rpc onc_rpc jsonrpc signalr"},{"type":"domain","id":"Messaging","text":"Queues, topics and brokers — producing, receiving, processing and settling a message.","url":"/domains/messaging","meta":"messaging cloudevents message"},{"type":"domain","id":"Generative AI","text":"Model calls, agents, tools and MCP. Split into its own repository in v1.44.0 and still unreleased.","url":"/domains/gen-ai","meta":"gen_ai mcp openai"},{"type":"domain","id":"Cloud and serverless","text":"Where the code runs: the provider, the region, the account, and the function invoking it.","url":"/domains/cloud","meta":"aws gcp faas cloudfoundry azure cloud heroku az oracle_cloud"},{"type":"domain","id":"Kubernetes and containers","text":"Pods, nodes, workloads and the container runtime underneath them — the largest namespace in the registry.","url":"/domains/kubernetes","meta":"k8s container openshift oci"},{"type":"domain","id":"Hosts and hardware","text":"The machine: its operating system, CPU, disks, filesystems and physical hardware sensors.","url":"/domains/infrastructure","meta":"hw file system host os cpu nfs zos disk linux mainframe"},{"type":"domain","id":"Network","text":"Addresses, ports, transports and TLS — the connection every client and server span sits on.","url":"/domains/network","meta":"tls network net geo client destination dns server source peer"},{"type":"domain","id":"Runtimes and processes","text":"Processes, threads, language runtimes and the code that raised the telemetry.","url":"/domains/runtime","meta":"process aspnetcore pprof code jvm go v8js thread cpython dotnet nodejs profile"},{"type":"domain","id":"CI/CD and source control","text":"Pipelines, repositories, test runs and the artefacts and deployments they produce.","url":"/domains/cicd","meta":"vcs cicd artifact deployment test"},{"type":"domain","id":"Apps, devices and users","text":"Mobile and desktop clients: the app, the device it runs on, the session, and who is using it.","url":"/domains/apps","meta":"feature_flag app security_rule user device enduser android ios session"},{"type":"domain","id":"Errors and exceptions","text":"The two namespaces every other domain reaches for when a call fails, and the rules for recording them.","url":"/domains/errors","meta":"exception error"},{"type":"domain","id":"Telemetry and the SDK","text":"Telemetry describing itself: the service and SDK that emitted it, and the log and event plumbing.","url":"/domains/telemetry","meta":"otel log service telemetry event opentracing state"},{"type":"attribute","id":"android.app.state","text":"This attribute represents the state of the application.","url":"/attributes/android.app.state","meta":"development · enum · android"},{"type":"attribute","id":"android.os.api_level","text":"Uniquely identifies the framework API revision offered by a version (os.version) of the Android operating system. More information can be found in the Android …","url":"/attributes/android.os.api_level","meta":"development · string · android"},{"type":"attribute","id":"android.state","text":"Deprecated. Use android.app.state attribute instead.","url":"/attributes/android.state","meta":"deprecated · enum · android"},{"type":"attribute","id":"app.build_id","text":"Unique identifier for a particular build or compilation of the application.","url":"/attributes/app.build_id","meta":"development · string · app"},{"type":"attribute","id":"app.crash.id","text":"A unique identifier representing an instance of an end user facing app crash.","url":"/attributes/app.crash.id","meta":"development · string · app"},{"type":"attribute","id":"app.installation.id","text":"A unique identifier representing the installation of an application on a specific device","url":"/attributes/app.installation.id","meta":"development · string · app"},{"type":"attribute","id":"app.jank.frame_count","text":"A number of frame renders that experienced jank.","url":"/attributes/app.jank.frame_count","meta":"development · int · app"},{"type":"attribute","id":"app.jank.period","text":"The time period, in seconds, for which this jank is being reported.","url":"/attributes/app.jank.period","meta":"development · double · app"},{"type":"attribute","id":"app.jank.threshold","text":"The minimum rendering threshold for this jank, in seconds.","url":"/attributes/app.jank.threshold","meta":"development · double · app"},{"type":"attribute","id":"app.screen.coordinate.x","text":"The x (horizontal) coordinate of a screen coordinate, in screen pixels.","url":"/attributes/app.screen.coordinate.x","meta":"development · int · app"},{"type":"attribute","id":"app.screen.coordinate.y","text":"The y (vertical) component of a screen coordinate, in screen pixels.","url":"/attributes/app.screen.coordinate.y","meta":"development · int · app"},{"type":"attribute","id":"app.screen.id","text":"An identifier that uniquely differentiates this screen from other screens in the same application.","url":"/attributes/app.screen.id","meta":"development · string · app"},{"type":"attribute","id":"app.screen.name","text":"The name of an application screen.","url":"/attributes/app.screen.name","meta":"development · string · app"},{"type":"attribute","id":"app.widget.id","text":"An identifier that uniquely differentiates this widget from other widgets in the same application.","url":"/attributes/app.widget.id","meta":"development · string · app"},{"type":"attribute","id":"app.widget.name","text":"The name of an application widget.","url":"/attributes/app.widget.name","meta":"development · string · app"},{"type":"attribute","id":"artifact.attestation.filename","text":"The provenance filename of the built attestation which directly relates to the build artifact filename. This filename SHOULD accompany the artifact at publish …","url":"/attributes/artifact.attestation.filename","meta":"development · string · artifact"},{"type":"attribute","id":"artifact.attestation.hash","text":"The full hash value (see glossary), of the built attestation. Some envelopes in the software attestation space also refer to this as the **digest**.","url":"/attributes/artifact.attestation.hash","meta":"development · string · artifact"},{"type":"attribute","id":"artifact.attestation.id","text":"The ID of the build software attestation.","url":"/attributes/artifact.attestation.id","meta":"development · string · artifact"},{"type":"attribute","id":"artifact.filename","text":"The human readable filename of the artifact, typically generated during build and release processes. Often includes the package name and version in the filenam…","url":"/attributes/artifact.filename","meta":"development · string · artifact"},{"type":"attribute","id":"artifact.hash","text":"The full hash value (see glossary), often found in checksum.txt on a release of the artifact and used to verify package integrity.","url":"/attributes/artifact.hash","meta":"development · string · artifact"},{"type":"attribute","id":"artifact.purl","text":"The Package URL of the package artifact provides a standard way to identify and locate the packaged artifact.","url":"/attributes/artifact.purl","meta":"development · string · artifact"},{"type":"attribute","id":"artifact.version","text":"The version of the artifact.","url":"/attributes/artifact.version","meta":"development · string · artifact"},{"type":"attribute","id":"aspnetcore.authentication.result","text":"The result of the authentication operation.","url":"/attributes/aspnetcore.authentication.result","meta":"development · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.authentication.scheme","text":"The identifier that names a particular authentication handler.","url":"/attributes/aspnetcore.authentication.scheme","meta":"development · string · aspnetcore"},{"type":"attribute","id":"aspnetcore.authorization.policy","text":"The name of the authorization policy.","url":"/attributes/aspnetcore.authorization.policy","meta":"development · string · aspnetcore"},{"type":"attribute","id":"aspnetcore.authorization.result","text":"The result of calling the authorization service.","url":"/attributes/aspnetcore.authorization.result","meta":"development · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.diagnostics.exception.result","text":"ASP.NET Core exception middleware handling result.","url":"/attributes/aspnetcore.diagnostics.exception.result","meta":"stable · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.diagnostics.handler.type","text":"Full type name of the IExceptionHandler implementation that handled the exception.","url":"/attributes/aspnetcore.diagnostics.handler.type","meta":"stable · string · aspnetcore"},{"type":"attribute","id":"aspnetcore.identity.error_code","text":"The error code for a failed identity operation.","url":"/attributes/aspnetcore.identity.error_code","meta":"development · string · aspnetcore"},{"type":"attribute","id":"aspnetcore.identity.password_check_result","text":"The result from checking the password.","url":"/attributes/aspnetcore.identity.password_check_result","meta":"development · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.identity.result","text":"The result of the identity operation.","url":"/attributes/aspnetcore.identity.result","meta":"development · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.identity.sign_in.result","text":"Whether the sign in result was success or failure.","url":"/attributes/aspnetcore.identity.sign_in.result","meta":"development · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.identity.sign_in.type","text":"The authentication type.","url":"/attributes/aspnetcore.identity.sign_in.type","meta":"development · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.identity.token_purpose","text":"What the token will be used for.","url":"/attributes/aspnetcore.identity.token_purpose","meta":"development · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.identity.token_verified","text":"The result of token verification.","url":"/attributes/aspnetcore.identity.token_verified","meta":"development · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.identity.user_type","text":"The full name of the identity user type.","url":"/attributes/aspnetcore.identity.user_type","meta":"development · string · aspnetcore"},{"type":"attribute","id":"aspnetcore.identity.user.update_type","text":"The user update type.","url":"/attributes/aspnetcore.identity.user.update_type","meta":"development · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.memory_pool.owner","text":"The name of the library or subsystem using the memory pool instance.","url":"/attributes/aspnetcore.memory_pool.owner","meta":"development · string · aspnetcore"},{"type":"attribute","id":"aspnetcore.rate_limiting.policy","text":"Rate limiting policy name.","url":"/attributes/aspnetcore.rate_limiting.policy","meta":"stable · string · aspnetcore"},{"type":"attribute","id":"aspnetcore.rate_limiting.result","text":"Rate-limiting result, shows whether the lease was acquired or contains a rejection reason","url":"/attributes/aspnetcore.rate_limiting.result","meta":"stable · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.request.is_unhandled","text":"Flag indicating if request was handled by the application pipeline.","url":"/attributes/aspnetcore.request.is_unhandled","meta":"stable · boolean · aspnetcore"},{"type":"attribute","id":"aspnetcore.routing.is_fallback","text":"A value that indicates whether the matched route is a fallback route.","url":"/attributes/aspnetcore.routing.is_fallback","meta":"stable · boolean · aspnetcore"},{"type":"attribute","id":"aspnetcore.routing.match_status","text":"Match result - success or failure","url":"/attributes/aspnetcore.routing.match_status","meta":"stable · enum · aspnetcore"},{"type":"attribute","id":"aspnetcore.sign_in.is_persistent","text":"A flag indicating whether the sign in is persistent.","url":"/attributes/aspnetcore.sign_in.is_persistent","meta":"development · boolean · aspnetcore"},{"type":"attribute","id":"aspnetcore.user.is_authenticated","text":"A value that indicates whether the user is authenticated.","url":"/attributes/aspnetcore.user.is_authenticated","meta":"stable · boolean · aspnetcore"},{"type":"attribute","id":"aws.dynamodb.attribute_definitions","text":"The JSON-serialized value of each item in the AttributeDefinitions request field.","url":"/attributes/aws.dynamodb.attribute_definitions","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.dynamodb.attributes_to_get","text":"The value of the AttributesToGet request parameter.","url":"/attributes/aws.dynamodb.attributes_to_get","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.dynamodb.consistent_read","text":"The value of the ConsistentRead request parameter.","url":"/attributes/aws.dynamodb.consistent_read","meta":"development · boolean · aws"},{"type":"attribute","id":"aws.dynamodb.consumed_capacity","text":"The JSON-serialized value of each item in the ConsumedCapacity response field.","url":"/attributes/aws.dynamodb.consumed_capacity","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.dynamodb.count","text":"The value of the Count response parameter.","url":"/attributes/aws.dynamodb.count","meta":"development · int · aws"},{"type":"attribute","id":"aws.dynamodb.exclusive_start_table","text":"The value of the ExclusiveStartTableName request parameter.","url":"/attributes/aws.dynamodb.exclusive_start_table","meta":"development · string · aws"},{"type":"attribute","id":"aws.dynamodb.global_secondary_index_updates","text":"The JSON-serialized value of each item in the GlobalSecondaryIndexUpdates request field.","url":"/attributes/aws.dynamodb.global_secondary_index_updates","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.dynamodb.global_secondary_indexes","text":"The JSON-serialized value of each item of the GlobalSecondaryIndexes request field","url":"/attributes/aws.dynamodb.global_secondary_indexes","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.dynamodb.index_name","text":"The value of the IndexName request parameter.","url":"/attributes/aws.dynamodb.index_name","meta":"development · string · aws"},{"type":"attribute","id":"aws.dynamodb.item_collection_metrics","text":"The JSON-serialized value of the ItemCollectionMetrics response field.","url":"/attributes/aws.dynamodb.item_collection_metrics","meta":"development · string · aws"},{"type":"attribute","id":"aws.dynamodb.limit","text":"The value of the Limit request parameter.","url":"/attributes/aws.dynamodb.limit","meta":"development · int · aws"},{"type":"attribute","id":"aws.dynamodb.local_secondary_indexes","text":"The JSON-serialized value of each item of the LocalSecondaryIndexes request field.","url":"/attributes/aws.dynamodb.local_secondary_indexes","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.dynamodb.projection","text":"The value of the ProjectionExpression request parameter.","url":"/attributes/aws.dynamodb.projection","meta":"development · string · aws"},{"type":"attribute","id":"aws.dynamodb.provisioned_read_capacity","text":"The value of the ProvisionedThroughput.ReadCapacityUnits request parameter.","url":"/attributes/aws.dynamodb.provisioned_read_capacity","meta":"development · double · aws"},{"type":"attribute","id":"aws.dynamodb.provisioned_write_capacity","text":"The value of the ProvisionedThroughput.WriteCapacityUnits request parameter.","url":"/attributes/aws.dynamodb.provisioned_write_capacity","meta":"development · double · aws"},{"type":"attribute","id":"aws.dynamodb.scan_forward","text":"The value of the ScanIndexForward request parameter.","url":"/attributes/aws.dynamodb.scan_forward","meta":"development · boolean · aws"},{"type":"attribute","id":"aws.dynamodb.scanned_count","text":"The value of the ScannedCount response parameter.","url":"/attributes/aws.dynamodb.scanned_count","meta":"development · int · aws"},{"type":"attribute","id":"aws.dynamodb.segment","text":"The value of the Segment request parameter.","url":"/attributes/aws.dynamodb.segment","meta":"development · int · aws"},{"type":"attribute","id":"aws.dynamodb.select","text":"The value of the Select request parameter.","url":"/attributes/aws.dynamodb.select","meta":"development · string · aws"},{"type":"attribute","id":"aws.dynamodb.table_count","text":"The number of items in the TableNames response parameter.","url":"/attributes/aws.dynamodb.table_count","meta":"development · int · aws"},{"type":"attribute","id":"aws.dynamodb.table_names","text":"The keys in the RequestItems object field.","url":"/attributes/aws.dynamodb.table_names","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.dynamodb.total_segments","text":"The value of the TotalSegments request parameter.","url":"/attributes/aws.dynamodb.total_segments","meta":"development · int · aws"},{"type":"attribute","id":"aws.ecs.cluster.arn","text":"The ARN of an ECS cluster.","url":"/attributes/aws.ecs.cluster.arn","meta":"development · string · aws"},{"type":"attribute","id":"aws.ecs.container.arn","text":"The Amazon Resource Name (ARN) of an ECS container instance.","url":"/attributes/aws.ecs.container.arn","meta":"development · string · aws"},{"type":"attribute","id":"aws.ecs.launchtype","text":"The launch type for an ECS task.","url":"/attributes/aws.ecs.launchtype","meta":"development · enum · aws"},{"type":"attribute","id":"aws.ecs.task.arn","text":"The ARN of a running ECS task.","url":"/attributes/aws.ecs.task.arn","meta":"development · string · aws"},{"type":"attribute","id":"aws.ecs.task.family","text":"The family name of the ECS task definition used to create the ECS task.","url":"/attributes/aws.ecs.task.family","meta":"development · string · aws"},{"type":"attribute","id":"aws.ecs.task.id","text":"The ID of a running ECS task. The ID MUST be extracted from task.arn.","url":"/attributes/aws.ecs.task.id","meta":"development · string · aws"},{"type":"attribute","id":"aws.ecs.task.revision","text":"The revision for the task definition used to create the ECS task.","url":"/attributes/aws.ecs.task.revision","meta":"development · string · aws"},{"type":"attribute","id":"aws.eks.cluster.arn","text":"The ARN of an EKS cluster.","url":"/attributes/aws.eks.cluster.arn","meta":"development · string · aws"},{"type":"attribute","id":"aws.extended_request_id","text":"The AWS extended request ID as returned in the response header x-amz-id-2.","url":"/attributes/aws.extended_request_id","meta":"development · string · aws"},{"type":"attribute","id":"aws.kinesis.stream_name","text":"The name of the AWS Kinesis stream the request refers to. Corresponds to the --stream-name parameter of the Kinesis describe-stream operation.","url":"/attributes/aws.kinesis.stream_name","meta":"development · string · aws"},{"type":"attribute","id":"aws.lambda.invoked_arn","text":"The full invoked ARN as provided on the Context passed to the function (Lambda-Runtime-Invoked-Function-Arn header on the /runtime/invocation/next applicable).","url":"/attributes/aws.lambda.invoked_arn","meta":"development · string · aws"},{"type":"attribute","id":"aws.lambda.resource_mapping.id","text":"The UUID of the AWS Lambda EvenSource Mapping. An event source is mapped to a lambda function. It's contents are read by Lambda and used to trigger a function.…","url":"/attributes/aws.lambda.resource_mapping.id","meta":"development · string · aws"},{"type":"attribute","id":"aws.log.group.arns","text":"The Amazon Resource Name(s) (ARN) of the AWS log group(s).","url":"/attributes/aws.log.group.arns","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.log.group.names","text":"The name(s) of the AWS log group(s) an application is writing to.","url":"/attributes/aws.log.group.names","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.log.stream.arns","text":"The ARN(s) of the AWS log stream(s).","url":"/attributes/aws.log.stream.arns","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.log.stream.names","text":"The name(s) of the AWS log stream(s) an application is writing to.","url":"/attributes/aws.log.stream.names","meta":"development · string[] · aws"},{"type":"attribute","id":"aws.request_id","text":"The AWS request ID as returned in the response headers x-amzn-requestid, x-amzn-request-id or x-amz-request-id.","url":"/attributes/aws.request_id","meta":"development · string · aws"},{"type":"attribute","id":"aws.s3.bucket","text":"The S3 bucket name the request refers to. Corresponds to the --bucket parameter of the S3 API operations.","url":"/attributes/aws.s3.bucket","meta":"development · string · aws"},{"type":"attribute","id":"aws.s3.copy_source","text":"The source object (in the form bucket/key) for the copy operation.","url":"/attributes/aws.s3.copy_source","meta":"development · string · aws"},{"type":"attribute","id":"aws.s3.delete","text":"The delete request container that specifies the objects to be deleted.","url":"/attributes/aws.s3.delete","meta":"development · string · aws"},{"type":"attribute","id":"aws.s3.key","text":"The S3 object key the request refers to. Corresponds to the --key parameter of the S3 API operations.","url":"/attributes/aws.s3.key","meta":"development · string · aws"},{"type":"attribute","id":"aws.s3.part_number","text":"The part number of the part being uploaded in a multipart-upload operation. This is a positive integer between 1 and 10,000.","url":"/attributes/aws.s3.part_number","meta":"development · int · aws"},{"type":"attribute","id":"aws.s3.upload_id","text":"Upload ID that identifies the multipart upload.","url":"/attributes/aws.s3.upload_id","meta":"development · string · aws"},{"type":"attribute","id":"aws.secretsmanager.secret.arn","text":"The ARN of the Secret stored in the Secrets Manager","url":"/attributes/aws.secretsmanager.secret.arn","meta":"development · string · aws"},{"type":"attribute","id":"aws.sns.topic.arn","text":"The ARN of the AWS SNS Topic. An Amazon SNS topic is a logical access point that acts as a communication channel.","url":"/attributes/aws.sns.topic.arn","meta":"development · string · aws"},{"type":"attribute","id":"aws.sqs.queue.url","text":"The URL of the AWS SQS Queue. It's a unique identifier for a queue in Amazon Simple Queue Service (SQS) and is used to access the queue and perform actions on …","url":"/attributes/aws.sqs.queue.url","meta":"development · string · aws"},{"type":"attribute","id":"aws.step_functions.activity.arn","text":"The ARN of the AWS Step Functions Activity.","url":"/attributes/aws.step_functions.activity.arn","meta":"development · string · aws"},{"type":"attribute","id":"aws.step_functions.state_machine.arn","text":"The ARN of the AWS Step Functions State Machine.","url":"/attributes/aws.step_functions.state_machine.arn","meta":"development · string · aws"},{"type":"attribute","id":"az.namespace","text":"Deprecated, use azure.resource_provider.namespace instead.","url":"/attributes/az.namespace","meta":"deprecated · string · az"},{"type":"attribute","id":"az.service_request_id","text":"Deprecated, use azure.service.request.id instead.","url":"/attributes/az.service_request_id","meta":"deprecated · string · az"},{"type":"attribute","id":"azure.client.id","text":"The unique identifier of the client instance.","url":"/attributes/azure.client.id","meta":"development · string · azure"},{"type":"attribute","id":"azure.cosmosdb.connection.mode","text":"Cosmos client connection mode.","url":"/attributes/azure.cosmosdb.connection.mode","meta":"development · enum · azure"},{"type":"attribute","id":"azure.cosmosdb.consistency.level","text":"Account or request consistency level.","url":"/attributes/azure.cosmosdb.consistency.level","meta":"development · enum · azure"},{"type":"attribute","id":"azure.cosmosdb.operation.contacted_regions","text":"List of regions contacted during operation in the order that they were contacted. If there is more than one region listed, it indicates that the operation was …","url":"/attributes/azure.cosmosdb.operation.contacted_regions","meta":"development · string[] · azure"},{"type":"attribute","id":"azure.cosmosdb.operation.request_charge","text":"The number of request units consumed by the operation.","url":"/attributes/azure.cosmosdb.operation.request_charge","meta":"development · double · azure"},{"type":"attribute","id":"azure.cosmosdb.request.body.size","text":"Request payload size in bytes.","url":"/attributes/azure.cosmosdb.request.body.size","meta":"development · int · azure"},{"type":"attribute","id":"azure.cosmosdb.response.sub_status_code","text":"Cosmos DB sub status code.","url":"/attributes/azure.cosmosdb.response.sub_status_code","meta":"development · int · azure"},{"type":"attribute","id":"azure.resource_group.name","text":"The name of the Azure resource group the resource belongs to.","url":"/attributes/azure.resource_group.name","meta":"development · string · azure"},{"type":"attribute","id":"azure.resource_provider.namespace","text":"Azure Resource Provider Namespace as recognized by the client.","url":"/attributes/azure.resource_provider.namespace","meta":"development · string · azure"},{"type":"attribute","id":"azure.service.request.id","text":"The unique identifier of the service request. It's generated by the Azure service and returned with the response.","url":"/attributes/azure.service.request.id","meta":"development · string · azure"},{"type":"attribute","id":"browser.brands","text":"Array of brand name and version separated by a space","url":"/attributes/browser.brands","meta":"development · string[] · browser"},{"type":"attribute","id":"browser.document.url.full","text":"Absolute URL of the current browser document according to RFC3986.","url":"/attributes/browser.document.url.full","meta":"development · string · browser"},{"type":"attribute","id":"browser.language","text":"Preferred language of the user using the browser","url":"/attributes/browser.language","meta":"development · string · browser"},{"type":"attribute","id":"browser.mobile","text":"A boolean that is true if the browser is running on a mobile device","url":"/attributes/browser.mobile","meta":"development · boolean · browser"},{"type":"attribute","id":"browser.platform","text":"The platform on which the browser is running","url":"/attributes/browser.platform","meta":"development · string · browser"},{"type":"attribute","id":"browser.web_vital.delta","text":"The delta between the current value and the last-reported value. See delta.","url":"/attributes/browser.web_vital.delta","meta":"development · double · browser"},{"type":"attribute","id":"browser.web_vital.id","text":"A unique ID representing this particular metric instance.","url":"/attributes/browser.web_vital.id","meta":"development · string · browser"},{"type":"attribute","id":"browser.web_vital.name","text":"Name of the web vital.","url":"/attributes/browser.web_vital.name","meta":"development · enum · browser"},{"type":"attribute","id":"browser.web_vital.navigation_type","text":"The type of navigation, as reported by the Navigation Timing API, with additional values reported by the web-vitals library.","url":"/attributes/browser.web_vital.navigation_type","meta":"development · enum · browser"},{"type":"attribute","id":"browser.web_vital.rating","text":"The rating of the web vital value against the \"good\", \"needs improvement\", and \"poor\" thresholds defined for the metric.","url":"/attributes/browser.web_vital.rating","meta":"development · enum · browser"},{"type":"attribute","id":"browser.web_vital.value","text":"Value of the web vital.","url":"/attributes/browser.web_vital.value","meta":"development · double · browser"},{"type":"attribute","id":"cassandra.consistency.level","text":"The consistency level of the query. Based on consistency values from CQL.","url":"/attributes/cassandra.consistency.level","meta":"development · enum · cassandra"},{"type":"attribute","id":"cassandra.coordinator.dc","text":"The data center of the coordinating node for a query.","url":"/attributes/cassandra.coordinator.dc","meta":"development · string · cassandra"},{"type":"attribute","id":"cassandra.coordinator.id","text":"The ID of the coordinating node for a query.","url":"/attributes/cassandra.coordinator.id","meta":"development · string · cassandra"},{"type":"attribute","id":"cassandra.page.size","text":"The fetch size used for paging, i.e. how many rows will be returned at once.","url":"/attributes/cassandra.page.size","meta":"development · int · cassandra"},{"type":"attribute","id":"cassandra.query.idempotent","text":"Whether or not the query is idempotent.","url":"/attributes/cassandra.query.idempotent","meta":"development · boolean · cassandra"},{"type":"attribute","id":"cassandra.speculative_execution.count","text":"The number of times a query was speculatively executed. Not set or 0 if the query was not executed speculatively.","url":"/attributes/cassandra.speculative_execution.count","meta":"development · int · cassandra"},{"type":"attribute","id":"cicd.pipeline.action.name","text":"The kind of action a pipeline run is performing.","url":"/attributes/cicd.pipeline.action.name","meta":"release_candidate · enum · cicd"},{"type":"attribute","id":"cicd.pipeline.name","text":"The human readable name of the pipeline within a CI/CD system.","url":"/attributes/cicd.pipeline.name","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"cicd.pipeline.result","text":"The result of a pipeline run.","url":"/attributes/cicd.pipeline.result","meta":"release_candidate · enum · cicd"},{"type":"attribute","id":"cicd.pipeline.run.id","text":"The unique identifier of a pipeline run within a CI/CD system.","url":"/attributes/cicd.pipeline.run.id","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"cicd.pipeline.run.state","text":"The pipeline run goes through these states during its lifecycle.","url":"/attributes/cicd.pipeline.run.state","meta":"release_candidate · enum · cicd"},{"type":"attribute","id":"cicd.pipeline.run.url.full","text":"The URL of the pipeline run, providing the complete address in order to locate and identify the pipeline run.","url":"/attributes/cicd.pipeline.run.url.full","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"cicd.pipeline.task.name","text":"The human readable name of a task within a pipeline. Task here most closely aligns with a computing process) in a pipeline. Other terms for tasks include comma…","url":"/attributes/cicd.pipeline.task.name","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"cicd.pipeline.task.run.id","text":"The unique identifier of a task run within a pipeline.","url":"/attributes/cicd.pipeline.task.run.id","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"cicd.pipeline.task.run.result","text":"The result of a task run.","url":"/attributes/cicd.pipeline.task.run.result","meta":"release_candidate · enum · cicd"},{"type":"attribute","id":"cicd.pipeline.task.run.url.full","text":"The URL of the pipeline task run, providing the complete address in order to locate and identify the pipeline task run.","url":"/attributes/cicd.pipeline.task.run.url.full","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"cicd.pipeline.task.type","text":"The type of the task within a pipeline.","url":"/attributes/cicd.pipeline.task.type","meta":"release_candidate · enum · cicd"},{"type":"attribute","id":"cicd.system.component","text":"The name of a component of the CI/CD system.","url":"/attributes/cicd.system.component","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"cicd.worker.id","text":"The unique identifier of a worker within a CI/CD system.","url":"/attributes/cicd.worker.id","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"cicd.worker.name","text":"The name of a worker within a CI/CD system.","url":"/attributes/cicd.worker.name","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"cicd.worker.state","text":"The state of a CI/CD worker / agent.","url":"/attributes/cicd.worker.state","meta":"release_candidate · enum · cicd"},{"type":"attribute","id":"cicd.worker.url.full","text":"The URL of the worker, providing the complete address in order to locate and identify the worker.","url":"/attributes/cicd.worker.url.full","meta":"release_candidate · string · cicd"},{"type":"attribute","id":"client.address","text":"Client address - domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name.","url":"/attributes/client.address","meta":"stable · string · client"},{"type":"attribute","id":"client.port","text":"Client port number.","url":"/attributes/client.port","meta":"stable · int · client"},{"type":"attribute","id":"cloud.account.id","text":"The cloud account ID the resource is assigned to.","url":"/attributes/cloud.account.id","meta":"development · string · cloud"},{"type":"attribute","id":"cloud.availability_zone","text":"Cloud regions often have multiple, isolated locations known as zones to increase availability. Availability zone represents the zone where the resource is runn…","url":"/attributes/cloud.availability_zone","meta":"development · string · cloud"},{"type":"attribute","id":"cloud.platform","text":"The cloud platform in use.","url":"/attributes/cloud.platform","meta":"development · enum · cloud"},{"type":"attribute","id":"cloud.provider","text":"Name of the cloud provider.","url":"/attributes/cloud.provider","meta":"development · enum · cloud"},{"type":"attribute","id":"cloud.region","text":"The geographical region within a cloud provider. When associated with a resource, this attribute specifies the region where the resource operates. When calling…","url":"/attributes/cloud.region","meta":"development · string · cloud"},{"type":"attribute","id":"cloud.resource_id","text":"Cloud provider-specific native identifier of the monitored cloud resource (e.g. an ARN on AWS, a fully qualified resource ID on Azure, a full resource name on …","url":"/attributes/cloud.resource_id","meta":"development · string · cloud"},{"type":"attribute","id":"cloudevents.event_id","text":"The event_id uniquely identifies the event.","url":"/attributes/cloudevents.event_id","meta":"development · string · cloudevents"},{"type":"attribute","id":"cloudevents.event_source","text":"The source identifies the context in which an event happened.","url":"/attributes/cloudevents.event_source","meta":"development · string · cloudevents"},{"type":"attribute","id":"cloudevents.event_spec_version","text":"The version of the CloudEvents specification which the event uses.","url":"/attributes/cloudevents.event_spec_version","meta":"development · string · cloudevents"},{"type":"attribute","id":"cloudevents.event_subject","text":"The subject of the event in the context of the event producer (identified by source).","url":"/attributes/cloudevents.event_subject","meta":"development · string · cloudevents"},{"type":"attribute","id":"cloudevents.event_type","text":"The event_type contains a value describing the type of event related to the originating occurrence.","url":"/attributes/cloudevents.event_type","meta":"development · string · cloudevents"},{"type":"attribute","id":"cloudfoundry.app.id","text":"The guid of the application.","url":"/attributes/cloudfoundry.app.id","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.app.instance.id","text":"The index of the application instance. 0 when just one instance is active.","url":"/attributes/cloudfoundry.app.instance.id","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.app.name","text":"The name of the application.","url":"/attributes/cloudfoundry.app.name","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.org.id","text":"The guid of the CloudFoundry org the application is running in.","url":"/attributes/cloudfoundry.org.id","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.org.name","text":"The name of the CloudFoundry organization the app is running in.","url":"/attributes/cloudfoundry.org.name","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.process.id","text":"The UID identifying the process.","url":"/attributes/cloudfoundry.process.id","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.process.type","text":"The type of process.","url":"/attributes/cloudfoundry.process.type","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.space.id","text":"The guid of the CloudFoundry space the application is running in.","url":"/attributes/cloudfoundry.space.id","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.space.name","text":"The name of the CloudFoundry space the application is running in.","url":"/attributes/cloudfoundry.space.name","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.system.id","text":"A guid or another name describing the event source.","url":"/attributes/cloudfoundry.system.id","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"cloudfoundry.system.instance.id","text":"A guid describing the concrete instance of the event source.","url":"/attributes/cloudfoundry.system.instance.id","meta":"development · string · cloudfoundry"},{"type":"attribute","id":"code.column","text":"Deprecated, use code.column.number","url":"/attributes/code.column","meta":"deprecated · int · code"},{"type":"attribute","id":"code.column.number","text":"The column number in code.file.path best representing the operation. It SHOULD point within the code unit named in code.function.name. This attribute MUST NOT …","url":"/attributes/code.column.number","meta":"stable · int · code"},{"type":"attribute","id":"code.file.path","text":"The source code filename that identifies the code unit as uniquely as possible (preferably an absolute file path). This attribute MUST NOT be used on the Profi…","url":"/attributes/code.file.path","meta":"stable · string · code"},{"type":"attribute","id":"code.filepath","text":"Deprecated, use code.file.path instead","url":"/attributes/code.filepath","meta":"deprecated · string · code"},{"type":"attribute","id":"code.function","text":"Deprecated, use code.function.name instead","url":"/attributes/code.function","meta":"deprecated · string · code"},{"type":"attribute","id":"code.function.name","text":"The method or function fully-qualified name without arguments. The value should fit the natural representation of the language runtime, which is also likely th…","url":"/attributes/code.function.name","meta":"stable · string · code"},{"type":"attribute","id":"code.line.number","text":"The line number in code.file.path best representing the operation. It SHOULD point within the code unit named in code.function.name. This attribute MUST NOT be…","url":"/attributes/code.line.number","meta":"stable · int · code"},{"type":"attribute","id":"code.lineno","text":"Deprecated, use code.line.number instead","url":"/attributes/code.lineno","meta":"deprecated · int · code"},{"type":"attribute","id":"code.namespace","text":"Deprecated, namespace is now included into code.function.name","url":"/attributes/code.namespace","meta":"deprecated · string · code"},{"type":"attribute","id":"code.stacktrace","text":"A stacktrace as a string in the natural representation for the language runtime. The representation is identical to exception.stacktrace. This attribute MUST N…","url":"/attributes/code.stacktrace","meta":"stable · string · code"},{"type":"attribute","id":"container.command","text":"The command used to run the container (i.e. the command name).","url":"/attributes/container.command","meta":"development · string · container"},{"type":"attribute","id":"container.command_args","text":"All the command arguments (including the command/executable itself) run by the container.","url":"/attributes/container.command_args","meta":"development · string[] · container"},{"type":"attribute","id":"container.command_line","text":"The full command run by the container as a single string representing the full command.","url":"/attributes/container.command_line","meta":"development · string · container"},{"type":"attribute","id":"container.cpu.state","text":"Deprecated, use cpu.mode instead.","url":"/attributes/container.cpu.state","meta":"deprecated · enum · container"},{"type":"attribute","id":"container.csi.plugin.name","text":"The name of the CSI (Container Storage Interface) plugin used by the volume.","url":"/attributes/container.csi.plugin.name","meta":"development · string · container"},{"type":"attribute","id":"container.csi.volume.id","text":"The unique volume ID returned by the CSI (Container Storage Interface) plugin.","url":"/attributes/container.csi.volume.id","meta":"development · string · container"},{"type":"attribute","id":"container.id","text":"Container ID. Usually a UUID, as for example used to identify Docker containers. The UUID might be abbreviated.","url":"/attributes/container.id","meta":"stable · string · container"},{"type":"attribute","id":"container.image.id","text":"Runtime specific image identifier. Usually a hash algorithm followed by a UUID.","url":"/attributes/container.image.id","meta":"development · string · container"},{"type":"attribute","id":"container.image.name","text":"Name of the image the container was built on.","url":"/attributes/container.image.name","meta":"stable · string · container"},{"type":"attribute","id":"container.image.repo_digests","text":"Repository digests of the container image as provided by the container runtime.","url":"/attributes/container.image.repo_digests","meta":"stable · string[] · container"},{"type":"attribute","id":"container.image.tags","text":"Container image tags. An example can be found in Docker Image Inspect. Should be only the <tag> section of the full name for example from registry.example.com/…","url":"/attributes/container.image.tags","meta":"stable · string[] · container"},{"type":"attribute","id":"container.label","text":"Container labels, <key> being the label name, the value being the label value.","url":"/attributes/container.label","meta":"development · template[string] · container"},{"type":"attribute","id":"container.labels","text":"Deprecated, use container.label instead.","url":"/attributes/container.labels","meta":"deprecated · template[string] · container"},{"type":"attribute","id":"container.name","text":"Container name used by container runtime.","url":"/attributes/container.name","meta":"development · string · container"},{"type":"attribute","id":"container.runtime","text":"The container runtime managing this container.","url":"/attributes/container.runtime","meta":"deprecated · string · container"},{"type":"attribute","id":"container.runtime.description","text":"A description about the runtime which could include, for example details about the CRI/API version being used or other customizations.","url":"/attributes/container.runtime.description","meta":"development · string · container"},{"type":"attribute","id":"container.runtime.name","text":"The container runtime managing this container.","url":"/attributes/container.runtime.name","meta":"development · string · container"},{"type":"attribute","id":"container.runtime.version","text":"The version of the runtime of this process, as returned by the runtime without modification.","url":"/attributes/container.runtime.version","meta":"development · string · container"},{"type":"attribute","id":"cpu.logical_number","text":"The logical CPU number [0..n-1]","url":"/attributes/cpu.logical_number","meta":"development · int · cpu"},{"type":"attribute","id":"cpu.mode","text":"The mode of the CPU","url":"/attributes/cpu.mode","meta":"release_candidate · enum · cpu"},{"type":"attribute","id":"cpython.gc.generation","text":"Value of the garbage collector collection generation.","url":"/attributes/cpython.gc.generation","meta":"development · enum · cpython"},{"type":"attribute","id":"db.cassandra.consistency_level","text":"Deprecated, use cassandra.consistency.level instead.","url":"/attributes/db.cassandra.consistency_level","meta":"deprecated · enum · db"},{"type":"attribute","id":"db.cassandra.coordinator.dc","text":"Deprecated, use cassandra.coordinator.dc instead.","url":"/attributes/db.cassandra.coordinator.dc","meta":"deprecated · string · db"},{"type":"attribute","id":"db.cassandra.coordinator.id","text":"Deprecated, use cassandra.coordinator.id instead.","url":"/attributes/db.cassandra.coordinator.id","meta":"deprecated · string · db"},{"type":"attribute","id":"db.cassandra.idempotence","text":"Deprecated, use cassandra.query.idempotent instead.","url":"/attributes/db.cassandra.idempotence","meta":"deprecated · boolean · db"},{"type":"attribute","id":"db.cassandra.page_size","text":"Deprecated, use cassandra.page.size instead.","url":"/attributes/db.cassandra.page_size","meta":"deprecated · int · db"},{"type":"attribute","id":"db.cassandra.speculative_execution_count","text":"Deprecated, use cassandra.speculative_execution.count instead.","url":"/attributes/db.cassandra.speculative_execution_count","meta":"deprecated · int · db"},{"type":"attribute","id":"db.cassandra.table","text":"Deprecated, use db.collection.name instead.","url":"/attributes/db.cassandra.table","meta":"deprecated · string · db"},{"type":"attribute","id":"db.client.connection.pool.name","text":"The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn't provide a name, instrumentation…","url":"/attributes/db.client.connection.pool.name","meta":"development · string · db"},{"type":"attribute","id":"db.client.connection.state","text":"The state of a connection in the pool","url":"/attributes/db.client.connection.state","meta":"development · enum · db"},{"type":"attribute","id":"db.client.connections.pool.name","text":"Deprecated, use db.client.connection.pool.name instead.","url":"/attributes/db.client.connections.pool.name","meta":"deprecated · string · db"},{"type":"attribute","id":"db.client.connections.state","text":"Deprecated, use db.client.connection.state instead.","url":"/attributes/db.client.connections.state","meta":"deprecated · enum · db"},{"type":"attribute","id":"db.collection.name","text":"The name of a collection (table, container) within the database.","url":"/attributes/db.collection.name","meta":"stable · string · db"},{"type":"attribute","id":"db.connection_string","text":"Deprecated, use server.address, server.port attributes instead.","url":"/attributes/db.connection_string","meta":"deprecated · string · db"},{"type":"attribute","id":"db.cosmosdb.client_id","text":"Deprecated, use azure.client.id instead.","url":"/attributes/db.cosmosdb.client_id","meta":"deprecated · string · db"},{"type":"attribute","id":"db.cosmosdb.connection_mode","text":"Deprecated, use azure.cosmosdb.connection.mode instead.","url":"/attributes/db.cosmosdb.connection_mode","meta":"deprecated · enum · db"},{"type":"attribute","id":"db.cosmosdb.consistency_level","text":"Deprecated, use cosmosdb.consistency.level instead.","url":"/attributes/db.cosmosdb.consistency_level","meta":"deprecated · enum · db"},{"type":"attribute","id":"db.cosmosdb.container","text":"Deprecated, use db.collection.name instead.","url":"/attributes/db.cosmosdb.container","meta":"deprecated · string · db"},{"type":"attribute","id":"db.cosmosdb.operation_type","text":"Deprecated, no replacement at this time.","url":"/attributes/db.cosmosdb.operation_type","meta":"deprecated · enum · db"},{"type":"attribute","id":"db.cosmosdb.regions_contacted","text":"Deprecated, use azure.cosmosdb.operation.contacted_regions instead.","url":"/attributes/db.cosmosdb.regions_contacted","meta":"deprecated · string[] · db"},{"type":"attribute","id":"db.cosmosdb.request_charge","text":"Deprecated, use azure.cosmosdb.operation.request_charge instead.","url":"/attributes/db.cosmosdb.request_charge","meta":"deprecated · double · db"},{"type":"attribute","id":"db.cosmosdb.request_content_length","text":"Deprecated, use azure.cosmosdb.request.body.size instead.","url":"/attributes/db.cosmosdb.request_content_length","meta":"deprecated · int · db"},{"type":"attribute","id":"db.cosmosdb.status_code","text":"Deprecated, use db.response.status_code instead.","url":"/attributes/db.cosmosdb.status_code","meta":"deprecated · int · db"},{"type":"attribute","id":"db.cosmosdb.sub_status_code","text":"Deprecated, use azure.cosmosdb.response.sub_status_code instead.","url":"/attributes/db.cosmosdb.sub_status_code","meta":"deprecated · int · db"},{"type":"attribute","id":"db.elasticsearch.cluster.name","text":"Deprecated, use db.namespace instead.","url":"/attributes/db.elasticsearch.cluster.name","meta":"deprecated · string · db"},{"type":"attribute","id":"db.elasticsearch.node.name","text":"Deprecated, use elasticsearch.node.name instead.","url":"/attributes/db.elasticsearch.node.name","meta":"deprecated · string · db"},{"type":"attribute","id":"db.elasticsearch.path_parts","text":"Deprecated, use db.operation.parameter instead.","url":"/attributes/db.elasticsearch.path_parts","meta":"deprecated · template[string] · db"},{"type":"attribute","id":"db.instance.id","text":"Deprecated, no general replacement at this time. For Elasticsearch, use db.elasticsearch.node.name instead.","url":"/attributes/db.instance.id","meta":"deprecated · string · db"},{"type":"attribute","id":"db.jdbc.driver_classname","text":"Removed, no replacement at this time.","url":"/attributes/db.jdbc.driver_classname","meta":"deprecated · string · db"},{"type":"attribute","id":"db.mongodb.collection","text":"Deprecated, use db.collection.name instead.","url":"/attributes/db.mongodb.collection","meta":"deprecated · string · db"},{"type":"attribute","id":"db.mssql.instance_name","text":"Deprecated, SQL Server instance is now populated as a part of db.namespace attribute.","url":"/attributes/db.mssql.instance_name","meta":"deprecated · string · db"},{"type":"attribute","id":"db.name","text":"Deprecated, use db.namespace instead.","url":"/attributes/db.name","meta":"deprecated · string · db"},{"type":"attribute","id":"db.namespace","text":"The name of the database, fully qualified within the server address and port.","url":"/attributes/db.namespace","meta":"stable · string · db"},{"type":"attribute","id":"db.operation","text":"Deprecated, use db.operation.name instead.","url":"/attributes/db.operation","meta":"deprecated · string · db"},{"type":"attribute","id":"db.operation.batch.size","text":"The number of database operations included in a batch operation.","url":"/attributes/db.operation.batch.size","meta":"stable · int · db"},{"type":"attribute","id":"db.operation.name","text":"The name of the operation or command being executed.","url":"/attributes/db.operation.name","meta":"stable · string · db"},{"type":"attribute","id":"db.operation.parameter","text":"A database operation parameter, with <key> being the parameter name, and the attribute value being a string representation of the parameter value.","url":"/attributes/db.operation.parameter","meta":"development · template[string] · db"},{"type":"attribute","id":"db.query.parameter","text":"A database query parameter, with <key> being the parameter name, and the attribute value being a string representation of the parameter value.","url":"/attributes/db.query.parameter","meta":"development · template[string] · db"},{"type":"attribute","id":"db.query.summary","text":"Low cardinality summary of a database query.","url":"/attributes/db.query.summary","meta":"stable · string · db"},{"type":"attribute","id":"db.query.text","text":"The database query being executed.","url":"/attributes/db.query.text","meta":"stable · string · db"},{"type":"attribute","id":"db.redis.database_index","text":"Deprecated, use db.namespace instead.","url":"/attributes/db.redis.database_index","meta":"deprecated · int · db"},{"type":"attribute","id":"db.response.returned_rows","text":"Number of rows returned by the operation.","url":"/attributes/db.response.returned_rows","meta":"development · int · db"},{"type":"attribute","id":"db.response.status_code","text":"Database response status code.","url":"/attributes/db.response.status_code","meta":"stable · string · db"},{"type":"attribute","id":"db.sql.table","text":"Deprecated, use db.collection.name instead.","url":"/attributes/db.sql.table","meta":"deprecated · string · db"},{"type":"attribute","id":"db.statement","text":"The database statement being executed.","url":"/attributes/db.statement","meta":"deprecated · string · db"},{"type":"attribute","id":"db.stored_procedure.name","text":"The name of a stored procedure within the database.","url":"/attributes/db.stored_procedure.name","meta":"stable · string · db"},{"type":"attribute","id":"db.system","text":"Deprecated, use db.system.name instead.","url":"/attributes/db.system","meta":"deprecated · enum · db"},{"type":"attribute","id":"db.system.name","text":"The database management system (DBMS) product as identified by the client instrumentation.","url":"/attributes/db.system.name","meta":"stable · enum · db"},{"type":"attribute","id":"db.user","text":"Deprecated, no replacement at this time.","url":"/attributes/db.user","meta":"deprecated · string · db"},{"type":"attribute","id":"deployment.environment","text":"Deprecated, use deployment.environment.name instead.","url":"/attributes/deployment.environment","meta":"deprecated · string · deployment"},{"type":"attribute","id":"deployment.environment.name","text":"Name of the deployment environment (aka deployment tier).","url":"/attributes/deployment.environment.name","meta":"stable · enum · deployment"},{"type":"attribute","id":"deployment.id","text":"The ID of the deployment.","url":"/attributes/deployment.id","meta":"development · string · deployment"},{"type":"attribute","id":"deployment.name","text":"The name of the deployment.","url":"/attributes/deployment.name","meta":"development · string · deployment"},{"type":"attribute","id":"deployment.status","text":"The status of the deployment.","url":"/attributes/deployment.status","meta":"development · enum · deployment"},{"type":"attribute","id":"destination.address","text":"Destination address - domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name.","url":"/attributes/destination.address","meta":"development · string · destination"},{"type":"attribute","id":"destination.port","text":"Destination port number","url":"/attributes/destination.port","meta":"development · int · destination"},{"type":"attribute","id":"device.id","text":"A unique identifier representing the device","url":"/attributes/device.id","meta":"development · string · device"},{"type":"attribute","id":"device.manufacturer","text":"The name of the device manufacturer","url":"/attributes/device.manufacturer","meta":"development · string · device"},{"type":"attribute","id":"device.model.identifier","text":"The model identifier for the device","url":"/attributes/device.model.identifier","meta":"development · string · device"},{"type":"attribute","id":"device.model.name","text":"The marketing name for the device model","url":"/attributes/device.model.name","meta":"development · string · device"},{"type":"attribute","id":"disk.io.direction","text":"The disk IO operation direction.","url":"/attributes/disk.io.direction","meta":"release_candidate · enum · disk"},{"type":"attribute","id":"dns.answers","text":"The list of IPv4 or IPv6 addresses resolved during DNS lookup.","url":"/attributes/dns.answers","meta":"development · string[] · dns"},{"type":"attribute","id":"dns.question.name","text":"The name being queried.","url":"/attributes/dns.question.name","meta":"development · string · dns"},{"type":"attribute","id":"dotnet.gc.heap.generation","text":"Name of the garbage collector managed heap generation.","url":"/attributes/dotnet.gc.heap.generation","meta":"stable · enum · dotnet"},{"type":"attribute","id":"elasticsearch.node.name","text":"Represents the human-readable identifier of the node/instance to which a request was routed.","url":"/attributes/elasticsearch.node.name","meta":"development · string · elasticsearch"},{"type":"attribute","id":"enduser.id","text":"Unique identifier of an end user in the system. It maybe a username, email address, or other identifier.","url":"/attributes/enduser.id","meta":"development · string · enduser"},{"type":"attribute","id":"enduser.pseudo.id","text":"Pseudonymous identifier of an end user. This identifier should be a random value that is not directly linked or associated with the end user's actual identity.","url":"/attributes/enduser.pseudo.id","meta":"development · string · enduser"},{"type":"attribute","id":"enduser.role","text":"Deprecated, use user.roles instead.","url":"/attributes/enduser.role","meta":"deprecated · string · enduser"},{"type":"attribute","id":"enduser.scope","text":"Deprecated, no replacement at this time.","url":"/attributes/enduser.scope","meta":"deprecated · string · enduser"},{"type":"attribute","id":"error.message","text":"A message providing more detail about an error in human-readable form.","url":"/attributes/error.message","meta":"deprecated · string · error"},{"type":"attribute","id":"error.type","text":"Describes a class of error the operation ended with.","url":"/attributes/error.type","meta":"stable · enum · error"},{"type":"attribute","id":"event.name","text":"Identifies the class / type of event.","url":"/attributes/event.name","meta":"deprecated · string · event"},{"type":"attribute","id":"exception.escaped","text":"Indicates that the exception is escaping the scope of the span.","url":"/attributes/exception.escaped","meta":"deprecated · boolean · exception"},{"type":"attribute","id":"exception.message","text":"The exception message.","url":"/attributes/exception.message","meta":"stable · string · exception"},{"type":"attribute","id":"exception.stacktrace","text":"A stacktrace as a string in the natural representation for the language runtime. The representation is to be determined and documented by each language SIG.","url":"/attributes/exception.stacktrace","meta":"stable · string · exception"},{"type":"attribute","id":"exception.type","text":"The type of the exception (its fully-qualified class name, if applicable). The dynamic type of the exception should be preferred over the static type in langua…","url":"/attributes/exception.type","meta":"stable · string · exception"},{"type":"attribute","id":"faas.coldstart","text":"A boolean that is true if the serverless function is executed for the first time (aka cold-start).","url":"/attributes/faas.coldstart","meta":"development · boolean · faas"},{"type":"attribute","id":"faas.cron","text":"A string containing the schedule period as Cron Expression.","url":"/attributes/faas.cron","meta":"development · string · faas"},{"type":"attribute","id":"faas.document.collection","text":"The name of the source on which the triggering operation was performed. For example, in Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to…","url":"/attributes/faas.document.collection","meta":"development · string · faas"},{"type":"attribute","id":"faas.document.name","text":"The document name/table subjected to the operation. For example, in Cloud Storage or S3 is the name of the file, and in Cosmos DB the table name.","url":"/attributes/faas.document.name","meta":"development · string · faas"},{"type":"attribute","id":"faas.document.operation","text":"Describes the type of the operation that was performed on the data.","url":"/attributes/faas.document.operation","meta":"development · enum · faas"},{"type":"attribute","id":"faas.document.time","text":"A string containing the time when the data was accessed in the ISO 8601 format expressed in UTC.","url":"/attributes/faas.document.time","meta":"development · string · faas"},{"type":"attribute","id":"faas.instance","text":"The execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version.","url":"/attributes/faas.instance","meta":"development · string · faas"},{"type":"attribute","id":"faas.invocation_id","text":"The invocation ID of the current function invocation.","url":"/attributes/faas.invocation_id","meta":"development · string · faas"},{"type":"attribute","id":"faas.invoked_name","text":"The name of the invoked function.","url":"/attributes/faas.invoked_name","meta":"development · string · faas"},{"type":"attribute","id":"faas.invoked_provider","text":"The cloud provider of the invoked function.","url":"/attributes/faas.invoked_provider","meta":"development · enum · faas"},{"type":"attribute","id":"faas.invoked_region","text":"The cloud region of the invoked function.","url":"/attributes/faas.invoked_region","meta":"development · string · faas"},{"type":"attribute","id":"faas.max_memory","text":"The amount of memory available to the serverless function converted to Bytes.","url":"/attributes/faas.max_memory","meta":"development · int · faas"},{"type":"attribute","id":"faas.name","text":"The name of the single function that this runtime instance executes.","url":"/attributes/faas.name","meta":"development · string · faas"},{"type":"attribute","id":"faas.time","text":"A string containing the function invocation time in the ISO 8601 format expressed in UTC.","url":"/attributes/faas.time","meta":"development · string · faas"},{"type":"attribute","id":"faas.trigger","text":"Type of the trigger which caused this function invocation.","url":"/attributes/faas.trigger","meta":"development · enum · faas"},{"type":"attribute","id":"faas.version","text":"The immutable version of the function being executed.","url":"/attributes/faas.version","meta":"development · string · faas"},{"type":"attribute","id":"feature_flag.context.id","text":"The unique identifier for the flag evaluation context. For example, the targeting key.","url":"/attributes/feature_flag.context.id","meta":"release_candidate · string · feature_flag"},{"type":"attribute","id":"feature_flag.error.message","text":"A message providing more detail about an error that occurred during feature flag evaluation in human-readable form.","url":"/attributes/feature_flag.error.message","meta":"release_candidate · string · feature_flag"},{"type":"attribute","id":"feature_flag.evaluation.error.message","text":"Deprecated, use feature_flag.error.message instead.","url":"/attributes/feature_flag.evaluation.error.message","meta":"deprecated · string · feature_flag"},{"type":"attribute","id":"feature_flag.evaluation.reason","text":"Deprecated, use feature_flag.result.reason instead.","url":"/attributes/feature_flag.evaluation.reason","meta":"deprecated · enum · feature_flag"},{"type":"attribute","id":"feature_flag.key","text":"The lookup key of the feature flag.","url":"/attributes/feature_flag.key","meta":"release_candidate · string · feature_flag"},{"type":"attribute","id":"feature_flag.provider_name","text":"Deprecated, use feature_flag.provider.name instead.","url":"/attributes/feature_flag.provider_name","meta":"deprecated · string · feature_flag"},{"type":"attribute","id":"feature_flag.provider.name","text":"Identifies the feature flag provider.","url":"/attributes/feature_flag.provider.name","meta":"release_candidate · string · feature_flag"},{"type":"attribute","id":"feature_flag.result.reason","text":"The reason code which shows how a feature flag value was determined.","url":"/attributes/feature_flag.result.reason","meta":"release_candidate · enum · feature_flag"},{"type":"attribute","id":"feature_flag.result.value","text":"The evaluated value of the feature flag.","url":"/attributes/feature_flag.result.value","meta":"release_candidate · any · feature_flag"},{"type":"attribute","id":"feature_flag.result.variant","text":"A semantic identifier for an evaluated flag value.","url":"/attributes/feature_flag.result.variant","meta":"release_candidate · string · feature_flag"},{"type":"attribute","id":"feature_flag.set.id","text":"The identifier of the flag set to which the feature flag belongs.","url":"/attributes/feature_flag.set.id","meta":"release_candidate · string · feature_flag"},{"type":"attribute","id":"feature_flag.variant","text":"Deprecated, use feature_flag.result.variant instead.","url":"/attributes/feature_flag.variant","meta":"deprecated · string · feature_flag"},{"type":"attribute","id":"feature_flag.version","text":"The version of the ruleset used during the evaluation. This may be any stable value which uniquely identifies the ruleset.","url":"/attributes/feature_flag.version","meta":"release_candidate · string · feature_flag"},{"type":"attribute","id":"file.accessed","text":"Time when the file was last accessed, in ISO 8601 format.","url":"/attributes/file.accessed","meta":"development · string · file"},{"type":"attribute","id":"file.attributes","text":"Array of file attributes.","url":"/attributes/file.attributes","meta":"development · string[] · file"},{"type":"attribute","id":"file.changed","text":"Time when the file attributes or metadata was last changed, in ISO 8601 format.","url":"/attributes/file.changed","meta":"development · string · file"},{"type":"attribute","id":"file.created","text":"Time when the file was created, in ISO 8601 format.","url":"/attributes/file.created","meta":"development · string · file"},{"type":"attribute","id":"file.directory","text":"Directory where the file is located. It should include the drive letter, when appropriate.","url":"/attributes/file.directory","meta":"development · string · file"},{"type":"attribute","id":"file.extension","text":"File extension, excluding the leading dot.","url":"/attributes/file.extension","meta":"development · string · file"},{"type":"attribute","id":"file.fork_name","text":"Name of the fork. A fork is additional data associated with a filesystem object.","url":"/attributes/file.fork_name","meta":"development · string · file"},{"type":"attribute","id":"file.group.id","text":"Primary Group ID (GID) of the file.","url":"/attributes/file.group.id","meta":"development · string · file"},{"type":"attribute","id":"file.group.name","text":"Primary group name of the file.","url":"/attributes/file.group.name","meta":"development · string · file"},{"type":"attribute","id":"file.inode","text":"Inode representing the file in the filesystem.","url":"/attributes/file.inode","meta":"development · string · file"},{"type":"attribute","id":"file.lock.mechanism","text":"The lock mechanism such as noted by POSIX","url":"/attributes/file.lock.mechanism","meta":"development · string · file"},{"type":"attribute","id":"file.lock.mode","text":"Mode of lock or operation such as documented by POSIX","url":"/attributes/file.lock.mode","meta":"development · string · file"},{"type":"attribute","id":"file.lock.type","text":"The lock type as represented by i.e. POSIX's l_type.","url":"/attributes/file.lock.type","meta":"development · enum · file"},{"type":"attribute","id":"file.mode","text":"Mode of the file in octal representation.","url":"/attributes/file.mode","meta":"development · string · file"},{"type":"attribute","id":"file.modified","text":"Time when the file content was last modified, in ISO 8601 format.","url":"/attributes/file.modified","meta":"development · string · file"},{"type":"attribute","id":"file.name","text":"Name of the file including the extension, without the directory.","url":"/attributes/file.name","meta":"development · string · file"},{"type":"attribute","id":"file.owner.id","text":"The user ID (UID) or security identifier (SID) of the file owner.","url":"/attributes/file.owner.id","meta":"development · string · file"},{"type":"attribute","id":"file.owner.name","text":"Username of the file owner.","url":"/attributes/file.owner.name","meta":"development · string · file"},{"type":"attribute","id":"file.path","text":"Full path to the file, including the filename. It should include the drive letter, when appropriate.","url":"/attributes/file.path","meta":"development · string · file"},{"type":"attribute","id":"file.size","text":"File size in bytes.","url":"/attributes/file.size","meta":"development · int · file"},{"type":"attribute","id":"file.symbolic_link.target_path","text":"Path to the target of a symbolic link.","url":"/attributes/file.symbolic_link.target_path","meta":"development · string · file"},{"type":"attribute","id":"gcp.apphub_destination.application.container","text":"The container within GCP where the AppHub destination application is defined.","url":"/attributes/gcp.apphub_destination.application.container","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.apphub_destination.application.id","text":"The name of the destination application as configured in AppHub.","url":"/attributes/gcp.apphub_destination.application.id","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.apphub_destination.application.location","text":"The GCP zone or region where the destination application is defined.","url":"/attributes/gcp.apphub_destination.application.location","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.apphub_destination.service.criticality_type","text":"Criticality of a destination workload indicates its importance to the business as specified in AppHub type enum","url":"/attributes/gcp.apphub_destination.service.criticality_type","meta":"development · enum · gcp"},{"type":"attribute","id":"gcp.apphub_destination.service.environment_type","text":"Software lifecycle stage of a destination service as defined AppHub environment type","url":"/attributes/gcp.apphub_destination.service.environment_type","meta":"development · enum · gcp"},{"type":"attribute","id":"gcp.apphub_destination.service.id","text":"The name of the destination service as configured in AppHub.","url":"/attributes/gcp.apphub_destination.service.id","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.apphub_destination.workload.criticality_type","text":"Criticality of a destination workload indicates its importance to the business as specified in AppHub type enum","url":"/attributes/gcp.apphub_destination.workload.criticality_type","meta":"development · enum · gcp"},{"type":"attribute","id":"gcp.apphub_destination.workload.environment_type","text":"Environment of a destination workload is the stage of a software lifecycle as provided in the AppHub environment type","url":"/attributes/gcp.apphub_destination.workload.environment_type","meta":"development · enum · gcp"},{"type":"attribute","id":"gcp.apphub_destination.workload.id","text":"The name of the destination workload as configured in AppHub.","url":"/attributes/gcp.apphub_destination.workload.id","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.apphub.application.container","text":"The container within GCP where the AppHub application is defined.","url":"/attributes/gcp.apphub.application.container","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.apphub.application.id","text":"The name of the application as configured in AppHub.","url":"/attributes/gcp.apphub.application.id","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.apphub.application.location","text":"The GCP zone or region where the application is defined.","url":"/attributes/gcp.apphub.application.location","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.apphub.service.criticality_type","text":"Criticality of a service indicates its importance to the business.","url":"/attributes/gcp.apphub.service.criticality_type","meta":"development · enum · gcp"},{"type":"attribute","id":"gcp.apphub.service.environment_type","text":"Environment of a service is the stage of a software lifecycle.","url":"/attributes/gcp.apphub.service.environment_type","meta":"development · enum · gcp"},{"type":"attribute","id":"gcp.apphub.service.id","text":"The name of the service as configured in AppHub.","url":"/attributes/gcp.apphub.service.id","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.apphub.workload.criticality_type","text":"Criticality of a workload indicates its importance to the business.","url":"/attributes/gcp.apphub.workload.criticality_type","meta":"development · enum · gcp"},{"type":"attribute","id":"gcp.apphub.workload.environment_type","text":"Environment of a workload is the stage of a software lifecycle.","url":"/attributes/gcp.apphub.workload.environment_type","meta":"development · enum · gcp"},{"type":"attribute","id":"gcp.apphub.workload.id","text":"The name of the workload as configured in AppHub.","url":"/attributes/gcp.apphub.workload.id","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.client.service","text":"Identifies the Google Cloud service for which the official client library is intended.","url":"/attributes/gcp.client.service","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.cloud_run.job.execution","text":"The name of the Cloud Run execution being run for the Job, as set by the CLOUD_RUN_EXECUTION environment variable.","url":"/attributes/gcp.cloud_run.job.execution","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.cloud_run.job.task_index","text":"The index for a task within an execution as provided by the CLOUD_RUN_TASK_INDEX environment variable.","url":"/attributes/gcp.cloud_run.job.task_index","meta":"development · int · gcp"},{"type":"attribute","id":"gcp.gce.instance_group_manager.name","text":"The name of the Instance Group Manager (IGM) that manages this VM, if any.","url":"/attributes/gcp.gce.instance_group_manager.name","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.gce.instance_group_manager.region","text":"The region of a **regional** Instance Group Manager (e.g., us-central1). Set this **only** when the IGM is regional.","url":"/attributes/gcp.gce.instance_group_manager.region","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.gce.instance_group_manager.zone","text":"The zone of a **zonal** Instance Group Manager (e.g., us-central1-a). Set this **only** when the IGM is zonal.","url":"/attributes/gcp.gce.instance_group_manager.zone","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.gce.instance.hostname","text":"The hostname of a GCE instance. This is the full value of the default or custom hostname.","url":"/attributes/gcp.gce.instance.hostname","meta":"development · string · gcp"},{"type":"attribute","id":"gcp.gce.instance.labels","text":"GCE instance labels, <key> being the label name and the value being the label value.","url":"/attributes/gcp.gce.instance.labels","meta":"development · template[string] · gcp"},{"type":"attribute","id":"gcp.gce.instance.name","text":"The instance name of a GCE instance. This is the value provided by host.name, the visible name of the instance in the Cloud Console UI, and the prefix for the …","url":"/attributes/gcp.gce.instance.name","meta":"development · string · gcp"},{"type":"attribute","id":"gen_ai.completion","text":"Deprecated, use Event API to report completions contents.","url":"/attributes/gen_ai.completion","meta":"deprecated · string · gen_ai"},{"type":"attribute","id":"gen_ai.openai.request.response_format","text":"Deprecated, use gen_ai.output.type.","url":"/attributes/gen_ai.openai.request.response_format","meta":"deprecated · enum · gen_ai"},{"type":"attribute","id":"gen_ai.openai.request.seed","text":"Deprecated, use gen_ai.request.seed.","url":"/attributes/gen_ai.openai.request.seed","meta":"deprecated · int · gen_ai"},{"type":"attribute","id":"gen_ai.openai.request.service_tier","text":"Deprecated, use openai.request.service_tier.","url":"/attributes/gen_ai.openai.request.service_tier","meta":"deprecated · enum · gen_ai"},{"type":"attribute","id":"gen_ai.openai.response.service_tier","text":"Deprecated, use openai.response.service_tier.","url":"/attributes/gen_ai.openai.response.service_tier","meta":"deprecated · string · gen_ai"},{"type":"attribute","id":"gen_ai.openai.response.system_fingerprint","text":"Deprecated, use openai.response.system_fingerprint.","url":"/attributes/gen_ai.openai.response.system_fingerprint","meta":"deprecated · string · gen_ai"},{"type":"attribute","id":"gen_ai.prompt","text":"Deprecated, use Event API to report prompt contents.","url":"/attributes/gen_ai.prompt","meta":"deprecated · string · gen_ai"},{"type":"attribute","id":"gen_ai.system","text":"Deprecated, use gen_ai.provider.name instead.","url":"/attributes/gen_ai.system","meta":"deprecated · enum · gen_ai"},{"type":"attribute","id":"gen_ai.usage.cache_creation.input_tokens","text":"The number of input tokens written to a provider-managed cache.","url":"/attributes/gen_ai.usage.cache_creation.input_tokens","meta":"deprecated · int · gen_ai"},{"type":"attribute","id":"gen_ai.usage.completion_tokens","text":"Deprecated, use gen_ai.usage.output_tokens instead.","url":"/attributes/gen_ai.usage.completion_tokens","meta":"deprecated · int · gen_ai"},{"type":"attribute","id":"gen_ai.usage.prompt_tokens","text":"Deprecated, use gen_ai.usage.input_tokens instead.","url":"/attributes/gen_ai.usage.prompt_tokens","meta":"deprecated · int · gen_ai"},{"type":"attribute","id":"geo.continent.code","text":"Two-letter code representing continent’s name.","url":"/attributes/geo.continent.code","meta":"development · enum · geo"},{"type":"attribute","id":"geo.country.iso_code","text":"Two-letter ISO Country Code (ISO 3166-1 alpha2).","url":"/attributes/geo.country.iso_code","meta":"development · string · geo"},{"type":"attribute","id":"geo.locality.name","text":"Locality name. Represents the name of a city, town, village, or similar populated place.","url":"/attributes/geo.locality.name","meta":"development · string · geo"},{"type":"attribute","id":"geo.location.lat","text":"Latitude of the geo location in WGS84.","url":"/attributes/geo.location.lat","meta":"development · double · geo"},{"type":"attribute","id":"geo.location.lon","text":"Longitude of the geo location in WGS84.","url":"/attributes/geo.location.lon","meta":"development · double · geo"},{"type":"attribute","id":"geo.postal_code","text":"Postal code associated with the location. Values appropriate for this field may also be known as a postcode or ZIP code and will vary widely from country to co…","url":"/attributes/geo.postal_code","meta":"development · string · geo"},{"type":"attribute","id":"geo.region.iso_code","text":"Region ISO code (ISO 3166-2).","url":"/attributes/geo.region.iso_code","meta":"development · string · geo"},{"type":"attribute","id":"go.cpu.detailed_state","text":"The detailed state of the CPU.","url":"/attributes/go.cpu.detailed_state","meta":"development · string · go"},{"type":"attribute","id":"go.cpu.state","text":"The state of the CPU.","url":"/attributes/go.cpu.state","meta":"development · enum · go"},{"type":"attribute","id":"go.memory.detailed_type","text":"The detailed type of memory.","url":"/attributes/go.memory.detailed_type","meta":"development · string · go"},{"type":"attribute","id":"go.memory.type","text":"The type of memory.","url":"/attributes/go.memory.type","meta":"development · enum · go"},{"type":"attribute","id":"graphql.document","text":"The GraphQL document being executed.","url":"/attributes/graphql.document","meta":"development · string · graphql"},{"type":"attribute","id":"graphql.operation.name","text":"The name of the operation being executed.","url":"/attributes/graphql.operation.name","meta":"development · string · graphql"},{"type":"attribute","id":"graphql.operation.type","text":"The type of the operation being executed.","url":"/attributes/graphql.operation.type","meta":"development · enum · graphql"},{"type":"attribute","id":"heroku.app.id","text":"Unique identifier for the application","url":"/attributes/heroku.app.id","meta":"development · string · heroku"},{"type":"attribute","id":"heroku.release.commit","text":"Commit hash for the current release","url":"/attributes/heroku.release.commit","meta":"development · string · heroku"},{"type":"attribute","id":"heroku.release.creation_timestamp","text":"Time and date the release was created","url":"/attributes/heroku.release.creation_timestamp","meta":"development · string · heroku"},{"type":"attribute","id":"host.arch","text":"The CPU architecture the host system is running on.","url":"/attributes/host.arch","meta":"development · enum · host"},{"type":"attribute","id":"host.cpu.cache.l2.size","text":"The amount of level 2 memory cache available to the processor (in Bytes).","url":"/attributes/host.cpu.cache.l2.size","meta":"development · int · host"},{"type":"attribute","id":"host.cpu.family","text":"Family or generation of the CPU.","url":"/attributes/host.cpu.family","meta":"development · string · host"},{"type":"attribute","id":"host.cpu.model.id","text":"Model identifier. It provides more granular information about the CPU, distinguishing it from other CPUs within the same family.","url":"/attributes/host.cpu.model.id","meta":"development · string · host"},{"type":"attribute","id":"host.cpu.model.name","text":"Model designation of the processor.","url":"/attributes/host.cpu.model.name","meta":"development · string · host"},{"type":"attribute","id":"host.cpu.stepping","text":"Stepping or core revisions.","url":"/attributes/host.cpu.stepping","meta":"development · string · host"},{"type":"attribute","id":"host.cpu.vendor.id","text":"Processor manufacturer identifier. A maximum 12-character string.","url":"/attributes/host.cpu.vendor.id","meta":"development · string · host"},{"type":"attribute","id":"host.id","text":"Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider. For non-containerized systems, this should be the machine-id. See the t…","url":"/attributes/host.id","meta":"development · string · host"},{"type":"attribute","id":"host.image.id","text":"VM image ID or host OS image ID. For Cloud, this value is from the provider.","url":"/attributes/host.image.id","meta":"development · string · host"},{"type":"attribute","id":"host.image.name","text":"Name of the VM image or OS install the host was instantiated from.","url":"/attributes/host.image.name","meta":"development · string · host"},{"type":"attribute","id":"host.image.version","text":"The version string of the VM image or host OS as defined in Version Attributes.","url":"/attributes/host.image.version","meta":"development · string · host"},{"type":"attribute","id":"host.ip","text":"Available IP addresses of the host, excluding loopback interfaces.","url":"/attributes/host.ip","meta":"development · string[] · host"},{"type":"attribute","id":"host.mac","text":"Available MAC addresses of the host, excluding loopback interfaces.","url":"/attributes/host.mac","meta":"development · string[] · host"},{"type":"attribute","id":"host.name","text":"Name of the host. On UNIX systems, it may contain what the hostname command returns, or the fully qualified hostname, or another name specified by the user.","url":"/attributes/host.name","meta":"development · string · host"},{"type":"attribute","id":"host.type","text":"Type of host. For Cloud, this must be the machine type.","url":"/attributes/host.type","meta":"development · string · host"},{"type":"attribute","id":"http.client_ip","text":"Deprecated, use client.address instead.","url":"/attributes/http.client_ip","meta":"deprecated · string · http"},{"type":"attribute","id":"http.connection.state","text":"State of the HTTP connection in the HTTP connection pool.","url":"/attributes/http.connection.state","meta":"development · enum · http"},{"type":"attribute","id":"http.flavor","text":"Deprecated, use network.protocol.name and network.protocol.version instead.","url":"/attributes/http.flavor","meta":"deprecated · enum · http"},{"type":"attribute","id":"http.host","text":"Deprecated, use one of server.address, client.address or http.request.header.host instead, depending on the usage.","url":"/attributes/http.host","meta":"deprecated · string · http"},{"type":"attribute","id":"http.method","text":"Deprecated, use http.request.method instead.","url":"/attributes/http.method","meta":"deprecated · string · http"},{"type":"attribute","id":"http.request_content_length","text":"Deprecated, use http.request.header.content-length instead.","url":"/attributes/http.request_content_length","meta":"deprecated · int · http"},{"type":"attribute","id":"http.request_content_length_uncompressed","text":"Deprecated, use http.request.body.size instead.","url":"/attributes/http.request_content_length_uncompressed","meta":"deprecated · int · http"},{"type":"attribute","id":"http.request.body.size","text":"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-L…","url":"/attributes/http.request.body.size","meta":"development · int · http"},{"type":"attribute","id":"http.request.header","text":"HTTP request headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values.","url":"/attributes/http.request.header","meta":"stable · template[string[]] · http"},{"type":"attribute","id":"http.request.method","text":"HTTP request method.","url":"/attributes/http.request.method","meta":"stable · enum · http"},{"type":"attribute","id":"http.request.method_original","text":"Original HTTP method sent by the client in the request line.","url":"/attributes/http.request.method_original","meta":"stable · string · http"},{"type":"attribute","id":"http.request.resend_count","text":"The ordinal number of request resending attempt (for any reason, including redirects).","url":"/attributes/http.request.resend_count","meta":"stable · int · http"},{"type":"attribute","id":"http.request.size","text":"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…","url":"/attributes/http.request.size","meta":"development · int · http"},{"type":"attribute","id":"http.response_content_length","text":"Deprecated, use http.response.header.content-length instead.","url":"/attributes/http.response_content_length","meta":"deprecated · int · http"},{"type":"attribute","id":"http.response_content_length_uncompressed","text":"Deprecated, use http.response.body.size instead.","url":"/attributes/http.response_content_length_uncompressed","meta":"deprecated · int · http"},{"type":"attribute","id":"http.response.body.size","text":"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-…","url":"/attributes/http.response.body.size","meta":"development · int · http"},{"type":"attribute","id":"http.response.header","text":"HTTP response headers, <key> being the normalized HTTP Header name (lowercase), the value being the header values.","url":"/attributes/http.response.header","meta":"stable · template[string[]] · http"},{"type":"attribute","id":"http.response.size","text":"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…","url":"/attributes/http.response.size","meta":"development · int · http"},{"type":"attribute","id":"http.response.status_code","text":"HTTP response status code.","url":"/attributes/http.response.status_code","meta":"stable · int · http"},{"type":"attribute","id":"http.route","text":"The matched route template for the request. This MUST be low-cardinality and include all static path segments, with dynamic path segments represented with plac…","url":"/attributes/http.route","meta":"stable · string · http"},{"type":"attribute","id":"http.scheme","text":"Deprecated, use url.scheme instead.","url":"/attributes/http.scheme","meta":"deprecated · string · http"},{"type":"attribute","id":"http.server_name","text":"Deprecated, use server.address instead.","url":"/attributes/http.server_name","meta":"deprecated · string · http"},{"type":"attribute","id":"http.status_code","text":"Deprecated, use http.response.status_code instead.","url":"/attributes/http.status_code","meta":"deprecated · int · http"},{"type":"attribute","id":"http.target","text":"Deprecated, use url.path and url.query instead.","url":"/attributes/http.target","meta":"deprecated · string · http"},{"type":"attribute","id":"http.url","text":"Deprecated, use url.full instead.","url":"/attributes/http.url","meta":"deprecated · string · http"},{"type":"attribute","id":"http.user_agent","text":"Deprecated, use user_agent.original instead.","url":"/attributes/http.user_agent","meta":"deprecated · string · http"},{"type":"attribute","id":"hw.battery.capacity","text":"Design capacity in Watts-hours or Ampere-hours","url":"/attributes/hw.battery.capacity","meta":"development · string · hw"},{"type":"attribute","id":"hw.battery.chemistry","text":"Battery chemistry, e.g. Lithium-Ion, Nickel-Cadmium, etc.","url":"/attributes/hw.battery.chemistry","meta":"development · string · hw"},{"type":"attribute","id":"hw.battery.state","text":"The current state of the battery","url":"/attributes/hw.battery.state","meta":"development · enum · hw"},{"type":"attribute","id":"hw.bios_version","text":"BIOS version of the hardware component","url":"/attributes/hw.bios_version","meta":"development · string · hw"},{"type":"attribute","id":"hw.driver_version","text":"Driver version for the hardware component","url":"/attributes/hw.driver_version","meta":"development · string · hw"},{"type":"attribute","id":"hw.enclosure.type","text":"Type of the enclosure (useful for modular systems)","url":"/attributes/hw.enclosure.type","meta":"development · string · hw"},{"type":"attribute","id":"hw.firmware_version","text":"Firmware version of the hardware component","url":"/attributes/hw.firmware_version","meta":"development · string · hw"},{"type":"attribute","id":"hw.gpu.task","text":"Type of task the GPU is performing","url":"/attributes/hw.gpu.task","meta":"development · enum · hw"},{"type":"attribute","id":"hw.id","text":"An identifier for the hardware component, unique within the monitored host","url":"/attributes/hw.id","meta":"development · string · hw"},{"type":"attribute","id":"hw.limit_type","text":"Type of limit for hardware components","url":"/attributes/hw.limit_type","meta":"development · enum · hw"},{"type":"attribute","id":"hw.logical_disk.raid_level","text":"RAID Level of the logical disk","url":"/attributes/hw.logical_disk.raid_level","meta":"development · string · hw"},{"type":"attribute","id":"hw.logical_disk.state","text":"State of the logical disk space usage","url":"/attributes/hw.logical_disk.state","meta":"development · enum · hw"},{"type":"attribute","id":"hw.memory.type","text":"Type of the memory module","url":"/attributes/hw.memory.type","meta":"development · string · hw"},{"type":"attribute","id":"hw.model","text":"Descriptive model name of the hardware component","url":"/attributes/hw.model","meta":"development · string · hw"},{"type":"attribute","id":"hw.name","text":"An easily-recognizable name for the hardware component","url":"/attributes/hw.name","meta":"development · string · hw"},{"type":"attribute","id":"hw.network.logical_addresses","text":"Logical addresses of the adapter (e.g. IP address, or WWPN)","url":"/attributes/hw.network.logical_addresses","meta":"development · string[] · hw"},{"type":"attribute","id":"hw.network.physical_address","text":"Physical address of the adapter (e.g. MAC address, or WWNN)","url":"/attributes/hw.network.physical_address","meta":"development · string · hw"},{"type":"attribute","id":"hw.parent","text":"Unique identifier of the parent component (typically the hw.id attribute of the enclosure, or disk controller)","url":"/attributes/hw.parent","meta":"development · string · hw"},{"type":"attribute","id":"hw.physical_disk.smart_attribute","text":"S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) attribute of the physical disk","url":"/attributes/hw.physical_disk.smart_attribute","meta":"development · string · hw"},{"type":"attribute","id":"hw.physical_disk.state","text":"State of the physical disk endurance utilization","url":"/attributes/hw.physical_disk.state","meta":"development · enum · hw"},{"type":"attribute","id":"hw.physical_disk.type","text":"Type of the physical disk","url":"/attributes/hw.physical_disk.type","meta":"development · string · hw"},{"type":"attribute","id":"hw.sensor_location","text":"Location of the sensor","url":"/attributes/hw.sensor_location","meta":"development · string · hw"},{"type":"attribute","id":"hw.serial_number","text":"Serial number of the hardware component","url":"/attributes/hw.serial_number","meta":"development · string · hw"},{"type":"attribute","id":"hw.state","text":"The current state of the component","url":"/attributes/hw.state","meta":"development · enum · hw"},{"type":"attribute","id":"hw.tape_drive.operation_type","text":"Type of tape drive operation","url":"/attributes/hw.tape_drive.operation_type","meta":"development · enum · hw"},{"type":"attribute","id":"hw.type","text":"Type of the component","url":"/attributes/hw.type","meta":"development · enum · hw"},{"type":"attribute","id":"hw.vendor","text":"Vendor name of the hardware component","url":"/attributes/hw.vendor","meta":"development · string · hw"},{"type":"attribute","id":"ios.app.state","text":"This attribute represents the state of the application.","url":"/attributes/ios.app.state","meta":"development · enum · ios"},{"type":"attribute","id":"ios.state","text":"Deprecated. Use the ios.app.state attribute.","url":"/attributes/ios.state","meta":"deprecated · enum · ios"},{"type":"attribute","id":"jsonrpc.protocol.version","text":"Protocol version, as specified in the jsonrpc property of the request and its corresponding response.","url":"/attributes/jsonrpc.protocol.version","meta":"development · string · jsonrpc"},{"type":"attribute","id":"jsonrpc.request.id","text":"A string representation of the id property of the request and its corresponding response.","url":"/attributes/jsonrpc.request.id","meta":"development · string · jsonrpc"},{"type":"attribute","id":"jvm.buffer.pool.name","text":"Name of the buffer pool.","url":"/attributes/jvm.buffer.pool.name","meta":"development · string · jvm"},{"type":"attribute","id":"jvm.gc.action","text":"Name of the garbage collector action.","url":"/attributes/jvm.gc.action","meta":"stable · string · jvm"},{"type":"attribute","id":"jvm.gc.cause","text":"Name of the garbage collector cause.","url":"/attributes/jvm.gc.cause","meta":"development · string · jvm"},{"type":"attribute","id":"jvm.gc.name","text":"Name of the garbage collector.","url":"/attributes/jvm.gc.name","meta":"stable · string · jvm"},{"type":"attribute","id":"jvm.memory.pool.name","text":"Name of the memory pool.","url":"/attributes/jvm.memory.pool.name","meta":"stable · string · jvm"},{"type":"attribute","id":"jvm.memory.type","text":"The type of memory.","url":"/attributes/jvm.memory.type","meta":"stable · enum · jvm"},{"type":"attribute","id":"jvm.thread.daemon","text":"Whether the thread is daemon or not.","url":"/attributes/jvm.thread.daemon","meta":"stable · boolean · jvm"},{"type":"attribute","id":"jvm.thread.state","text":"State of the thread.","url":"/attributes/jvm.thread.state","meta":"stable · enum · jvm"},{"type":"attribute","id":"k8s.cluster.name","text":"The name of the cluster.","url":"/attributes/k8s.cluster.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.cluster.uid","text":"A pseudo-ID for the cluster, set to the UID of the kube-system namespace.","url":"/attributes/k8s.cluster.uid","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.container.ephemeral_storage.fs_type","text":"The type of file system component for ephemeral storage.","url":"/attributes/k8s.container.ephemeral_storage.fs_type","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.container.name","text":"The name of the Container from Pod specification, must be unique within a Pod. Container runtime usually uses different globally unique name (container.name).","url":"/attributes/k8s.container.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.container.restart_count","text":"Number of times the container was restarted. This attribute can be used to identify a particular container (running or stopped) within a container spec.","url":"/attributes/k8s.container.restart_count","meta":"stable · int · k8s"},{"type":"attribute","id":"k8s.container.status.last_terminated_reason","text":"Last terminated reason of the Container.","url":"/attributes/k8s.container.status.last_terminated_reason","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.container.status.reason","text":"The reason for the container state. Corresponds to the reason field of the: K8s ContainerStateWaiting or K8s ContainerStateTerminated","url":"/attributes/k8s.container.status.reason","meta":"experimental · enum · k8s"},{"type":"attribute","id":"k8s.container.status.state","text":"The state of the container. K8s ContainerState","url":"/attributes/k8s.container.status.state","meta":"experimental · enum · k8s"},{"type":"attribute","id":"k8s.cronjob.annotation","text":"The cronjob annotation placed on the CronJob, the <key> being the annotation name, the value being the annotation value.","url":"/attributes/k8s.cronjob.annotation","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.cronjob.label","text":"The label placed on the CronJob, the <key> being the label name, the value being the label value.","url":"/attributes/k8s.cronjob.label","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.cronjob.name","text":"The name of the CronJob.","url":"/attributes/k8s.cronjob.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.cronjob.uid","text":"The UID of the CronJob.","url":"/attributes/k8s.cronjob.uid","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.daemonset.annotation","text":"The annotation placed on the DaemonSet, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.daemonset.annotation","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.daemonset.label","text":"The label placed on the DaemonSet, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.daemonset.label","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.daemonset.name","text":"The name of the DaemonSet.","url":"/attributes/k8s.daemonset.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.daemonset.uid","text":"The UID of the DaemonSet.","url":"/attributes/k8s.daemonset.uid","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.deployment.annotation","text":"The annotation placed on the Deployment, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.deployment.annotation","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.deployment.label","text":"The label placed on the Deployment, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.deployment.label","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.deployment.name","text":"The name of the Deployment.","url":"/attributes/k8s.deployment.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.deployment.uid","text":"The UID of the Deployment.","url":"/attributes/k8s.deployment.uid","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.hpa.metric.type","text":"The type of metric source for the horizontal pod autoscaler.","url":"/attributes/k8s.hpa.metric.type","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.hpa.name","text":"The name of the horizontal pod autoscaler.","url":"/attributes/k8s.hpa.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.hpa.scaletargetref.api_version","text":"The API version of the target resource to scale for the HorizontalPodAutoscaler.","url":"/attributes/k8s.hpa.scaletargetref.api_version","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.hpa.scaletargetref.kind","text":"The kind of the target resource to scale for the HorizontalPodAutoscaler.","url":"/attributes/k8s.hpa.scaletargetref.kind","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.hpa.scaletargetref.name","text":"The name of the target resource to scale for the HorizontalPodAutoscaler.","url":"/attributes/k8s.hpa.scaletargetref.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.hpa.uid","text":"The UID of the horizontal pod autoscaler.","url":"/attributes/k8s.hpa.uid","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.hugepage.size","text":"The size (identifier) of the K8s huge page.","url":"/attributes/k8s.hugepage.size","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.job.annotation","text":"The annotation placed on the Job, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.job.annotation","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.job.label","text":"The label placed on the Job, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.job.label","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.job.name","text":"The name of the Job.","url":"/attributes/k8s.job.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.job.uid","text":"The UID of the Job.","url":"/attributes/k8s.job.uid","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.namespace.annotation","text":"The annotation placed on the Namespace, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.namespace.annotation","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.namespace.label","text":"The label placed on the Namespace, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.namespace.label","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.namespace.name","text":"The name of the namespace that the pod is running in.","url":"/attributes/k8s.namespace.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.namespace.phase","text":"The phase of the K8s namespace.","url":"/attributes/k8s.namespace.phase","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.node.annotation","text":"The annotation placed on the Node, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.node.annotation","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.node.condition.status","text":"The status of the condition, one of True, False, Unknown.","url":"/attributes/k8s.node.condition.status","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.node.condition.type","text":"The condition type of a K8s Node.","url":"/attributes/k8s.node.condition.type","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.node.label","text":"The label placed on the Node, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.node.label","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.node.name","text":"The name of the Node.","url":"/attributes/k8s.node.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.node.system_container.name","text":"The name of the system container running on the K8s Node.","url":"/attributes/k8s.node.system_container.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.node.uid","text":"The UID of the Node.","url":"/attributes/k8s.node.uid","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.persistentvolume.annotation","text":"The annotation placed on the PersistentVolume, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.persistentvolume.annotation","meta":"development · template[string] · k8s"},{"type":"attribute","id":"k8s.persistentvolume.label","text":"The label placed on the PersistentVolume, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.persistentvolume.label","meta":"development · template[string] · k8s"},{"type":"attribute","id":"k8s.persistentvolume.name","text":"The name of the PersistentVolume.","url":"/attributes/k8s.persistentvolume.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.persistentvolume.reclaim_policy","text":"The reclaim policy of the PersistentVolume.","url":"/attributes/k8s.persistentvolume.reclaim_policy","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.persistentvolume.status.phase","text":"The phase of the PersistentVolume.","url":"/attributes/k8s.persistentvolume.status.phase","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.persistentvolume.uid","text":"The UID of the PersistentVolume.","url":"/attributes/k8s.persistentvolume.uid","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.persistentvolumeclaim.annotation","text":"The annotation placed on the PersistentVolumeClaim, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.persistentvolumeclaim.annotation","meta":"development · template[string] · k8s"},{"type":"attribute","id":"k8s.persistentvolumeclaim.label","text":"The label placed on the PersistentVolumeClaim, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.persistentvolumeclaim.label","meta":"development · template[string] · k8s"},{"type":"attribute","id":"k8s.persistentvolumeclaim.name","text":"The name of the PersistentVolumeClaim.","url":"/attributes/k8s.persistentvolumeclaim.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.persistentvolumeclaim.status.phase","text":"The phase of the PersistentVolumeClaim.","url":"/attributes/k8s.persistentvolumeclaim.status.phase","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.persistentvolumeclaim.uid","text":"The UID of the PersistentVolumeClaim.","url":"/attributes/k8s.persistentvolumeclaim.uid","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.pod.annotation","text":"The annotation placed on the Pod, the <key> being the annotation name, the value being the annotation value.","url":"/attributes/k8s.pod.annotation","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.pod.hostname","text":"Specifies the hostname of the Pod.","url":"/attributes/k8s.pod.hostname","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.pod.ip","text":"IP address allocated to the Pod.","url":"/attributes/k8s.pod.ip","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.pod.label","text":"The label placed on the Pod, the <key> being the label name, the value being the label value.","url":"/attributes/k8s.pod.label","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.pod.labels","text":"Deprecated, use k8s.pod.label instead.","url":"/attributes/k8s.pod.labels","meta":"deprecated · template[string] · k8s"},{"type":"attribute","id":"k8s.pod.name","text":"The name of the Pod.","url":"/attributes/k8s.pod.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.pod.start_time","text":"The start timestamp of the Pod.","url":"/attributes/k8s.pod.start_time","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.pod.status.phase","text":"The phase for the pod. Corresponds to the phase field of the: K8s PodStatus","url":"/attributes/k8s.pod.status.phase","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.pod.status.reason","text":"The reason for the pod state. Corresponds to the reason field of the: K8s PodStatus","url":"/attributes/k8s.pod.status.reason","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.pod.uid","text":"The UID of the Pod.","url":"/attributes/k8s.pod.uid","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.replicaset.annotation","text":"The annotation placed on the ReplicaSet, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.replicaset.annotation","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.replicaset.label","text":"The label placed on the ReplicaSet, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.replicaset.label","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.replicaset.name","text":"The name of the ReplicaSet.","url":"/attributes/k8s.replicaset.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.replicaset.uid","text":"The UID of the ReplicaSet.","url":"/attributes/k8s.replicaset.uid","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.replicationcontroller.name","text":"The name of the replication controller.","url":"/attributes/k8s.replicationcontroller.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.replicationcontroller.uid","text":"The UID of the replication controller.","url":"/attributes/k8s.replicationcontroller.uid","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.resourcequota.name","text":"The name of the resource quota.","url":"/attributes/k8s.resourcequota.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.resourcequota.resource_name","text":"The name of the K8s resource a resource quota defines.","url":"/attributes/k8s.resourcequota.resource_name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.resourcequota.uid","text":"The UID of the resource quota.","url":"/attributes/k8s.resourcequota.uid","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.service.annotation","text":"The annotation placed on the Service, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.service.annotation","meta":"development · template[string] · k8s"},{"type":"attribute","id":"k8s.service.endpoint.address_type","text":"The address type of the service endpoint.","url":"/attributes/k8s.service.endpoint.address_type","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.service.endpoint.condition","text":"The condition of the service endpoint.","url":"/attributes/k8s.service.endpoint.condition","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.service.endpoint.zone","text":"The zone of the service endpoint.","url":"/attributes/k8s.service.endpoint.zone","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.service.label","text":"The label placed on the Service, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.service.label","meta":"development · template[string] · k8s"},{"type":"attribute","id":"k8s.service.name","text":"The name of the Service.","url":"/attributes/k8s.service.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.service.publish_not_ready_addresses","text":"Whether the Service publishes not-ready endpoints.","url":"/attributes/k8s.service.publish_not_ready_addresses","meta":"development · boolean · k8s"},{"type":"attribute","id":"k8s.service.selector","text":"The selector key-value pair placed on the Service, the <key> being the selector key, the value being the selector value.","url":"/attributes/k8s.service.selector","meta":"development · template[string] · k8s"},{"type":"attribute","id":"k8s.service.traffic_distribution","text":"The traffic distribution policy for the Service.","url":"/attributes/k8s.service.traffic_distribution","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.service.type","text":"The type of the Kubernetes Service.","url":"/attributes/k8s.service.type","meta":"development · enum · k8s"},{"type":"attribute","id":"k8s.service.uid","text":"The UID of the Service.","url":"/attributes/k8s.service.uid","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.statefulset.annotation","text":"The annotation placed on the StatefulSet, the <key> being the annotation name, the value being the annotation value, even if the value is empty.","url":"/attributes/k8s.statefulset.annotation","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.statefulset.label","text":"The label placed on the StatefulSet, the <key> being the label name, the value being the label value, even if the value is empty.","url":"/attributes/k8s.statefulset.label","meta":"stable · template[string] · k8s"},{"type":"attribute","id":"k8s.statefulset.name","text":"The name of the StatefulSet.","url":"/attributes/k8s.statefulset.name","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.statefulset.uid","text":"The UID of the StatefulSet.","url":"/attributes/k8s.statefulset.uid","meta":"stable · string · k8s"},{"type":"attribute","id":"k8s.storageclass.name","text":"The name of K8s StorageClass object.","url":"/attributes/k8s.storageclass.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.volume.name","text":"The name of the K8s volume.","url":"/attributes/k8s.volume.name","meta":"development · string · k8s"},{"type":"attribute","id":"k8s.volume.type","text":"The type of the K8s volume.","url":"/attributes/k8s.volume.type","meta":"development · enum · k8s"},{"type":"attribute","id":"linux.memory.slab.state","text":"The Linux Slab memory state","url":"/attributes/linux.memory.slab.state","meta":"deprecated · enum · linux"},{"type":"attribute","id":"log.file.name","text":"The basename of the file.","url":"/attributes/log.file.name","meta":"development · string · log"},{"type":"attribute","id":"log.file.name_resolved","text":"The basename of the file, with symlinks resolved.","url":"/attributes/log.file.name_resolved","meta":"development · string · log"},{"type":"attribute","id":"log.file.path","text":"The full path to the file.","url":"/attributes/log.file.path","meta":"development · string · log"},{"type":"attribute","id":"log.file.path_resolved","text":"The full path to the file, with symlinks resolved.","url":"/attributes/log.file.path_resolved","meta":"development · string · log"},{"type":"attribute","id":"log.iostream","text":"The stream associated with the log. See below for a list of well-known values.","url":"/attributes/log.iostream","meta":"development · enum · log"},{"type":"attribute","id":"log.record.original","text":"The complete original Log Record.","url":"/attributes/log.record.original","meta":"development · string · log"},{"type":"attribute","id":"log.record.uid","text":"A unique identifier for the Log Record.","url":"/attributes/log.record.uid","meta":"development · string · log"},{"type":"attribute","id":"mainframe.lpar.name","text":"Name of the logical partition that hosts a systems with a mainframe operating system.","url":"/attributes/mainframe.lpar.name","meta":"development · string · mainframe"},{"type":"attribute","id":"message.compressed_size","text":"Deprecated, no replacement at this time.","url":"/attributes/message.compressed_size","meta":"deprecated · int · message"},{"type":"attribute","id":"message.id","text":"Deprecated, no replacement at this time.","url":"/attributes/message.id","meta":"deprecated · int · message"},{"type":"attribute","id":"message.type","text":"Deprecated, no replacement at this time.","url":"/attributes/message.type","meta":"deprecated · enum · message"},{"type":"attribute","id":"message.uncompressed_size","text":"Deprecated, no replacement at this time.","url":"/attributes/message.uncompressed_size","meta":"deprecated · int · message"},{"type":"attribute","id":"messaging.batch.message_count","text":"The number of messages sent, received, or processed in the scope of the batching operation.","url":"/attributes/messaging.batch.message_count","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.client_id","text":"Deprecated, use messaging.client.id instead.","url":"/attributes/messaging.client_id","meta":"deprecated · string · messaging"},{"type":"attribute","id":"messaging.client.id","text":"A unique identifier for the client that consumes or produces a message.","url":"/attributes/messaging.client.id","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.consumer.group.name","text":"The name of the consumer group with which a consumer is associated.","url":"/attributes/messaging.consumer.group.name","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.destination_publish.anonymous","text":"Deprecated, no replacement at this time.","url":"/attributes/messaging.destination_publish.anonymous","meta":"deprecated · boolean · messaging"},{"type":"attribute","id":"messaging.destination_publish.name","text":"Deprecated, no replacement at this time.","url":"/attributes/messaging.destination_publish.name","meta":"deprecated · string · messaging"},{"type":"attribute","id":"messaging.destination.anonymous","text":"A boolean that is true if the message destination is anonymous (could be unnamed or have auto-generated name).","url":"/attributes/messaging.destination.anonymous","meta":"development · boolean · messaging"},{"type":"attribute","id":"messaging.destination.name","text":"The message destination name","url":"/attributes/messaging.destination.name","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.destination.partition.id","text":"The identifier of the partition messages are sent to or received from, unique within the messaging.destination.name.","url":"/attributes/messaging.destination.partition.id","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.destination.subscription.name","text":"The name of the destination subscription from which a message is consumed.","url":"/attributes/messaging.destination.subscription.name","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.destination.template","text":"Low cardinality representation of the messaging destination name","url":"/attributes/messaging.destination.template","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.destination.temporary","text":"A boolean that is true if the message destination is temporary and might not exist anymore after messages are processed.","url":"/attributes/messaging.destination.temporary","meta":"development · boolean · messaging"},{"type":"attribute","id":"messaging.eventhubs.consumer.group","text":"Deprecated, use messaging.consumer.group.name instead.","url":"/attributes/messaging.eventhubs.consumer.group","meta":"deprecated · string · messaging"},{"type":"attribute","id":"messaging.eventhubs.message.enqueued_time","text":"The UTC epoch seconds at which the message has been accepted and stored in the entity.","url":"/attributes/messaging.eventhubs.message.enqueued_time","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.gcp_pubsub.message.ack_deadline","text":"The ack deadline in seconds set for the modify ack deadline request.","url":"/attributes/messaging.gcp_pubsub.message.ack_deadline","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.gcp_pubsub.message.ack_id","text":"The ack ID for a given message.","url":"/attributes/messaging.gcp_pubsub.message.ack_id","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.gcp_pubsub.message.delivery_attempt","text":"The delivery attempt for a given message.","url":"/attributes/messaging.gcp_pubsub.message.delivery_attempt","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.gcp_pubsub.message.ordering_key","text":"The ordering key for a given message. If the attribute is not present, the message does not have an ordering key.","url":"/attributes/messaging.gcp_pubsub.message.ordering_key","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.kafka.cluster.id","text":"The Kafka cluster ID, obtained from the broker metadata exposed through the Kafka client (or AdminClient) API.","url":"/attributes/messaging.kafka.cluster.id","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.kafka.consumer.group","text":"Deprecated, use messaging.consumer.group.name instead.","url":"/attributes/messaging.kafka.consumer.group","meta":"deprecated · string · messaging"},{"type":"attribute","id":"messaging.kafka.destination.partition","text":"Deprecated, use messaging.destination.partition.id instead.","url":"/attributes/messaging.kafka.destination.partition","meta":"deprecated · int · messaging"},{"type":"attribute","id":"messaging.kafka.message.key","text":"Message keys in Kafka are used for grouping alike messages to ensure they're processed on the same partition. They differ from messaging.message.id in that the…","url":"/attributes/messaging.kafka.message.key","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.kafka.message.offset","text":"Deprecated, use messaging.kafka.offset instead.","url":"/attributes/messaging.kafka.message.offset","meta":"deprecated · int · messaging"},{"type":"attribute","id":"messaging.kafka.message.tombstone","text":"A boolean that is true if the message is a tombstone.","url":"/attributes/messaging.kafka.message.tombstone","meta":"development · boolean · messaging"},{"type":"attribute","id":"messaging.kafka.offset","text":"The offset of a record in the corresponding Kafka partition.","url":"/attributes/messaging.kafka.offset","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.message.body.size","text":"The size of the message body in bytes.","url":"/attributes/messaging.message.body.size","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.message.conversation_id","text":"The conversation ID identifying the conversation to which the message belongs, represented as a string. Sometimes called \"Correlation ID\".","url":"/attributes/messaging.message.conversation_id","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.message.envelope.size","text":"The size of the message body and metadata in bytes.","url":"/attributes/messaging.message.envelope.size","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.message.id","text":"A value used by the messaging system as an identifier for the message, represented as a string.","url":"/attributes/messaging.message.id","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.operation","text":"Deprecated, use messaging.operation.type instead.","url":"/attributes/messaging.operation","meta":"deprecated · string · messaging"},{"type":"attribute","id":"messaging.operation.name","text":"The system-specific name of the messaging operation.","url":"/attributes/messaging.operation.name","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.operation.type","text":"A string identifying the type of the messaging operation.","url":"/attributes/messaging.operation.type","meta":"development · enum · messaging"},{"type":"attribute","id":"messaging.rabbitmq.destination.routing_key","text":"RabbitMQ message routing key.","url":"/attributes/messaging.rabbitmq.destination.routing_key","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.rabbitmq.message.delivery_tag","text":"RabbitMQ message delivery tag","url":"/attributes/messaging.rabbitmq.message.delivery_tag","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.rocketmq.client_group","text":"Deprecated, use messaging.consumer.group.name instead.","url":"/attributes/messaging.rocketmq.client_group","meta":"deprecated · string · messaging"},{"type":"attribute","id":"messaging.rocketmq.consumption_model","text":"Model of message consumption. This only applies to consumer spans.","url":"/attributes/messaging.rocketmq.consumption_model","meta":"development · enum · messaging"},{"type":"attribute","id":"messaging.rocketmq.message.delay_time_level","text":"The delay time level for delay message, which determines the message delay time.","url":"/attributes/messaging.rocketmq.message.delay_time_level","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.rocketmq.message.delivery_timestamp","text":"The timestamp in milliseconds that the delay message is expected to be delivered to consumer.","url":"/attributes/messaging.rocketmq.message.delivery_timestamp","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.rocketmq.message.group","text":"It is essential for FIFO message. Messages that belong to the same message group are always processed one by one within the same consumer group.","url":"/attributes/messaging.rocketmq.message.group","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.rocketmq.message.keys","text":"Key(s) of message, another way to mark message besides message ID.","url":"/attributes/messaging.rocketmq.message.keys","meta":"development · string[] · messaging"},{"type":"attribute","id":"messaging.rocketmq.message.tag","text":"The secondary classifier of message besides topic.","url":"/attributes/messaging.rocketmq.message.tag","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.rocketmq.message.type","text":"Type of message.","url":"/attributes/messaging.rocketmq.message.type","meta":"development · enum · messaging"},{"type":"attribute","id":"messaging.rocketmq.namespace","text":"Namespace of RocketMQ resources, resources in different namespaces are individual.","url":"/attributes/messaging.rocketmq.namespace","meta":"development · string · messaging"},{"type":"attribute","id":"messaging.servicebus.destination.subscription_name","text":"Deprecated, use messaging.destination.subscription.name instead.","url":"/attributes/messaging.servicebus.destination.subscription_name","meta":"deprecated · string · messaging"},{"type":"attribute","id":"messaging.servicebus.disposition_status","text":"Describes the settlement type.","url":"/attributes/messaging.servicebus.disposition_status","meta":"development · enum · messaging"},{"type":"attribute","id":"messaging.servicebus.message.delivery_count","text":"Number of deliveries that have been attempted for this message.","url":"/attributes/messaging.servicebus.message.delivery_count","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.servicebus.message.enqueued_time","text":"The UTC epoch seconds at which the message has been accepted and stored in the entity.","url":"/attributes/messaging.servicebus.message.enqueued_time","meta":"development · int · messaging"},{"type":"attribute","id":"messaging.system","text":"The messaging system as identified by the client instrumentation.","url":"/attributes/messaging.system","meta":"development · enum · messaging"},{"type":"attribute","id":"net.host.ip","text":"Deprecated, use network.local.address.","url":"/attributes/net.host.ip","meta":"deprecated · string · net"},{"type":"attribute","id":"net.host.name","text":"Deprecated, use server.address.","url":"/attributes/net.host.name","meta":"deprecated · string · net"},{"type":"attribute","id":"net.host.port","text":"Deprecated, use server.port.","url":"/attributes/net.host.port","meta":"deprecated · int · net"},{"type":"attribute","id":"net.peer.ip","text":"Deprecated, use network.peer.address.","url":"/attributes/net.peer.ip","meta":"deprecated · string · net"},{"type":"attribute","id":"net.peer.name","text":"Deprecated, use server.address on client spans and client.address on server spans.","url":"/attributes/net.peer.name","meta":"deprecated · string · net"},{"type":"attribute","id":"net.peer.port","text":"Deprecated, use server.port on client spans and client.port on server spans.","url":"/attributes/net.peer.port","meta":"deprecated · int · net"},{"type":"attribute","id":"net.protocol.name","text":"Deprecated, use network.protocol.name.","url":"/attributes/net.protocol.name","meta":"deprecated · string · net"},{"type":"attribute","id":"net.protocol.version","text":"Deprecated, use network.protocol.version.","url":"/attributes/net.protocol.version","meta":"deprecated · string · net"},{"type":"attribute","id":"net.sock.family","text":"Deprecated, use network.transport and network.type.","url":"/attributes/net.sock.family","meta":"deprecated · enum · net"},{"type":"attribute","id":"net.sock.host.addr","text":"Deprecated, use network.local.address.","url":"/attributes/net.sock.host.addr","meta":"deprecated · string · net"},{"type":"attribute","id":"net.sock.host.port","text":"Deprecated, use network.local.port.","url":"/attributes/net.sock.host.port","meta":"deprecated · int · net"},{"type":"attribute","id":"net.sock.peer.addr","text":"Deprecated, use network.peer.address.","url":"/attributes/net.sock.peer.addr","meta":"deprecated · string · net"},{"type":"attribute","id":"net.sock.peer.name","text":"Deprecated, no replacement at this time.","url":"/attributes/net.sock.peer.name","meta":"deprecated · string · net"},{"type":"attribute","id":"net.sock.peer.port","text":"Deprecated, use network.peer.port.","url":"/attributes/net.sock.peer.port","meta":"deprecated · int · net"},{"type":"attribute","id":"net.transport","text":"Deprecated, use network.transport.","url":"/attributes/net.transport","meta":"deprecated · enum · net"},{"type":"attribute","id":"network.carrier.icc","text":"The ISO 3166-1 alpha-2 2-character country code associated with the mobile carrier network.","url":"/attributes/network.carrier.icc","meta":"development · string · network"},{"type":"attribute","id":"network.carrier.mcc","text":"The mobile carrier country code.","url":"/attributes/network.carrier.mcc","meta":"development · string · network"},{"type":"attribute","id":"network.carrier.mnc","text":"The mobile carrier network code.","url":"/attributes/network.carrier.mnc","meta":"development · string · network"},{"type":"attribute","id":"network.carrier.name","text":"The name of the mobile carrier.","url":"/attributes/network.carrier.name","meta":"development · string · network"},{"type":"attribute","id":"network.connection.state","text":"The state of network connection","url":"/attributes/network.connection.state","meta":"development · enum · network"},{"type":"attribute","id":"network.connection.subtype","text":"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 …","url":"/attributes/network.connection.subtype","meta":"development · enum · network"},{"type":"attribute","id":"network.connection.type","text":"The internet connection type.","url":"/attributes/network.connection.type","meta":"development · enum · network"},{"type":"attribute","id":"network.interface.name","text":"The network interface name.","url":"/attributes/network.interface.name","meta":"release_candidate · string · network"},{"type":"attribute","id":"network.io.direction","text":"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 dir…","url":"/attributes/network.io.direction","meta":"release_candidate · enum · network"},{"type":"attribute","id":"network.local.address","text":"Local address of the network connection - IP address or UNIX domain socket name.","url":"/attributes/network.local.address","meta":"stable · string · network"},{"type":"attribute","id":"network.local.port","text":"Local port number of the network connection.","url":"/attributes/network.local.port","meta":"stable · int · network"},{"type":"attribute","id":"network.peer.address","text":"Peer address of the network connection - IP address or UNIX domain socket name.","url":"/attributes/network.peer.address","meta":"stable · string · network"},{"type":"attribute","id":"network.peer.port","text":"Peer port number of the network connection.","url":"/attributes/network.peer.port","meta":"stable · int · network"},{"type":"attribute","id":"network.protocol.name","text":"OSI application layer or non-OSI equivalent.","url":"/attributes/network.protocol.name","meta":"stable · string · network"},{"type":"attribute","id":"network.protocol.version","text":"The actual version of the protocol used for network communication.","url":"/attributes/network.protocol.version","meta":"stable · string · network"},{"type":"attribute","id":"network.transport","text":"OSI transport layer or inter-process communication method.","url":"/attributes/network.transport","meta":"stable · enum · network"},{"type":"attribute","id":"network.type","text":"OSI network layer or non-OSI equivalent.","url":"/attributes/network.type","meta":"stable · enum · network"},{"type":"attribute","id":"nfs.operation.name","text":"NFSv4+ operation name.","url":"/attributes/nfs.operation.name","meta":"development · string · nfs"},{"type":"attribute","id":"nfs.server.repcache.status","text":"Linux: one of \"hit\" (NFSD_STATS_RC_HITS), \"miss\" (NFSD_STATS_RC_MISSES), or \"nocache\" (NFSD_STATS_RC_NOCACHE -- uncacheable)","url":"/attributes/nfs.server.repcache.status","meta":"development · string · nfs"},{"type":"attribute","id":"nodejs.eventloop.state","text":"The state of event loop time.","url":"/attributes/nodejs.eventloop.state","meta":"development · enum · nodejs"},{"type":"attribute","id":"oci.manifest.digest","text":"The digest of the OCI image manifest. For container images specifically is the digest by which the container image is known.","url":"/attributes/oci.manifest.digest","meta":"development · string · oci"},{"type":"attribute","id":"onc_rpc.procedure.name","text":"ONC/Sun RPC procedure name.","url":"/attributes/onc_rpc.procedure.name","meta":"development · string · onc_rpc"},{"type":"attribute","id":"onc_rpc.procedure.number","text":"ONC/Sun RPC procedure number.","url":"/attributes/onc_rpc.procedure.number","meta":"development · int · onc_rpc"},{"type":"attribute","id":"onc_rpc.program.name","text":"ONC/Sun RPC program name.","url":"/attributes/onc_rpc.program.name","meta":"development · string · onc_rpc"},{"type":"attribute","id":"onc_rpc.version","text":"ONC/Sun RPC program version.","url":"/attributes/onc_rpc.version","meta":"development · int · onc_rpc"},{"type":"attribute","id":"openshift.clusterquota.name","text":"The name of the cluster quota.","url":"/attributes/openshift.clusterquota.name","meta":"development · string · openshift"},{"type":"attribute","id":"openshift.clusterquota.uid","text":"The UID of the cluster quota.","url":"/attributes/openshift.clusterquota.uid","meta":"development · string · openshift"},{"type":"attribute","id":"opentracing.ref_type","text":"Parent-child Reference type","url":"/attributes/opentracing.ref_type","meta":"development · enum · opentracing"},{"type":"attribute","id":"oracle_cloud.realm","text":"The OCI realm identifier that indicates the isolated partition in which the tenancy and its resources reside.","url":"/attributes/oracle_cloud.realm","meta":"development · string · oracle_cloud"},{"type":"attribute","id":"oracle.db.domain","text":"The database domain associated with the connection.","url":"/attributes/oracle.db.domain","meta":"release_candidate · string · oracle"},{"type":"attribute","id":"oracle.db.instance.name","text":"The instance name associated with the connection in an Oracle Real Application Clusters environment.","url":"/attributes/oracle.db.instance.name","meta":"release_candidate · string · oracle"},{"type":"attribute","id":"oracle.db.name","text":"The database name associated with the connection.","url":"/attributes/oracle.db.name","meta":"release_candidate · string · oracle"},{"type":"attribute","id":"oracle.db.pdb","text":"The pluggable database (PDB) name associated with the connection.","url":"/attributes/oracle.db.pdb","meta":"release_candidate · string · oracle"},{"type":"attribute","id":"oracle.db.service","text":"The service name currently associated with the database connection.","url":"/attributes/oracle.db.service","meta":"release_candidate · string · oracle"},{"type":"attribute","id":"os.build_id","text":"Unique identifier for a particular build or compilation of the operating system.","url":"/attributes/os.build_id","meta":"development · string · os"},{"type":"attribute","id":"os.description","text":"Human readable (not intended to be parsed) OS version information, like e.g. reported by ver or lsb_release -a commands.","url":"/attributes/os.description","meta":"development · string · os"},{"type":"attribute","id":"os.name","text":"Human readable operating system name.","url":"/attributes/os.name","meta":"development · string · os"},{"type":"attribute","id":"os.type","text":"The operating system type.","url":"/attributes/os.type","meta":"development · enum · os"},{"type":"attribute","id":"os.version","text":"The version string of the operating system as defined in Version Attributes.","url":"/attributes/os.version","meta":"development · string · os"},{"type":"attribute","id":"otel.component.name","text":"A name uniquely identifying the instance of the OpenTelemetry component within its containing SDK instance.","url":"/attributes/otel.component.name","meta":"development · string · otel"},{"type":"attribute","id":"otel.component.type","text":"A name identifying the type of the OpenTelemetry component.","url":"/attributes/otel.component.type","meta":"development · enum · otel"},{"type":"attribute","id":"otel.event.name","text":"Identifies the class / type of event.","url":"/attributes/otel.event.name","meta":"stable · string · otel"},{"type":"attribute","id":"otel.library.name","text":"Deprecated. Use the otel.scope.name attribute","url":"/attributes/otel.library.name","meta":"deprecated · string · otel"},{"type":"attribute","id":"otel.library.version","text":"Deprecated. Use the otel.scope.version attribute.","url":"/attributes/otel.library.version","meta":"deprecated · string · otel"},{"type":"attribute","id":"otel.scope.name","text":"The name of the instrumentation scope - (InstrumentationScope.Name in OTLP).","url":"/attributes/otel.scope.name","meta":"stable · string · otel"},{"type":"attribute","id":"otel.scope.schema_url","text":"The schema URL of the instrumentation scope.","url":"/attributes/otel.scope.schema_url","meta":"development · string · otel"},{"type":"attribute","id":"otel.scope.version","text":"The version of the instrumentation scope - (InstrumentationScope.Version in OTLP).","url":"/attributes/otel.scope.version","meta":"stable · string · otel"},{"type":"attribute","id":"otel.span.parent.origin","text":"Determines whether the span has a parent span, and if so, whether it is a remote parent","url":"/attributes/otel.span.parent.origin","meta":"development · enum · otel"},{"type":"attribute","id":"otel.span.sampling_result","text":"The result value of the sampler for this span","url":"/attributes/otel.span.sampling_result","meta":"development · enum · otel"},{"type":"attribute","id":"otel.status_code","text":"Name of the code, either \"OK\" or \"ERROR\". MUST NOT be set if the status code is UNSET.","url":"/attributes/otel.status_code","meta":"stable · enum · otel"},{"type":"attribute","id":"otel.status_description","text":"Description of the Status if it has a value, otherwise not set.","url":"/attributes/otel.status_description","meta":"stable · string · otel"},{"type":"attribute","id":"peer.service","text":"The service.name of the remote service. SHOULD be equal to the actual service.name resource attribute of the remote service if any.","url":"/attributes/peer.service","meta":"deprecated · string · peer"},{"type":"attribute","id":"pool.name","text":"Deprecated, use db.client.connection.pool.name instead.","url":"/attributes/pool.name","meta":"deprecated · string · pool"},{"type":"attribute","id":"pprof.location.is_folded","text":"Provides an indication that multiple symbols map to this location's address, for example due to identical code folding by the linker. In that case the line inf…","url":"/attributes/pprof.location.is_folded","meta":"development · boolean · pprof"},{"type":"attribute","id":"pprof.mapping.has_filenames","text":"Indicates that there are filenames related to this mapping.","url":"/attributes/pprof.mapping.has_filenames","meta":"development · boolean · pprof"},{"type":"attribute","id":"pprof.mapping.has_functions","text":"Indicates that there are functions related to this mapping.","url":"/attributes/pprof.mapping.has_functions","meta":"development · boolean · pprof"},{"type":"attribute","id":"pprof.mapping.has_inline_frames","text":"Indicates that there are inline frames related to this mapping.","url":"/attributes/pprof.mapping.has_inline_frames","meta":"development · boolean · pprof"},{"type":"attribute","id":"pprof.mapping.has_line_numbers","text":"Indicates that there are line numbers related to this mapping.","url":"/attributes/pprof.mapping.has_line_numbers","meta":"development · boolean · pprof"},{"type":"attribute","id":"pprof.profile.comment","text":"Free-form text associated with the profile. This field should not be used to store any machine-readable information, it is only for human-friendly content.","url":"/attributes/pprof.profile.comment","meta":"development · string[] · pprof"},{"type":"attribute","id":"pprof.profile.doc_url","text":"Documentation link for this profile type.","url":"/attributes/pprof.profile.doc_url","meta":"development · string · pprof"},{"type":"attribute","id":"pprof.profile.drop_frames","text":"Frames with Function.function_name fully matching the regular expression will be dropped from the samples, along with their successors.","url":"/attributes/pprof.profile.drop_frames","meta":"development · string · pprof"},{"type":"attribute","id":"pprof.profile.keep_frames","text":"Frames with Function.function_name fully matching the regular expression will be kept, even if it matches drop_frames.","url":"/attributes/pprof.profile.keep_frames","meta":"development · string · pprof"},{"type":"attribute","id":"pprof.scope.default_sample_type","text":"Records the pprof's default_sample_type in the original profile. Not set if the default sample type was missing.","url":"/attributes/pprof.scope.default_sample_type","meta":"development · string · pprof"},{"type":"attribute","id":"pprof.scope.sample_type_order","text":"Records the indexes of the sample types in the original profile.","url":"/attributes/pprof.scope.sample_type_order","meta":"development · int[] · pprof"},{"type":"attribute","id":"process.args_count","text":"Length of the process.command_args array","url":"/attributes/process.args_count","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.command","text":"The command used to launch the process (i.e. the command name). On Linux based systems, can be set to the zeroth string in proc/[pid]/cmdline. On Windows, can …","url":"/attributes/process.command","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.command_args","text":"All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporti…","url":"/attributes/process.command_args","meta":"release_candidate · string[] · process"},{"type":"attribute","id":"process.command_line","text":"The full command used to launch the process as a single string representing the full command. On Windows, can be set to the result of GetCommandLineW. Do not s…","url":"/attributes/process.command_line","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.context_switch_type","text":"\"Deprecated, use process.context_switch.type instead.\"","url":"/attributes/process.context_switch_type","meta":"deprecated · enum · process"},{"type":"attribute","id":"process.context_switch.type","text":"Specifies whether the context switches for this data point were voluntary or involuntary.","url":"/attributes/process.context_switch.type","meta":"release_candidate · enum · process"},{"type":"attribute","id":"process.cpu.state","text":"Deprecated, use cpu.mode instead.","url":"/attributes/process.cpu.state","meta":"deprecated · enum · process"},{"type":"attribute","id":"process.creation.time","text":"The date and time the process was created, in ISO 8601 format.","url":"/attributes/process.creation.time","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.environment_variable","text":"Process environment variables, <key> being the environment variable name, the value being the environment variable value.","url":"/attributes/process.environment_variable","meta":"release_candidate · template[string] · process"},{"type":"attribute","id":"process.executable.build_id.gnu","text":"The GNU build ID as found in the .note.gnu.build-id ELF section (hex string).","url":"/attributes/process.executable.build_id.gnu","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.executable.build_id.go","text":"The Go build ID as retrieved by go tool buildid <go executable>.","url":"/attributes/process.executable.build_id.go","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.executable.build_id.htlhash","text":"Deterministic build ID for executables.","url":"/attributes/process.executable.build_id.htlhash","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.executable.build_id.profiling","text":"\"Deprecated, use process.executable.build_id.htlhash instead.\"","url":"/attributes/process.executable.build_id.profiling","meta":"deprecated · string · process"},{"type":"attribute","id":"process.executable.name","text":"The name of the process executable. On Linux based systems, this SHOULD be set to the base name of the target of /proc/[pid]/exe. On Windows, this SHOULD be se…","url":"/attributes/process.executable.name","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.executable.path","text":"The full path to the process executable. On Linux based systems, can be set to the target of proc/[pid]/exe. On Windows, can be set to the result of GetProcess…","url":"/attributes/process.executable.path","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.exit.code","text":"The exit code of the process.","url":"/attributes/process.exit.code","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.exit.time","text":"The date and time the process exited, in ISO 8601 format.","url":"/attributes/process.exit.time","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.group_leader.pid","text":"The PID of the process's group leader. This is also the process group ID (PGID) of the process.","url":"/attributes/process.group_leader.pid","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.interactive","text":"Whether the process is connected to an interactive shell.","url":"/attributes/process.interactive","meta":"release_candidate · boolean · process"},{"type":"attribute","id":"process.linux.cgroup","text":"The control group associated with the process.","url":"/attributes/process.linux.cgroup","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.owner","text":"The username of the user that owns the process.","url":"/attributes/process.owner","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.paging.fault_type","text":"Deprecated, use system.paging.fault.type instead.","url":"/attributes/process.paging.fault_type","meta":"deprecated · enum · process"},{"type":"attribute","id":"process.parent_pid","text":"Parent Process identifier (PPID).","url":"/attributes/process.parent_pid","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.pid","text":"Process identifier (PID).","url":"/attributes/process.pid","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.real_user.id","text":"The real user ID (RUID) of the process.","url":"/attributes/process.real_user.id","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.real_user.name","text":"The username of the real user of the process.","url":"/attributes/process.real_user.name","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.runtime.description","text":"An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment.","url":"/attributes/process.runtime.description","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.runtime.name","text":"The name of the runtime of this process.","url":"/attributes/process.runtime.name","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.runtime.version","text":"The version of the runtime of this process, as returned by the runtime without modification.","url":"/attributes/process.runtime.version","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.saved_user.id","text":"The saved user ID (SUID) of the process.","url":"/attributes/process.saved_user.id","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.saved_user.name","text":"The username of the saved user.","url":"/attributes/process.saved_user.name","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.session_leader.pid","text":"The PID of the process's session leader. This is also the session ID (SID) of the process.","url":"/attributes/process.session_leader.pid","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.state","text":"The process state, e.g., Linux Process State Codes","url":"/attributes/process.state","meta":"release_candidate · enum · process"},{"type":"attribute","id":"process.title","text":"Process title (proctitle)","url":"/attributes/process.title","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.user.id","text":"The effective user ID (EUID) of the process.","url":"/attributes/process.user.id","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.user.name","text":"The username of the effective user of the process.","url":"/attributes/process.user.name","meta":"release_candidate · string · process"},{"type":"attribute","id":"process.vpid","text":"Virtual process identifier.","url":"/attributes/process.vpid","meta":"release_candidate · int · process"},{"type":"attribute","id":"process.working_directory","text":"The working directory of the process.","url":"/attributes/process.working_directory","meta":"release_candidate · string · process"},{"type":"attribute","id":"profile.frame.type","text":"Describes the interpreter or compiler of a single frame.","url":"/attributes/profile.frame.type","meta":"development · enum · profile"},{"type":"attribute","id":"rpc.connect_rpc.error_code","text":"Deprecated, use rpc.response.status_code attribute instead.","url":"/attributes/rpc.connect_rpc.error_code","meta":"deprecated · enum · rpc"},{"type":"attribute","id":"rpc.connect_rpc.request.metadata","text":"Deprecated, use rpc.request.metadata instead.","url":"/attributes/rpc.connect_rpc.request.metadata","meta":"deprecated · template[string[]] · rpc"},{"type":"attribute","id":"rpc.connect_rpc.response.metadata","text":"Deprecated, use rpc.response.metadata instead.","url":"/attributes/rpc.connect_rpc.response.metadata","meta":"deprecated · template[string[]] · rpc"},{"type":"attribute","id":"rpc.grpc.request.metadata","text":"Deprecated, use rpc.request.metadata instead.","url":"/attributes/rpc.grpc.request.metadata","meta":"deprecated · template[string[]] · rpc"},{"type":"attribute","id":"rpc.grpc.response.metadata","text":"Deprecated, use rpc.response.metadata instead.","url":"/attributes/rpc.grpc.response.metadata","meta":"deprecated · template[string[]] · rpc"},{"type":"attribute","id":"rpc.grpc.status_code","text":"Deprecated, use string representation on the rpc.response.status_code attribute instead.","url":"/attributes/rpc.grpc.status_code","meta":"deprecated · enum · rpc"},{"type":"attribute","id":"rpc.jsonrpc.error_code","text":"Deprecated, use string representation on the rpc.response.status_code attribute instead.","url":"/attributes/rpc.jsonrpc.error_code","meta":"deprecated · int · rpc"},{"type":"attribute","id":"rpc.jsonrpc.error_message","text":"Deprecated, use the span status description when reporting JSON-RPC spans.","url":"/attributes/rpc.jsonrpc.error_message","meta":"deprecated · string · rpc"},{"type":"attribute","id":"rpc.jsonrpc.request_id","text":"Deprecated, use jsonrpc.request.id instead.","url":"/attributes/rpc.jsonrpc.request_id","meta":"deprecated · string · rpc"},{"type":"attribute","id":"rpc.jsonrpc.version","text":"Deprecated, use jsonrpc.protocol.version instead.","url":"/attributes/rpc.jsonrpc.version","meta":"deprecated · string · rpc"},{"type":"attribute","id":"rpc.message.compressed_size","text":"Compressed size of the message in bytes.","url":"/attributes/rpc.message.compressed_size","meta":"deprecated · int · rpc"},{"type":"attribute","id":"rpc.message.id","text":"MUST be calculated as two different counters starting from 1 one for sent messages and one for received message.","url":"/attributes/rpc.message.id","meta":"deprecated · int · rpc"},{"type":"attribute","id":"rpc.message.type","text":"Whether this is a received or sent message.","url":"/attributes/rpc.message.type","meta":"deprecated · enum · rpc"},{"type":"attribute","id":"rpc.message.uncompressed_size","text":"Uncompressed size of the message in bytes.","url":"/attributes/rpc.message.uncompressed_size","meta":"deprecated · int · rpc"},{"type":"attribute","id":"rpc.method","text":"The fully-qualified logical name of the method from the RPC interface perspective.","url":"/attributes/rpc.method","meta":"release_candidate · string · rpc"},{"type":"attribute","id":"rpc.method_original","text":"The original name of the method used by the client.","url":"/attributes/rpc.method_original","meta":"release_candidate · string · rpc"},{"type":"attribute","id":"rpc.request.metadata","text":"RPC request metadata, <key> being the normalized RPC metadata key (lowercase), the value being the metadata values.","url":"/attributes/rpc.request.metadata","meta":"development · template[string[]] · rpc"},{"type":"attribute","id":"rpc.response.metadata","text":"RPC response metadata, <key> being the normalized RPC metadata key (lowercase), the value being the metadata values.","url":"/attributes/rpc.response.metadata","meta":"development · template[string[]] · rpc"},{"type":"attribute","id":"rpc.response.status_code","text":"Status code of the RPC returned by the RPC server or generated by the client","url":"/attributes/rpc.response.status_code","meta":"release_candidate · string · rpc"},{"type":"attribute","id":"rpc.service","text":"Deprecated, use fully-qualified rpc.method instead.","url":"/attributes/rpc.service","meta":"deprecated · string · rpc"},{"type":"attribute","id":"rpc.system","text":"Deprecated, use rpc.system.name attribute instead.","url":"/attributes/rpc.system","meta":"deprecated · enum · rpc"},{"type":"attribute","id":"rpc.system.name","text":"The Remote Procedure Call (RPC) system.","url":"/attributes/rpc.system.name","meta":"release_candidate · enum · rpc"},{"type":"attribute","id":"security_rule.category","text":"A categorization value keyword used by the entity using the rule for detection of this event","url":"/attributes/security_rule.category","meta":"development · string · security_rule"},{"type":"attribute","id":"security_rule.description","text":"The description of the rule generating the event.","url":"/attributes/security_rule.description","meta":"development · string · security_rule"},{"type":"attribute","id":"security_rule.license","text":"Name of the license under which the rule used to generate this event is made available.","url":"/attributes/security_rule.license","meta":"development · string · security_rule"},{"type":"attribute","id":"security_rule.name","text":"The name of the rule or signature generating the event.","url":"/attributes/security_rule.name","meta":"development · string · security_rule"},{"type":"attribute","id":"security_rule.reference","text":"Reference URL to additional information about the rule used to generate this event.","url":"/attributes/security_rule.reference","meta":"development · string · security_rule"},{"type":"attribute","id":"security_rule.ruleset.name","text":"Name of the ruleset, policy, group, or parent category in which the rule used to generate this event is a member.","url":"/attributes/security_rule.ruleset.name","meta":"development · string · security_rule"},{"type":"attribute","id":"security_rule.uuid","text":"A rule ID that is unique within the scope of a set or group of agents, observers, or other entities using the rule for detection of this event.","url":"/attributes/security_rule.uuid","meta":"development · string · security_rule"},{"type":"attribute","id":"security_rule.version","text":"The version / revision of the rule being used for analysis.","url":"/attributes/security_rule.version","meta":"development · string · security_rule"},{"type":"attribute","id":"server.address","text":"Server domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name.","url":"/attributes/server.address","meta":"stable · string · server"},{"type":"attribute","id":"server.port","text":"Server port number.","url":"/attributes/server.port","meta":"stable · int · server"},{"type":"attribute","id":"service.criticality","text":"The operational criticality of the service.","url":"/attributes/service.criticality","meta":"alpha · enum · service"},{"type":"attribute","id":"service.instance.id","text":"The string ID of the service instance.","url":"/attributes/service.instance.id","meta":"stable · string · service"},{"type":"attribute","id":"service.name","text":"Logical name of the service.","url":"/attributes/service.name","meta":"stable · string · service"},{"type":"attribute","id":"service.namespace","text":"A namespace for service.name.","url":"/attributes/service.namespace","meta":"stable · string · service"},{"type":"attribute","id":"service.peer.name","text":"Logical name of the service on the other side of the connection. SHOULD be equal to the actual service.name resource attribute of the remote service if any.","url":"/attributes/service.peer.name","meta":"development · string · service"},{"type":"attribute","id":"service.peer.namespace","text":"Logical namespace of the service on the other side of the connection. SHOULD be equal to the actual service.namespace resource attribute of the remote service …","url":"/attributes/service.peer.namespace","meta":"development · string · service"},{"type":"attribute","id":"service.version","text":"The version string of the service component. The format is not defined by these conventions.","url":"/attributes/service.version","meta":"stable · string · service"},{"type":"attribute","id":"session.id","text":"A unique ID to identify a session.","url":"/attributes/session.id","meta":"development · string · session"},{"type":"attribute","id":"session.previous_id","text":"The previous session.id for this user, when known.","url":"/attributes/session.previous_id","meta":"development · string · session"},{"type":"attribute","id":"signalr.connection.status","text":"SignalR HTTP connection closure status.","url":"/attributes/signalr.connection.status","meta":"stable · enum · signalr"},{"type":"attribute","id":"signalr.transport","text":"SignalR transport type","url":"/attributes/signalr.transport","meta":"stable · enum · signalr"},{"type":"attribute","id":"source.address","text":"Source address - domain name if available without reverse DNS lookup; otherwise, IP address or UNIX domain socket name.","url":"/attributes/source.address","meta":"development · string · source"},{"type":"attribute","id":"source.port","text":"Source port number","url":"/attributes/source.port","meta":"development · int · source"},{"type":"attribute","id":"state","text":"Deprecated, use db.client.connection.state instead.","url":"/attributes/state","meta":"deprecated · enum · state"},{"type":"attribute","id":"system.cpu.logical_number","text":"Deprecated, use cpu.logical_number instead.","url":"/attributes/system.cpu.logical_number","meta":"deprecated · int · system"},{"type":"attribute","id":"system.cpu.state","text":"Deprecated, use cpu.mode instead.","url":"/attributes/system.cpu.state","meta":"deprecated · enum · system"},{"type":"attribute","id":"system.device","text":"The device identifier","url":"/attributes/system.device","meta":"development · string · system"},{"type":"attribute","id":"system.filesystem.mode","text":"The filesystem mode","url":"/attributes/system.filesystem.mode","meta":"development · string · system"},{"type":"attribute","id":"system.filesystem.mountpoint","text":"The filesystem mount path","url":"/attributes/system.filesystem.mountpoint","meta":"development · string · system"},{"type":"attribute","id":"system.filesystem.state","text":"The filesystem state","url":"/attributes/system.filesystem.state","meta":"development · enum · system"},{"type":"attribute","id":"system.filesystem.type","text":"The filesystem type","url":"/attributes/system.filesystem.type","meta":"development · enum · system"},{"type":"attribute","id":"system.memory.linux.hugepages.state","text":"The Linux HugePages memory state","url":"/attributes/system.memory.linux.hugepages.state","meta":"development · enum · system"},{"type":"attribute","id":"system.memory.linux.slab.state","text":"The Linux Slab memory state","url":"/attributes/system.memory.linux.slab.state","meta":"development · enum · system"},{"type":"attribute","id":"system.memory.state","text":"The memory state","url":"/attributes/system.memory.state","meta":"development · enum · system"},{"type":"attribute","id":"system.network.state","text":"Deprecated, use network.connection.state instead.","url":"/attributes/system.network.state","meta":"deprecated · enum · system"},{"type":"attribute","id":"system.paging.direction","text":"The paging access direction","url":"/attributes/system.paging.direction","meta":"development · enum · system"},{"type":"attribute","id":"system.paging.fault.type","text":"The paging fault type","url":"/attributes/system.paging.fault.type","meta":"release_candidate · enum · system"},{"type":"attribute","id":"system.paging.state","text":"The memory paging state","url":"/attributes/system.paging.state","meta":"development · enum · system"},{"type":"attribute","id":"system.paging.type","text":"Deprecated, use system.paging.fault.type instead.","url":"/attributes/system.paging.type","meta":"deprecated · enum · system"},{"type":"attribute","id":"system.process.status","text":"Deprecated, use process.state instead.","url":"/attributes/system.process.status","meta":"deprecated · enum · system"},{"type":"attribute","id":"system.processes.status","text":"Deprecated, use process.state instead.","url":"/attributes/system.processes.status","meta":"deprecated · enum · system"},{"type":"attribute","id":"telemetry.distro.name","text":"The name of the auto instrumentation agent or distribution, if used.","url":"/attributes/telemetry.distro.name","meta":"stable · string · telemetry"},{"type":"attribute","id":"telemetry.distro.version","text":"The version string of the auto instrumentation agent or distribution, if used.","url":"/attributes/telemetry.distro.version","meta":"stable · string · telemetry"},{"type":"attribute","id":"telemetry.sdk.language","text":"The language of the telemetry SDK.","url":"/attributes/telemetry.sdk.language","meta":"stable · enum · telemetry"},{"type":"attribute","id":"telemetry.sdk.name","text":"The name of the telemetry SDK as defined above.","url":"/attributes/telemetry.sdk.name","meta":"stable · string · telemetry"},{"type":"attribute","id":"telemetry.sdk.version","text":"The version string of the telemetry SDK.","url":"/attributes/telemetry.sdk.version","meta":"stable · string · telemetry"},{"type":"attribute","id":"test.case.name","text":"The fully qualified human readable name of the test case.","url":"/attributes/test.case.name","meta":"development · string · test"},{"type":"attribute","id":"test.case.result.status","text":"The status of the actual test case result from test execution.","url":"/attributes/test.case.result.status","meta":"development · enum · test"},{"type":"attribute","id":"test.suite.name","text":"The human readable name of a test suite.","url":"/attributes/test.suite.name","meta":"development · string · test"},{"type":"attribute","id":"test.suite.run.status","text":"The status of the test suite run.","url":"/attributes/test.suite.run.status","meta":"development · enum · test"},{"type":"attribute","id":"thread.id","text":"Current \"managed\" thread ID (as opposed to OS thread ID).","url":"/attributes/thread.id","meta":"development · int · thread"},{"type":"attribute","id":"thread.name","text":"Current thread name.","url":"/attributes/thread.name","meta":"development · string · thread"},{"type":"attribute","id":"tls.cipher","text":"String indicating the cipher used during the current connection.","url":"/attributes/tls.cipher","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.certificate","text":"PEM-encoded stand-alone certificate offered by the client. This is usually mutually-exclusive of client.certificate_chain since this value also exists in that …","url":"/attributes/tls.client.certificate","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.certificate_chain","text":"Array of PEM-encoded certificates that make up the certificate chain offered by the client. This is usually mutually-exclusive of client.certificate since that…","url":"/attributes/tls.client.certificate_chain","meta":"development · string[] · tls"},{"type":"attribute","id":"tls.client.hash.md5","text":"Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value sh…","url":"/attributes/tls.client.hash.md5","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.hash.sha1","text":"Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value s…","url":"/attributes/tls.client.hash.sha1","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.hash.sha256","text":"Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the client. For consistency with other hash values, this value…","url":"/attributes/tls.client.hash.sha256","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.issuer","text":"Distinguished name of subject of the issuer of the x.509 certificate presented by the client.","url":"/attributes/tls.client.issuer","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.ja3","text":"A hash that identifies clients based on how they perform an SSL/TLS handshake.","url":"/attributes/tls.client.ja3","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.not_after","text":"Date/Time indicating when client certificate is no longer considered valid.","url":"/attributes/tls.client.not_after","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.not_before","text":"Date/Time indicating when client certificate is first considered valid.","url":"/attributes/tls.client.not_before","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.server_name","text":"Deprecated, use server.address instead.","url":"/attributes/tls.client.server_name","meta":"deprecated · string · tls"},{"type":"attribute","id":"tls.client.subject","text":"Distinguished name of subject of the x.509 certificate presented by the client.","url":"/attributes/tls.client.subject","meta":"development · string · tls"},{"type":"attribute","id":"tls.client.supported_ciphers","text":"Array of ciphers offered by the client during the client hello.","url":"/attributes/tls.client.supported_ciphers","meta":"development · string[] · tls"},{"type":"attribute","id":"tls.curve","text":"String indicating the curve used for the given cipher, when applicable","url":"/attributes/tls.curve","meta":"development · string · tls"},{"type":"attribute","id":"tls.established","text":"Boolean flag indicating if the TLS negotiation was successful and transitioned to an encrypted tunnel.","url":"/attributes/tls.established","meta":"development · boolean · tls"},{"type":"attribute","id":"tls.next_protocol","text":"String indicating the protocol being tunneled. Per the values in the IANA registry, this string should be lower case.","url":"/attributes/tls.next_protocol","meta":"development · string · tls"},{"type":"attribute","id":"tls.protocol.name","text":"Normalized lowercase protocol name parsed from original string of the negotiated SSL/TLS protocol version","url":"/attributes/tls.protocol.name","meta":"development · enum · tls"},{"type":"attribute","id":"tls.protocol.version","text":"Numeric part of the version parsed from the original string of the negotiated SSL/TLS protocol version","url":"/attributes/tls.protocol.version","meta":"development · string · tls"},{"type":"attribute","id":"tls.resumed","text":"Boolean flag indicating if this TLS connection was resumed from an existing TLS negotiation.","url":"/attributes/tls.resumed","meta":"development · boolean · tls"},{"type":"attribute","id":"tls.server.certificate","text":"PEM-encoded stand-alone certificate offered by the server. This is usually mutually-exclusive of server.certificate_chain since this value also exists in that …","url":"/attributes/tls.server.certificate","meta":"development · string · tls"},{"type":"attribute","id":"tls.server.certificate_chain","text":"Array of PEM-encoded certificates that make up the certificate chain offered by the server. This is usually mutually-exclusive of server.certificate since that…","url":"/attributes/tls.server.certificate_chain","meta":"development · string[] · tls"},{"type":"attribute","id":"tls.server.hash.md5","text":"Certificate fingerprint using the MD5 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value sh…","url":"/attributes/tls.server.hash.md5","meta":"development · string · tls"},{"type":"attribute","id":"tls.server.hash.sha1","text":"Certificate fingerprint using the SHA1 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value s…","url":"/attributes/tls.server.hash.sha1","meta":"development · string · tls"},{"type":"attribute","id":"tls.server.hash.sha256","text":"Certificate fingerprint using the SHA256 digest of DER-encoded version of certificate offered by the server. For consistency with other hash values, this value…","url":"/attributes/tls.server.hash.sha256","meta":"development · string · tls"},{"type":"attribute","id":"tls.server.issuer","text":"Distinguished name of subject of the issuer of the x.509 certificate presented by the client.","url":"/attributes/tls.server.issuer","meta":"development · string · tls"},{"type":"attribute","id":"tls.server.ja3s","text":"A hash that identifies servers based on how they perform an SSL/TLS handshake.","url":"/attributes/tls.server.ja3s","meta":"development · string · tls"},{"type":"attribute","id":"tls.server.not_after","text":"Date/Time indicating when server certificate is no longer considered valid.","url":"/attributes/tls.server.not_after","meta":"development · string · tls"},{"type":"attribute","id":"tls.server.not_before","text":"Date/Time indicating when server certificate is first considered valid.","url":"/attributes/tls.server.not_before","meta":"development · string · tls"},{"type":"attribute","id":"tls.server.subject","text":"Distinguished name of subject of the x.509 certificate presented by the server.","url":"/attributes/tls.server.subject","meta":"development · string · tls"},{"type":"attribute","id":"url.domain","text":"Domain extracted from the url.full, such as \"opentelemetry.io\".","url":"/attributes/url.domain","meta":"development · string · url"},{"type":"attribute","id":"url.extension","text":"The file extension extracted from the url.full, excluding the leading dot.","url":"/attributes/url.extension","meta":"development · string · url"},{"type":"attribute","id":"url.fragment","text":"The URI fragment component","url":"/attributes/url.fragment","meta":"stable · string · url"},{"type":"attribute","id":"url.full","text":"Absolute URL describing a network resource according to RFC3986","url":"/attributes/url.full","meta":"stable · string · url"},{"type":"attribute","id":"url.original","text":"Unmodified original URL as seen in the event source.","url":"/attributes/url.original","meta":"development · string · url"},{"type":"attribute","id":"url.path","text":"The URI path component","url":"/attributes/url.path","meta":"stable · string · url"},{"type":"attribute","id":"url.port","text":"Port extracted from the url.full","url":"/attributes/url.port","meta":"development · int · url"},{"type":"attribute","id":"url.query","text":"The URI query component","url":"/attributes/url.query","meta":"stable · string · url"},{"type":"attribute","id":"url.registered_domain","text":"The highest registered URL domain, stripped of the subdomain.","url":"/attributes/url.registered_domain","meta":"development · string · url"},{"type":"attribute","id":"url.scheme","text":"The URI scheme component identifying the used protocol.","url":"/attributes/url.scheme","meta":"stable · string · url"},{"type":"attribute","id":"url.subdomain","text":"The subdomain portion of a fully qualified domain name includes all of the names except the hostname under the registered_domain. In a partially qualified doma…","url":"/attributes/url.subdomain","meta":"development · string · url"},{"type":"attribute","id":"url.template","text":"The low-cardinality template of an absolute path reference.","url":"/attributes/url.template","meta":"development · string · url"},{"type":"attribute","id":"url.top_level_domain","text":"The effective top level domain (eTLD), also known as the domain suffix, is the last part of the domain name. For example, the top level domain for example.com …","url":"/attributes/url.top_level_domain","meta":"development · string · url"},{"type":"attribute","id":"user_agent.name","text":"Name of the user-agent extracted from original. Usually refers to the browser's name.","url":"/attributes/user_agent.name","meta":"development · string · user_agent"},{"type":"attribute","id":"user_agent.original","text":"Value of the HTTP User-Agent header sent by the client.","url":"/attributes/user_agent.original","meta":"stable · string · user_agent"},{"type":"attribute","id":"user_agent.os.name","text":"Human readable operating system name.","url":"/attributes/user_agent.os.name","meta":"development · string · user_agent"},{"type":"attribute","id":"user_agent.os.version","text":"The version string of the operating system as defined in Version Attributes.","url":"/attributes/user_agent.os.version","meta":"development · string · user_agent"},{"type":"attribute","id":"user_agent.synthetic.type","text":"Specifies the category of synthetic traffic, such as tests or bots.","url":"/attributes/user_agent.synthetic.type","meta":"development · enum · user_agent"},{"type":"attribute","id":"user_agent.version","text":"Version of the user-agent extracted from original. Usually refers to the browser's version","url":"/attributes/user_agent.version","meta":"development · string · user_agent"},{"type":"attribute","id":"user.email","text":"User email address.","url":"/attributes/user.email","meta":"development · string · user"},{"type":"attribute","id":"user.full_name","text":"User's full name","url":"/attributes/user.full_name","meta":"development · string · user"},{"type":"attribute","id":"user.hash","text":"Unique user hash to correlate information for a user in anonymized form.","url":"/attributes/user.hash","meta":"development · string · user"},{"type":"attribute","id":"user.id","text":"Unique identifier of the user.","url":"/attributes/user.id","meta":"development · string · user"},{"type":"attribute","id":"user.name","text":"Short name or login/username of the user.","url":"/attributes/user.name","meta":"development · string · user"},{"type":"attribute","id":"user.roles","text":"Array of user roles at the time of the event.","url":"/attributes/user.roles","meta":"development · string[] · user"},{"type":"attribute","id":"v8js.gc.type","text":"The type of garbage collection.","url":"/attributes/v8js.gc.type","meta":"development · enum · v8js"},{"type":"attribute","id":"v8js.heap.space.name","text":"The name of the space type of heap memory.","url":"/attributes/v8js.heap.space.name","meta":"development · enum · v8js"},{"type":"attribute","id":"v8js.resource.type","text":"The type of resource keeping the event loop active.","url":"/attributes/v8js.resource.type","meta":"development · enum · v8js"},{"type":"attribute","id":"vcs.change.id","text":"The ID of the change (pull request/merge request/changelist) if applicable. This is usually a unique (within repository) identifier generated by the VCS system.","url":"/attributes/vcs.change.id","meta":"release_candidate · string · vcs"},{"type":"attribute","id":"vcs.change.state","text":"The state of the change (pull request/merge request/changelist).","url":"/attributes/vcs.change.state","meta":"release_candidate · enum · vcs"},{"type":"attribute","id":"vcs.change.title","text":"The human readable title of the change (pull request/merge request/changelist). This title is often a brief summary of the change and may get merged in to a re…","url":"/attributes/vcs.change.title","meta":"release_candidate · string · vcs"},{"type":"attribute","id":"vcs.line_change.type","text":"The type of line change being measured on a branch or change.","url":"/attributes/vcs.line_change.type","meta":"release_candidate · enum · vcs"},{"type":"attribute","id":"vcs.owner.name","text":"The group owner within the version control system.","url":"/attributes/vcs.owner.name","meta":"release_candidate · string · vcs"},{"type":"attribute","id":"vcs.provider.name","text":"The name of the version control system provider.","url":"/attributes/vcs.provider.name","meta":"release_candidate · enum · vcs"},{"type":"attribute","id":"vcs.ref.base.name","text":"The name of the reference such as **branch** or **tag** in the repository.","url":"/attributes/vcs.ref.base.name","meta":"release_candidate · string · vcs"},{"type":"attribute","id":"vcs.ref.base.revision","text":"The revision, literally revised version, The revision most often refers to a commit object in Git, or a revision number in SVN.","url":"/attributes/vcs.ref.base.revision","meta":"release_candidate · string · vcs"},{"type":"attribute","id":"vcs.ref.base.type","text":"The type of the reference in the repository.","url":"/attributes/vcs.ref.base.type","meta":"release_candidate · enum · vcs"},{"type":"attribute","id":"vcs.ref.head.name","text":"The name of the reference such as **branch** or **tag** in the repository.","url":"/attributes/vcs.ref.head.name","meta":"release_candidate · string · vcs"},{"type":"attribute","id":"vcs.ref.head.revision","text":"The revision, literally revised version, The revision most often refers to a commit object in Git, or a revision number in SVN.","url":"/attributes/vcs.ref.head.revision","meta":"release_candidate · string · vcs"},{"type":"attribute","id":"vcs.ref.head.type","text":"The type of the reference in the repository.","url":"/attributes/vcs.ref.head.type","meta":"release_candidate · enum · vcs"},{"type":"attribute","id":"vcs.ref.type","text":"The type of the reference in the repository.","url":"/attributes/vcs.ref.type","meta":"release_candidate · enum · vcs"},{"type":"attribute","id":"vcs.repository.change.id","text":"Deprecated, use vcs.change.id instead.","url":"/attributes/vcs.repository.change.id","meta":"deprecated · string · vcs"},{"type":"attribute","id":"vcs.repository.change.title","text":"Deprecated, use vcs.change.title instead.","url":"/attributes/vcs.repository.change.title","meta":"deprecated · string · vcs"},{"type":"attribute","id":"vcs.repository.name","text":"The human readable name of the repository. It SHOULD NOT include any additional identifier like Group/SubGroup in GitLab or organization in GitHub.","url":"/attributes/vcs.repository.name","meta":"release_candidate · string · vcs"},{"type":"attribute","id":"vcs.repository.ref.name","text":"Deprecated, use vcs.ref.head.name instead.","url":"/attributes/vcs.repository.ref.name","meta":"deprecated · string · vcs"},{"type":"attribute","id":"vcs.repository.ref.revision","text":"Deprecated, use vcs.ref.head.revision instead.","url":"/attributes/vcs.repository.ref.revision","meta":"deprecated · string · vcs"},{"type":"attribute","id":"vcs.repository.ref.type","text":"Deprecated, use vcs.ref.head.type instead.","url":"/attributes/vcs.repository.ref.type","meta":"deprecated · enum · vcs"},{"type":"attribute","id":"vcs.repository.url.full","text":"The canonical URL of the repository providing the complete HTTP(S) address in order to locate and identify the repository through a browser.","url":"/attributes/vcs.repository.url.full","meta":"release_candidate · string · vcs"},{"type":"attribute","id":"vcs.revision_delta.direction","text":"The type of revision comparison.","url":"/attributes/vcs.revision_delta.direction","meta":"release_candidate · enum · vcs"},{"type":"attribute","id":"webengine.description","text":"Additional description of the web engine (e.g. detailed version and edition information).","url":"/attributes/webengine.description","meta":"development · string · webengine"},{"type":"attribute","id":"webengine.name","text":"The name of the web engine.","url":"/attributes/webengine.name","meta":"development · string · webengine"},{"type":"attribute","id":"webengine.version","text":"The version of the web engine.","url":"/attributes/webengine.version","meta":"development · string · webengine"},{"type":"attribute","id":"zos.smf.id","text":"The System Management Facility (SMF) Identifier uniquely identified a z/OS system within a SYSPLEX or mainframe environment and is used for system and performa…","url":"/attributes/zos.smf.id","meta":"development · string · zos"},{"type":"attribute","id":"zos.sysplex.name","text":"The name of the SYSPLEX to which the z/OS system belongs too.","url":"/attributes/zos.sysplex.name","meta":"development · string · zos"},{"type":"attribute","id":"aws.bedrock.guardrail.id","text":"The unique identifier of the AWS Bedrock Guardrail. A guardrail helps safeguard and prevent unwanted behavior from model responses or user messages.","url":"/attributes/aws.bedrock.guardrail.id","meta":"development · string · genai"},{"type":"attribute","id":"aws.bedrock.knowledge_base.id","text":"The unique identifier of the AWS Bedrock Knowledge base. A knowledge base is a bank of information that can be queried by models to generate more relevant resp…","url":"/attributes/aws.bedrock.knowledge_base.id","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.agent.description","text":"Free-form description of the GenAI agent provided by the application.","url":"/attributes/gen_ai.agent.description","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.agent.id","text":"The unique and stable identifier of the GenAI hosted agent resource.","url":"/attributes/gen_ai.agent.id","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.agent.name","text":"Human-readable name of the GenAI agent provided by the application.","url":"/attributes/gen_ai.agent.name","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.agent.version","text":"The version of the GenAI agent.","url":"/attributes/gen_ai.agent.version","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.conversation.compacted","text":"Indicates whether the effective conversation context used for this operation is a compacted view of a prior conversation.","url":"/attributes/gen_ai.conversation.compacted","meta":"development · boolean · genai"},{"type":"attribute","id":"gen_ai.conversation.id","text":"The unique identifier for a conversation (session, thread), used to store and correlate messages within this conversation.","url":"/attributes/gen_ai.conversation.id","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.data_source.id","text":"The data source identifier.","url":"/attributes/gen_ai.data_source.id","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.embeddings.dimension.count","text":"The number of dimensions the resulting output embeddings should have.","url":"/attributes/gen_ai.embeddings.dimension.count","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.evaluation.explanation","text":"A free-form explanation for the assigned score provided by the evaluator.","url":"/attributes/gen_ai.evaluation.explanation","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.evaluation.name","text":"The name of the evaluation metric used for the GenAI response.","url":"/attributes/gen_ai.evaluation.name","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.evaluation.score.label","text":"Human readable label for evaluation.","url":"/attributes/gen_ai.evaluation.score.label","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.evaluation.score.value","text":"The evaluation score returned by the evaluator.","url":"/attributes/gen_ai.evaluation.score.value","meta":"development · double · genai"},{"type":"attribute","id":"gen_ai.input.messages","text":"The chat history provided to the model as an input.","url":"/attributes/gen_ai.input.messages","meta":"development · any · genai"},{"type":"attribute","id":"gen_ai.memory.query.text","text":"The search query used to retrieve memories.","url":"/attributes/gen_ai.memory.query.text","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.memory.record.count","text":"The number of memory records relevant to the operation.","url":"/attributes/gen_ai.memory.record.count","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.memory.record.id","text":"The unique identifier of the memory record.","url":"/attributes/gen_ai.memory.record.id","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.memory.records","text":"The memory records stored or retrieved in a memory operation.","url":"/attributes/gen_ai.memory.records","meta":"development · any · genai"},{"type":"attribute","id":"gen_ai.memory.store.id","text":"The unique identifier of the memory store.","url":"/attributes/gen_ai.memory.store.id","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.operation.name","text":"The name of the operation being performed.","url":"/attributes/gen_ai.operation.name","meta":"development · enum · genai"},{"type":"attribute","id":"gen_ai.output.messages","text":"Messages returned by the model where each message represents a specific model response (choice, candidate).","url":"/attributes/gen_ai.output.messages","meta":"development · any · genai"},{"type":"attribute","id":"gen_ai.output.type","text":"Represents the content type requested by the client.","url":"/attributes/gen_ai.output.type","meta":"development · enum · genai"},{"type":"attribute","id":"gen_ai.prompt.name","text":"The name of the prompt that uniquely identifies it.","url":"/attributes/gen_ai.prompt.name","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.prompt.variable","text":"The variables supplied to the prompt template, the <key> being the variable name, the value being the variable value.","url":"/attributes/gen_ai.prompt.variable","meta":"development · template[string] · genai"},{"type":"attribute","id":"gen_ai.prompt.version","text":"The version of the prompt template used.","url":"/attributes/gen_ai.prompt.version","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.provider.name","text":"The Generative AI provider as identified by the client or server instrumentation.","url":"/attributes/gen_ai.provider.name","meta":"development · enum · genai"},{"type":"attribute","id":"gen_ai.request.choice.count","text":"The target number of candidate completions to return.","url":"/attributes/gen_ai.request.choice.count","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.request.encoding_formats","text":"The encoding formats requested in an embeddings operation, if specified.","url":"/attributes/gen_ai.request.encoding_formats","meta":"development · string[] · genai"},{"type":"attribute","id":"gen_ai.request.frequency_penalty","text":"The frequency penalty setting for the GenAI request.","url":"/attributes/gen_ai.request.frequency_penalty","meta":"development · double · genai"},{"type":"attribute","id":"gen_ai.request.max_tokens","text":"The maximum number of tokens the model generates for a request.","url":"/attributes/gen_ai.request.max_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.request.model","text":"The name of the GenAI model a request is being made to.","url":"/attributes/gen_ai.request.model","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.request.presence_penalty","text":"The presence penalty setting for the GenAI request.","url":"/attributes/gen_ai.request.presence_penalty","meta":"development · double · genai"},{"type":"attribute","id":"gen_ai.request.previous_response.id","text":"The unique identifier of a previous response or interaction used to provide context for the current operation.","url":"/attributes/gen_ai.request.previous_response.id","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.request.reasoning.level","text":"The reasoning or thinking effort level requested for a GenAI model.","url":"/attributes/gen_ai.request.reasoning.level","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.request.seed","text":"Requests with same seed value more likely to return same result.","url":"/attributes/gen_ai.request.seed","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.request.stop_sequences","text":"List of sequences that the model will use to stop generating further tokens.","url":"/attributes/gen_ai.request.stop_sequences","meta":"development · string[] · genai"},{"type":"attribute","id":"gen_ai.request.stream","text":"Indicates whether the GenAI request was made in streaming mode.","url":"/attributes/gen_ai.request.stream","meta":"development · boolean · genai"},{"type":"attribute","id":"gen_ai.request.stream_cursor","text":"The cursor identifying the last streamed event already received, used to resume a streamed response from that position.","url":"/attributes/gen_ai.request.stream_cursor","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.request.temperature","text":"The temperature setting for the GenAI request.","url":"/attributes/gen_ai.request.temperature","meta":"development · double · genai"},{"type":"attribute","id":"gen_ai.request.top_k","text":"The top-K sampling setting for the GenAI request: restricts token generation at each step to the K most likely next tokens.","url":"/attributes/gen_ai.request.top_k","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.request.top_p","text":"The top_p sampling setting for the GenAI request.","url":"/attributes/gen_ai.request.top_p","meta":"development · double · genai"},{"type":"attribute","id":"gen_ai.response.finish_reasons","text":"Array of reasons the model stopped generating tokens, corresponding to each generation received.","url":"/attributes/gen_ai.response.finish_reasons","meta":"development · string[] · genai"},{"type":"attribute","id":"gen_ai.response.id","text":"The unique identifier for the completion.","url":"/attributes/gen_ai.response.id","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.response.model","text":"The name of the model that generated the response.","url":"/attributes/gen_ai.response.model","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.response.status","text":"The lifecycle status of a generated response, as reported by the provider when the response is fetched or polled.","url":"/attributes/gen_ai.response.status","meta":"development · enum · genai"},{"type":"attribute","id":"gen_ai.response.time_to_first_chunk","text":"Time to first chunk in a streaming response, measured from request issuance, in seconds. The value is measured from when the client issues the generation reque…","url":"/attributes/gen_ai.response.time_to_first_chunk","meta":"development · double · genai"},{"type":"attribute","id":"gen_ai.retrieval.documents","text":"The documents retrieved.","url":"/attributes/gen_ai.retrieval.documents","meta":"development · any · genai"},{"type":"attribute","id":"gen_ai.retrieval.query.text","text":"The query text used for retrieval.","url":"/attributes/gen_ai.retrieval.query.text","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.retrieval.top_k","text":"The maximum number of documents the retriever was asked to return for the query (also known as k, limit, or max_num_results).","url":"/attributes/gen_ai.retrieval.top_k","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.system_instructions","text":"The system message or instructions provided to the GenAI model separately from the chat history.","url":"/attributes/gen_ai.system_instructions","meta":"development · any · genai"},{"type":"attribute","id":"gen_ai.token.type","text":"The type of token being counted.","url":"/attributes/gen_ai.token.type","meta":"development · enum · genai"},{"type":"attribute","id":"gen_ai.tool.call.arguments","text":"Parameters passed to the tool call.","url":"/attributes/gen_ai.tool.call.arguments","meta":"development · any · genai"},{"type":"attribute","id":"gen_ai.tool.call.id","text":"The tool call identifier.","url":"/attributes/gen_ai.tool.call.id","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.tool.call.result","text":"The result returned by the tool call (if any and if execution was successful).","url":"/attributes/gen_ai.tool.call.result","meta":"development · any · genai"},{"type":"attribute","id":"gen_ai.tool.definitions","text":"The list of tool definitions available to the GenAI agent or model.","url":"/attributes/gen_ai.tool.definitions","meta":"development · any · genai"},{"type":"attribute","id":"gen_ai.tool.description","text":"The tool description.","url":"/attributes/gen_ai.tool.description","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.tool.name","text":"Name of the tool utilized by the agent.","url":"/attributes/gen_ai.tool.name","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.tool.type","text":"Type of the tool utilized by the agent","url":"/attributes/gen_ai.tool.type","meta":"development · string · genai"},{"type":"attribute","id":"gen_ai.usage.audio.cache_read.input_tokens","text":"The number of audio input tokens served from a provider-managed cache.","url":"/attributes/gen_ai.usage.audio.cache_read.input_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.audio.input_tokens","text":"The number of audio input tokens.","url":"/attributes/gen_ai.usage.audio.input_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.audio.output_tokens","text":"The number of audio output tokens.","url":"/attributes/gen_ai.usage.audio.output_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.cache_read.input_tokens","text":"The number of input tokens served from a provider-managed cache.","url":"/attributes/gen_ai.usage.cache_read.input_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.cache_write.input_tokens","text":"The number of input tokens written to a provider-managed cache.","url":"/attributes/gen_ai.usage.cache_write.input_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.image.cache_read.input_tokens","text":"The number of image input tokens served from a provider-managed cache.","url":"/attributes/gen_ai.usage.image.cache_read.input_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.image.input_tokens","text":"The number of image input tokens.","url":"/attributes/gen_ai.usage.image.input_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.image.output_tokens","text":"The number of image output tokens.","url":"/attributes/gen_ai.usage.image.output_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.input_tokens","text":"The number of tokens used in the GenAI input (prompt).","url":"/attributes/gen_ai.usage.input_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.output_tokens","text":"The number of tokens used in the GenAI response (completion).","url":"/attributes/gen_ai.usage.output_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.reasoning.output_tokens","text":"The number of output tokens used for reasoning (e.g. chain-of-thought, extended thinking).","url":"/attributes/gen_ai.usage.reasoning.output_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.text.cache_read.input_tokens","text":"The number of text input tokens served from a provider-managed cache.","url":"/attributes/gen_ai.usage.text.cache_read.input_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.text.input_tokens","text":"The number of text input tokens.","url":"/attributes/gen_ai.usage.text.input_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.usage.text.output_tokens","text":"The number of text output tokens.","url":"/attributes/gen_ai.usage.text.output_tokens","meta":"development · int · genai"},{"type":"attribute","id":"gen_ai.workflow.name","text":"Human-readable name of the GenAI workflow provided by the application.","url":"/attributes/gen_ai.workflow.name","meta":"development · string · genai"},{"type":"attribute","id":"mcp.method.name","text":"The name of the request or notification method.","url":"/attributes/mcp.method.name","meta":"development · enum · genai"},{"type":"attribute","id":"mcp.protocol.version","text":"The version of the Model Context Protocol used.","url":"/attributes/mcp.protocol.version","meta":"development · string · genai"},{"type":"attribute","id":"mcp.resource.uri","text":"The value of the resource uri.","url":"/attributes/mcp.resource.uri","meta":"development · string · genai"},{"type":"attribute","id":"mcp.session.id","text":"Identifies MCP session.","url":"/attributes/mcp.session.id","meta":"development · string · genai"},{"type":"attribute","id":"openai.api.type","text":"The type of OpenAI API being used.","url":"/attributes/openai.api.type","meta":"development · enum · genai"},{"type":"attribute","id":"openai.request.service_tier","text":"The service tier requested. May be a specific tier, default, or auto.","url":"/attributes/openai.request.service_tier","meta":"development · enum · genai"},{"type":"attribute","id":"openai.response.service_tier","text":"The service tier used for the response.","url":"/attributes/openai.response.service_tier","meta":"development · string · genai"},{"type":"attribute","id":"openai.response.system_fingerprint","text":"A fingerprint to track any eventual change in the Generative AI environment.","url":"/attributes/openai.response.system_fingerprint","meta":"development · string · genai"},{"type":"metric","id":"aspnetcore.authentication.authenticate.duration","text":"The authentication duration for a request.","url":"/domains/runtime#metrics","meta":"development · histogram · s"},{"type":"metric","id":"aspnetcore.authentication.challenges","text":"The total number of times a scheme is challenged.","url":"/domains/runtime#metrics","meta":"development · counter · {challenge}"},{"type":"metric","id":"aspnetcore.authentication.forbids","text":"The total number of times an authenticated user attempts to access a resource they are not permitted to access.","url":"/domains/runtime#metrics","meta":"development · counter · {forbid}"},{"type":"metric","id":"aspnetcore.authentication.sign_ins","text":"The total number of times a principal is signed in with a scheme.","url":"/domains/runtime#metrics","meta":"development · counter · {sign_in}"},{"type":"metric","id":"aspnetcore.authentication.sign_outs","text":"The total number of times a principal is signed out with a scheme.","url":"/domains/runtime#metrics","meta":"development · counter · {sign_out}"},{"type":"metric","id":"aspnetcore.authorization.attempts","text":"The total number of authorization attempts.","url":"/domains/runtime#metrics","meta":"development · counter · {attempt}"},{"type":"metric","id":"aspnetcore.diagnostics.exceptions","text":"Number of exceptions caught by exception handling middleware.","url":"/domains/runtime#metrics","meta":"stable · counter · {exception}"},{"type":"metric","id":"aspnetcore.identity.sign_in.authenticate.duration","text":"The duration of authenticate attempts. The authenticate metrics is recorded by sign in methods such as PasswordSignInAsync and TwoFactorSignInAsync.","url":"/domains/runtime#metrics","meta":"development · histogram · s"},{"type":"metric","id":"aspnetcore.identity.sign_in.check_password_attempts","text":"The total number of check password attempts. Checks that the account is in a state that can log in and that the password is valid using the UserManager.CheckPa…","url":"/domains/runtime#metrics","meta":"development · counter · {attempt}"},{"type":"metric","id":"aspnetcore.identity.sign_in.sign_ins","text":"The total number of calls to sign in user principals.","url":"/domains/runtime#metrics","meta":"development · counter · {sign_in}"},{"type":"metric","id":"aspnetcore.identity.sign_in.sign_outs","text":"The total number of calls to sign out user principals.","url":"/domains/runtime#metrics","meta":"development · counter · {sign_out}"},{"type":"metric","id":"aspnetcore.identity.sign_in.two_factor_clients_forgotten","text":"The total number of two factor clients forgotten.","url":"/domains/runtime#metrics","meta":"development · counter · {client}"},{"type":"metric","id":"aspnetcore.identity.sign_in.two_factor_clients_remembered","text":"The total number of two factor clients remembered.","url":"/domains/runtime#metrics","meta":"development · counter · {client}"},{"type":"metric","id":"aspnetcore.identity.user.check_password_attempts","text":"The number of check password attempts. Only checks whether the password is valid and not whether the user account is in a state that can log in.","url":"/domains/runtime#metrics","meta":"development · counter · {attempt}"},{"type":"metric","id":"aspnetcore.identity.user.create.duration","text":"The duration of user creation operations.","url":"/domains/runtime#metrics","meta":"development · histogram · s"},{"type":"metric","id":"aspnetcore.identity.user.delete.duration","text":"The duration of user deletion operations.","url":"/domains/runtime#metrics","meta":"development · histogram · s"},{"type":"metric","id":"aspnetcore.identity.user.generated_tokens","text":"The total number of token generations.","url":"/domains/runtime#metrics","meta":"development · counter · {count}"},{"type":"metric","id":"aspnetcore.identity.user.update.duration","text":"The duration of user update operations.","url":"/domains/runtime#metrics","meta":"development · histogram · s"},{"type":"metric","id":"aspnetcore.identity.user.verify_token_attempts","text":"The total number of token verification attempts.","url":"/domains/runtime#metrics","meta":"development · counter · {attempt}"},{"type":"metric","id":"aspnetcore.memory_pool.allocated","text":"Total number of bytes allocated by the memory pool. Allocation occurs when a memory rental request exceeds the available pooled memory.","url":"/domains/runtime#metrics","meta":"development · counter · By"},{"type":"metric","id":"aspnetcore.memory_pool.evicted","text":"Total number of bytes evicted from the memory pool. Eviction occurs when idle pooled memory is reclaimed.","url":"/domains/runtime#metrics","meta":"development · counter · By"},{"type":"metric","id":"aspnetcore.memory_pool.pooled","text":"Number of bytes currently pooled and available for reuse.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"aspnetcore.memory_pool.rented","text":"Total number of bytes rented from the memory pool.","url":"/domains/runtime#metrics","meta":"development · counter · By"},{"type":"metric","id":"aspnetcore.rate_limiting.active_request_leases","text":"Number of requests that are currently active on the server that hold a rate limiting lease.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {request}"},{"type":"metric","id":"aspnetcore.rate_limiting.queued_requests","text":"Number of requests that are currently queued, waiting to acquire a rate limiting lease.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {request}"},{"type":"metric","id":"aspnetcore.rate_limiting.request_lease.duration","text":"The duration of rate limiting lease held by requests on the server.","url":"/domains/runtime#metrics","meta":"stable · histogram · s"},{"type":"metric","id":"aspnetcore.rate_limiting.request.time_in_queue","text":"The time the request spent in a queue waiting to acquire a rate limiting lease.","url":"/domains/runtime#metrics","meta":"stable · histogram · s"},{"type":"metric","id":"aspnetcore.rate_limiting.requests","text":"Number of requests that tried to acquire a rate limiting lease.","url":"/domains/runtime#metrics","meta":"stable · counter · {request}"},{"type":"metric","id":"aspnetcore.routing.match_attempts","text":"Number of requests that were attempted to be matched to an endpoint.","url":"/domains/runtime#metrics","meta":"stable · counter · {match_attempt}"},{"type":"metric","id":"azure.cosmosdb.client.active_instance.count","text":"Number of active client instances.","url":"/domains/cloud#metrics","meta":"development · updowncounter · {instance}"},{"type":"metric","id":"azure.cosmosdb.client.operation.request_charge","text":"Request units consumed by the operation.","url":"/domains/cloud#metrics","meta":"development · histogram · {request_unit}"},{"type":"metric","id":"cicd.pipeline.run.active","text":"The number of pipeline runs currently active in the system by state.","url":"/domains/cicd#metrics","meta":"release_candidate · updowncounter · {run}"},{"type":"metric","id":"cicd.pipeline.run.duration","text":"Duration of a pipeline run grouped by pipeline, state and result.","url":"/domains/cicd#metrics","meta":"release_candidate · histogram · s"},{"type":"metric","id":"cicd.pipeline.run.errors","text":"The number of errors encountered in pipeline runs (eg. compile, test failures).","url":"/domains/cicd#metrics","meta":"release_candidate · counter · {error}"},{"type":"metric","id":"cicd.system.errors","text":"The number of errors in a component of the CI/CD system (eg. controller, scheduler, agent).","url":"/domains/cicd#metrics","meta":"release_candidate · counter · {error}"},{"type":"metric","id":"cicd.worker.count","text":"The number of workers on the CI/CD system by state.","url":"/domains/cicd#metrics","meta":"release_candidate · updowncounter · {worker}"},{"type":"metric","id":"container.cpu.time","text":"Total CPU time consumed.","url":"/domains/kubernetes#metrics","meta":"release_candidate · counter · s"},{"type":"metric","id":"container.cpu.usage","text":"Container's CPU usage, measured in CPUs. Range from 0 to the number of allocatable CPUs.","url":"/domains/kubernetes#metrics","meta":"development · gauge · {cpu}"},{"type":"metric","id":"container.disk.io","text":"Disk bytes for the container.","url":"/domains/kubernetes#metrics","meta":"development · counter · By"},{"type":"metric","id":"container.filesystem.available","text":"Container filesystem available bytes.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"container.filesystem.capacity","text":"Container filesystem capacity.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"container.filesystem.usage","text":"Container filesystem usage.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"container.memory.available","text":"Container memory available.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"container.memory.paging.faults","text":"Deprecated, use container.paging.faults instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · counter · {fault}"},{"type":"metric","id":"container.memory.rss","text":"Container memory RSS.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"container.memory.usage","text":"Memory usage of the container.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"container.memory.working_set","text":"Container memory working set.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"container.network.io","text":"Network bytes for the container.","url":"/domains/kubernetes#metrics","meta":"development · counter · By"},{"type":"metric","id":"container.paging.faults","text":"Container memory paging faults.","url":"/domains/kubernetes#metrics","meta":"development · counter · {fault}"},{"type":"metric","id":"container.uptime","text":"The time the container has been running.","url":"/domains/kubernetes#metrics","meta":"development · gauge · s"},{"type":"metric","id":"cpu.frequency","text":"Deprecated. Use system.cpu.frequency instead.","url":"/domains/infrastructure#metrics","meta":"deprecated · gauge · {Hz}"},{"type":"metric","id":"cpu.time","text":"Deprecated. Use system.cpu.time instead.","url":"/domains/infrastructure#metrics","meta":"deprecated · counter · s"},{"type":"metric","id":"cpu.utilization","text":"Deprecated. Use system.cpu.utilization instead.","url":"/domains/infrastructure#metrics","meta":"deprecated · gauge · 1"},{"type":"metric","id":"cpython.gc.collected_objects","text":"The total number of objects collected inside a generation since interpreter start.","url":"/domains/runtime#metrics","meta":"development · counter · {object}"},{"type":"metric","id":"cpython.gc.collections","text":"The number of times a generation was collected since interpreter start.","url":"/domains/runtime#metrics","meta":"development · counter · {collection}"},{"type":"metric","id":"cpython.gc.uncollectable_objects","text":"The total number of objects which were found to be uncollectable inside a generation since interpreter start.","url":"/domains/runtime#metrics","meta":"development · counter · {object}"},{"type":"metric","id":"db.client.connection.count","text":"The number of connections that are currently in state described by the state attribute.","url":"/domains/database#metrics","meta":"development · updowncounter · {connection}"},{"type":"metric","id":"db.client.connection.create_time","text":"The time it took to create a new connection.","url":"/domains/database#metrics","meta":"development · histogram · s"},{"type":"metric","id":"db.client.connection.idle.max","text":"The maximum number of idle open connections allowed.","url":"/domains/database#metrics","meta":"development · updowncounter · {connection}"},{"type":"metric","id":"db.client.connection.idle.min","text":"The minimum number of idle open connections allowed.","url":"/domains/database#metrics","meta":"development · updowncounter · {connection}"},{"type":"metric","id":"db.client.connection.max","text":"The maximum number of open connections allowed.","url":"/domains/database#metrics","meta":"development · updowncounter · {connection}"},{"type":"metric","id":"db.client.connection.pending_requests","text":"The number of current pending requests for an open connection.","url":"/domains/database#metrics","meta":"development · updowncounter · {request}"},{"type":"metric","id":"db.client.connection.timeouts","text":"The number of connection timeouts that have occurred trying to obtain a connection from the pool.","url":"/domains/database#metrics","meta":"development · counter · {timeout}"},{"type":"metric","id":"db.client.connection.use_time","text":"The time between borrowing a connection and returning it to the pool.","url":"/domains/database#metrics","meta":"development · histogram · s"},{"type":"metric","id":"db.client.connection.wait_time","text":"The time it took to obtain an open connection from the pool.","url":"/domains/database#metrics","meta":"development · histogram · s"},{"type":"metric","id":"db.client.connections.create_time","text":"Deprecated, use db.client.connection.create_time instead. Note: the unit also changed from ms to s.","url":"/domains/database#metrics","meta":"deprecated · histogram · ms"},{"type":"metric","id":"db.client.connections.idle.max","text":"Deprecated, use db.client.connection.idle.max instead.","url":"/domains/database#metrics","meta":"deprecated · updowncounter · {connection}"},{"type":"metric","id":"db.client.connections.idle.min","text":"Deprecated, use db.client.connection.idle.min instead.","url":"/domains/database#metrics","meta":"deprecated · updowncounter · {connection}"},{"type":"metric","id":"db.client.connections.max","text":"Deprecated, use db.client.connection.max instead.","url":"/domains/database#metrics","meta":"deprecated · updowncounter · {connection}"},{"type":"metric","id":"db.client.connections.pending_requests","text":"Deprecated, use db.client.connection.pending_requests instead.","url":"/domains/database#metrics","meta":"deprecated · updowncounter · {request}"},{"type":"metric","id":"db.client.connections.timeouts","text":"Deprecated, use db.client.connection.timeouts instead.","url":"/domains/database#metrics","meta":"deprecated · counter · {timeout}"},{"type":"metric","id":"db.client.connections.usage","text":"Deprecated, use db.client.connection.count instead.","url":"/domains/database#metrics","meta":"deprecated · updowncounter · {connection}"},{"type":"metric","id":"db.client.connections.use_time","text":"Deprecated, use db.client.connection.use_time instead. Note: the unit also changed from ms to s.","url":"/domains/database#metrics","meta":"deprecated · histogram · ms"},{"type":"metric","id":"db.client.connections.wait_time","text":"Deprecated, use db.client.connection.wait_time instead. Note: the unit also changed from ms to s.","url":"/domains/database#metrics","meta":"deprecated · histogram · ms"},{"type":"metric","id":"db.client.cosmosdb.active_instance.count","text":"Deprecated, use azure.cosmosdb.client.active_instance.count instead.","url":"/domains/database#metrics","meta":"deprecated · updowncounter · {instance}"},{"type":"metric","id":"db.client.cosmosdb.operation.request_charge","text":"Deprecated, use azure.cosmosdb.client.operation.request_charge instead.","url":"/domains/database#metrics","meta":"deprecated · histogram · {request_unit}"},{"type":"metric","id":"db.client.operation.duration","text":"Duration of database client operations.","url":"/domains/database#metrics","meta":"stable · histogram · s"},{"type":"metric","id":"db.client.response.returned_rows","text":"The actual number of records returned by the database operation.","url":"/domains/database#metrics","meta":"development · histogram · {row}"},{"type":"metric","id":"dns.lookup.duration","text":"Measures the time taken to perform a DNS lookup.","url":"/domains/network#metrics","meta":"development · histogram · s"},{"type":"metric","id":"dotnet.assembly.count","text":"The number of .NET assemblies that are currently loaded.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {assembly}"},{"type":"metric","id":"dotnet.exceptions","text":"The number of exceptions that have been thrown in managed code.","url":"/domains/runtime#metrics","meta":"stable · counter · {exception}"},{"type":"metric","id":"dotnet.gc.collections","text":"The number of garbage collections that have occurred since the process has started.","url":"/domains/runtime#metrics","meta":"stable · counter · {collection}"},{"type":"metric","id":"dotnet.gc.heap.total_allocated","text":"The _approximate_ number of bytes allocated on the managed GC heap since the process has started. The returned value does not include any native allocations.","url":"/domains/runtime#metrics","meta":"stable · counter · By"},{"type":"metric","id":"dotnet.gc.last_collection.heap.fragmentation.size","text":"The heap fragmentation, as observed during the latest garbage collection.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · By"},{"type":"metric","id":"dotnet.gc.last_collection.heap.size","text":"The managed GC heap size (including fragmentation), as observed during the latest garbage collection.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · By"},{"type":"metric","id":"dotnet.gc.last_collection.memory.committed_size","text":"The amount of committed virtual memory in use by the .NET GC, as observed during the latest garbage collection.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · By"},{"type":"metric","id":"dotnet.gc.pause.time","text":"The total amount of time paused in GC since the process has started.","url":"/domains/runtime#metrics","meta":"stable · counter · s"},{"type":"metric","id":"dotnet.jit.compilation.time","text":"The amount of time the JIT compiler has spent compiling methods since the process has started.","url":"/domains/runtime#metrics","meta":"stable · counter · s"},{"type":"metric","id":"dotnet.jit.compiled_il.size","text":"Count of bytes of intermediate language that have been compiled since the process has started.","url":"/domains/runtime#metrics","meta":"stable · counter · By"},{"type":"metric","id":"dotnet.jit.compiled_methods","text":"The number of times the JIT compiler (re)compiled methods since the process has started.","url":"/domains/runtime#metrics","meta":"stable · counter · {method}"},{"type":"metric","id":"dotnet.monitor.lock_contentions","text":"The number of times there was contention when trying to acquire a monitor lock since the process has started.","url":"/domains/runtime#metrics","meta":"stable · counter · {contention}"},{"type":"metric","id":"dotnet.process.cpu.count","text":"The number of processors available to the process.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {cpu}"},{"type":"metric","id":"dotnet.process.cpu.time","text":"CPU time used by the process.","url":"/domains/runtime#metrics","meta":"stable · counter · s"},{"type":"metric","id":"dotnet.process.memory.working_set","text":"The number of bytes of physical memory mapped to the process context.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · By"},{"type":"metric","id":"dotnet.thread_pool.queue.length","text":"The number of work items that are currently queued to be processed by the thread pool.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {work_item}"},{"type":"metric","id":"dotnet.thread_pool.thread.count","text":"The number of thread pool threads that currently exist.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {thread}"},{"type":"metric","id":"dotnet.thread_pool.work_item.count","text":"The number of work items that the thread pool has completed since the process has started.","url":"/domains/runtime#metrics","meta":"stable · counter · {work_item}"},{"type":"metric","id":"dotnet.timer.count","text":"The number of timer instances that are currently active.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {timer}"},{"type":"metric","id":"faas.coldstarts","text":"Number of invocation cold starts.","url":"/domains/cloud#metrics","meta":"development · counter · {coldstart}"},{"type":"metric","id":"faas.cpu_usage","text":"Distribution of CPU usage per invocation.","url":"/domains/cloud#metrics","meta":"development · histogram · s"},{"type":"metric","id":"faas.errors","text":"Number of invocation errors.","url":"/domains/cloud#metrics","meta":"development · counter · {error}"},{"type":"metric","id":"faas.init_duration","text":"Measures the duration of the function's initialization, such as a cold start.","url":"/domains/cloud#metrics","meta":"development · histogram · s"},{"type":"metric","id":"faas.invocations","text":"Number of successful invocations.","url":"/domains/cloud#metrics","meta":"development · counter · {invocation}"},{"type":"metric","id":"faas.invoke_duration","text":"Measures the duration of the function's logic execution.","url":"/domains/cloud#metrics","meta":"development · histogram · s"},{"type":"metric","id":"faas.mem_usage","text":"Distribution of max memory usage per invocation.","url":"/domains/cloud#metrics","meta":"development · histogram · By"},{"type":"metric","id":"faas.net_io","text":"Distribution of net I/O usage per invocation.","url":"/domains/cloud#metrics","meta":"development · histogram · By"},{"type":"metric","id":"faas.timeouts","text":"Number of invocation timeouts.","url":"/domains/cloud#metrics","meta":"development · counter · {timeout}"},{"type":"metric","id":"gen_ai.client.operation.duration","text":"GenAI operation duration.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"gen_ai.client.operation.time_per_output_chunk","text":"Time per output chunk, recorded for each chunk received after the first one, measured as the time elapsed from the end of the previous chunk to the end of the …","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"gen_ai.client.operation.time_to_first_chunk","text":"Time to receive the first chunk, measured from when the client issues the generation request to when the first chunk is received in the response stream.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"gen_ai.client.token.usage","text":"Number of input and output tokens used.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · {token}"},{"type":"metric","id":"gen_ai.server.request.duration","text":"Generative AI server request duration such as time-to-last byte or last output token.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"gen_ai.server.time_per_output_token","text":"Time per output token generated after the first token for successful responses.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"gen_ai.server.time_to_first_token","text":"Time to generate first token for successful responses.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"go.config.gogc","text":"Heap size target percentage configured by the user, otherwise 100.","url":"/domains/runtime#metrics","meta":"development · updowncounter · %"},{"type":"metric","id":"go.cpu.time","text":"Estimated CPU time spent by the Go runtime.","url":"/domains/runtime#metrics","meta":"development · counter · s"},{"type":"metric","id":"go.goroutine.count","text":"Count of live goroutines.","url":"/domains/runtime#metrics","meta":"development · updowncounter · {goroutine}"},{"type":"metric","id":"go.memory.allocated","text":"Memory allocated to the heap by the application.","url":"/domains/runtime#metrics","meta":"development · counter · By"},{"type":"metric","id":"go.memory.allocations","text":"Count of allocations to the heap by the application.","url":"/domains/runtime#metrics","meta":"development · counter · {allocation}"},{"type":"metric","id":"go.memory.gc.cycles","text":"Number of completed GC cycles.","url":"/domains/runtime#metrics","meta":"development · counter · {gc_cycle}"},{"type":"metric","id":"go.memory.gc.goal","text":"Heap size target for the end of the GC cycle.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"go.memory.gc.pause.duration","text":"Distribution of individual GC-related stop-the-world pause latencies. This is the time from deciding to stop the world until the world is started again.","url":"/domains/runtime#metrics","meta":"development · histogram · s"},{"type":"metric","id":"go.memory.limit","text":"Go runtime memory limit configured by the user, if a limit exists.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"go.memory.used","text":"Memory used by the Go runtime.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"go.processor.limit","text":"The number of OS threads that can execute user-level Go code simultaneously.","url":"/domains/runtime#metrics","meta":"development · updowncounter · {thread}"},{"type":"metric","id":"go.schedule.duration","text":"The time goroutines have spent in the scheduler in a runnable state before actually running.","url":"/domains/runtime#metrics","meta":"development · histogram · s"},{"type":"metric","id":"http.client.active_requests","text":"Number of active HTTP requests.","url":"/domains/http#metrics","meta":"development · updowncounter · {request}"},{"type":"metric","id":"http.client.connection.duration","text":"The duration of the successfully established outbound HTTP connections.","url":"/domains/http#metrics","meta":"development · histogram · s"},{"type":"metric","id":"http.client.open_connections","text":"Number of outbound HTTP connections that are currently active or idle on the client.","url":"/domains/http#metrics","meta":"development · updowncounter · {connection}"},{"type":"metric","id":"http.client.request.body.size","text":"Size of HTTP client request bodies.","url":"/domains/http#metrics","meta":"development · histogram · By"},{"type":"metric","id":"http.client.request.duration","text":"Duration of HTTP client requests.","url":"/domains/http#metrics","meta":"stable · histogram · s"},{"type":"metric","id":"http.client.response.body.size","text":"Size of HTTP client response bodies.","url":"/domains/http#metrics","meta":"development · histogram · By"},{"type":"metric","id":"http.server.active_requests","text":"Number of active HTTP server requests.","url":"/domains/http#metrics","meta":"development · updowncounter · {request}"},{"type":"metric","id":"http.server.request.body.size","text":"Size of HTTP server request bodies.","url":"/domains/http#metrics","meta":"development · histogram · By"},{"type":"metric","id":"http.server.request.duration","text":"Duration of HTTP server requests.","url":"/domains/http#metrics","meta":"stable · histogram · s"},{"type":"metric","id":"http.server.response.body.size","text":"Size of HTTP server response bodies.","url":"/domains/http#metrics","meta":"development · histogram · By"},{"type":"metric","id":"hw.battery.charge","text":"Remaining fraction of battery charge.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.battery.charge.limit","text":"Lower limit of battery charge fraction to ensure proper operation.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.battery.time_left","text":"Time left before battery is completely charged or discharged.","url":"/domains/infrastructure#metrics","meta":"development · gauge · s"},{"type":"metric","id":"hw.cpu.speed","text":"CPU current frequency.","url":"/domains/infrastructure#metrics","meta":"development · gauge · Hz"},{"type":"metric","id":"hw.cpu.speed.limit","text":"CPU maximum frequency.","url":"/domains/infrastructure#metrics","meta":"development · gauge · Hz"},{"type":"metric","id":"hw.energy","text":"Energy consumed by the component.","url":"/domains/infrastructure#metrics","meta":"development · counter · J"},{"type":"metric","id":"hw.errors","text":"Number of errors encountered by the component.","url":"/domains/infrastructure#metrics","meta":"development · counter · {error}"},{"type":"metric","id":"hw.fan.speed","text":"Fan speed in revolutions per minute.","url":"/domains/infrastructure#metrics","meta":"development · gauge · rpm"},{"type":"metric","id":"hw.fan.speed_ratio","text":"Fan speed expressed as a fraction of its maximum speed.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.fan.speed.limit","text":"Speed limit in rpm.","url":"/domains/infrastructure#metrics","meta":"development · gauge · rpm"},{"type":"metric","id":"hw.gpu.io","text":"Received and transmitted bytes by the GPU.","url":"/domains/infrastructure#metrics","meta":"development · counter · By"},{"type":"metric","id":"hw.gpu.memory.limit","text":"Size of the GPU memory.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"hw.gpu.memory.usage","text":"GPU memory used.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"hw.gpu.memory.utilization","text":"Fraction of GPU memory used.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.gpu.utilization","text":"Fraction of time spent in a specific task.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.host.ambient_temperature","text":"Ambient (external) temperature of the physical host.","url":"/domains/infrastructure#metrics","meta":"development · gauge · Cel"},{"type":"metric","id":"hw.host.energy","text":"Total energy consumed by the entire physical host, in joules.","url":"/domains/infrastructure#metrics","meta":"development · counter · J"},{"type":"metric","id":"hw.host.heating_margin","text":"By how many degrees Celsius the temperature of the physical host can be increased, before reaching a warning threshold on one of the internal sensors.","url":"/domains/infrastructure#metrics","meta":"development · gauge · Cel"},{"type":"metric","id":"hw.host.power","text":"Instantaneous power consumed by the entire physical host in Watts (hw.host.energy is preferred).","url":"/domains/infrastructure#metrics","meta":"development · gauge · W"},{"type":"metric","id":"hw.logical_disk.limit","text":"Size of the logical disk.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"hw.logical_disk.usage","text":"Logical disk space usage.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"hw.logical_disk.utilization","text":"Logical disk space utilization as a fraction.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.memory.size","text":"Size of the memory module.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"hw.network.bandwidth.limit","text":"Link speed.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By/s"},{"type":"metric","id":"hw.network.bandwidth.utilization","text":"Utilization of the network bandwidth as a fraction.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.network.io","text":"Received and transmitted network traffic in bytes.","url":"/domains/infrastructure#metrics","meta":"development · counter · By"},{"type":"metric","id":"hw.network.packets","text":"Received and transmitted network traffic in packets (or frames).","url":"/domains/infrastructure#metrics","meta":"development · counter · {packet}"},{"type":"metric","id":"hw.network.up","text":"Link status: 1 (up) or 0 (down).","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · 1"},{"type":"metric","id":"hw.physical_disk.endurance_utilization","text":"Endurance remaining for this SSD disk.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.physical_disk.size","text":"Size of the disk.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"hw.physical_disk.smart","text":"Value of the corresponding S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) attribute.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.power","text":"Instantaneous power consumed by the component.","url":"/domains/infrastructure#metrics","meta":"development · gauge · W"},{"type":"metric","id":"hw.power_supply.limit","text":"Maximum power output of the power supply.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · W"},{"type":"metric","id":"hw.power_supply.usage","text":"Current power output of the power supply.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · W"},{"type":"metric","id":"hw.power_supply.utilization","text":"Utilization of the power supply as a fraction of its maximum output.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"hw.status","text":"Operational status: 1 (true) or 0 (false) for each of the possible states.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · 1"},{"type":"metric","id":"hw.tape_drive.operations","text":"Operations performed by the tape drive.","url":"/domains/infrastructure#metrics","meta":"development · counter · {operation}"},{"type":"metric","id":"hw.temperature","text":"Temperature in degrees Celsius.","url":"/domains/infrastructure#metrics","meta":"development · gauge · Cel"},{"type":"metric","id":"hw.temperature.limit","text":"Temperature limit in degrees Celsius.","url":"/domains/infrastructure#metrics","meta":"development · gauge · Cel"},{"type":"metric","id":"hw.voltage","text":"Voltage measured by the sensor.","url":"/domains/infrastructure#metrics","meta":"development · gauge · V"},{"type":"metric","id":"hw.voltage.limit","text":"Voltage limit in Volts.","url":"/domains/infrastructure#metrics","meta":"development · gauge · V"},{"type":"metric","id":"hw.voltage.nominal","text":"Nominal (expected) voltage.","url":"/domains/infrastructure#metrics","meta":"development · gauge · V"},{"type":"metric","id":"jvm.buffer.count","text":"Number of buffers in the pool.","url":"/domains/runtime#metrics","meta":"development · updowncounter · {buffer}"},{"type":"metric","id":"jvm.buffer.memory.limit","text":"Measure of total memory capacity of buffers.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"jvm.buffer.memory.usage","text":"Deprecated, use jvm.buffer.memory.used instead.","url":"/domains/runtime#metrics","meta":"deprecated · updowncounter · By"},{"type":"metric","id":"jvm.buffer.memory.used","text":"Measure of memory used by buffers.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"jvm.class.count","text":"Number of classes currently loaded.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {class}"},{"type":"metric","id":"jvm.class.loaded","text":"Number of classes loaded since JVM start.","url":"/domains/runtime#metrics","meta":"stable · counter · {class}"},{"type":"metric","id":"jvm.class.unloaded","text":"Number of classes unloaded since JVM start.","url":"/domains/runtime#metrics","meta":"stable · counter · {class}"},{"type":"metric","id":"jvm.cpu.count","text":"Number of processors available to the Java virtual machine.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {cpu}"},{"type":"metric","id":"jvm.cpu.recent_utilization","text":"Recent CPU utilization for the process as reported by the JVM.","url":"/domains/runtime#metrics","meta":"stable · gauge · 1"},{"type":"metric","id":"jvm.cpu.time","text":"CPU time used by the process as reported by the JVM.","url":"/domains/runtime#metrics","meta":"stable · counter · s"},{"type":"metric","id":"jvm.file_descriptor.count","text":"Number of open file descriptors as reported by the JVM.","url":"/domains/runtime#metrics","meta":"development · updowncounter · {file_descriptor}"},{"type":"metric","id":"jvm.file_descriptor.limit","text":"Measure of max open file descriptors as reported by the JVM.","url":"/domains/runtime#metrics","meta":"development · updowncounter · {file_descriptor}"},{"type":"metric","id":"jvm.gc.duration","text":"Duration of JVM garbage collection actions.","url":"/domains/runtime#metrics","meta":"stable · histogram · s"},{"type":"metric","id":"jvm.memory.committed","text":"Measure of memory committed.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · By"},{"type":"metric","id":"jvm.memory.init","text":"Measure of initial memory requested.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"jvm.memory.limit","text":"Measure of max obtainable memory.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · By"},{"type":"metric","id":"jvm.memory.used","text":"Measure of memory used.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · By"},{"type":"metric","id":"jvm.memory.used_after_last_gc","text":"Measure of memory used, as measured after the most recent garbage collection event on this pool.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · By"},{"type":"metric","id":"jvm.system.cpu.load_1m","text":"Average CPU load of the whole system for the last minute as reported by the JVM.","url":"/domains/runtime#metrics","meta":"development · gauge · {run_queue_item}"},{"type":"metric","id":"jvm.system.cpu.utilization","text":"Recent CPU utilization for the whole system as reported by the JVM.","url":"/domains/runtime#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"jvm.thread.count","text":"Number of executing platform threads.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {thread}"},{"type":"metric","id":"k8s.container.cpu.limit","text":"Deprecated, use k8s.container.cpu.limit.desired and k8s.container.cpu.limit.current instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {cpu}"},{"type":"metric","id":"k8s.container.cpu.limit_utilization","text":"Deprecated, use k8s.container.cpu.limit.utilization instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · gauge · 1"},{"type":"metric","id":"k8s.container.cpu.limit.current","text":"Maximum CPU resource limit currently configured for a running container.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"k8s.container.cpu.limit.desired","text":"Maximum CPU resource limit as defined by the container spec.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"k8s.container.cpu.limit.utilization","text":"The ratio of container CPU usage to its current CPU limit.","url":"/domains/kubernetes#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"k8s.container.cpu.request","text":"Deprecated, use k8s.container.cpu.request.desired and k8s.container.cpu.request.current instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {cpu}"},{"type":"metric","id":"k8s.container.cpu.request_utilization","text":"Deprecated, use k8s.container.cpu.request.utilization instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · gauge · 1"},{"type":"metric","id":"k8s.container.cpu.request.current","text":"CPU resource requested currently configured for a running container.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"k8s.container.cpu.request.desired","text":"CPU resource requested as defined by the container spec.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"k8s.container.cpu.request.utilization","text":"The ratio of container CPU usage to its current CPU request.","url":"/domains/kubernetes#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"k8s.container.ephemeral_storage.limit","text":"Maximum ephemeral storage resource limit set for the container.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.container.ephemeral_storage.request","text":"Ephemeral storage resource requested for the container.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.container.ephemeral_storage.usage","text":"The ephemeral storage used by a container.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.container.memory.limit","text":"Deprecated, use k8s.container.memory.limit.desired and k8s.container.memory.limit.current instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · By"},{"type":"metric","id":"k8s.container.memory.limit.current","text":"Maximum memory resource limit currently configured for a running container.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.container.memory.limit.desired","text":"Maximum memory resource limit as defined by the container spec.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.container.memory.request","text":"Deprecated, use k8s.container.memory.request.desired and k8s.container.memory.request.current instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · By"},{"type":"metric","id":"k8s.container.memory.request.current","text":"Memory resource request currently configured for a running container.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.container.memory.request.desired","text":"Memory resource requested as defined by the container spec.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.container.ready","text":"Indicates whether the container is currently marked as ready to accept traffic, based on its readiness probe (1 = ready, 0 = not ready).","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {container}"},{"type":"metric","id":"k8s.container.restart.count","text":"Describes how many times the container has restarted (since the last counter reset).","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {restart}"},{"type":"metric","id":"k8s.container.status.reason","text":"Describes the number of K8s containers that are currently in a state for a given reason.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {container}"},{"type":"metric","id":"k8s.container.status.state","text":"Describes the number of K8s containers that are currently in a given state.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {container}"},{"type":"metric","id":"k8s.container.storage.limit","text":"Maximum storage resource limit set for the container.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.container.storage.request","text":"Storage resource requested for the container.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.cronjob.active_jobs","text":"Deprecated, use k8s.cronjob.job.active instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {job}"},{"type":"metric","id":"k8s.cronjob.job.active","text":"The number of actively running jobs for a cronjob.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {job}"},{"type":"metric","id":"k8s.daemonset.current_scheduled_nodes","text":"Deprecated, use k8s.daemonset.node.current_scheduled instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {node}"},{"type":"metric","id":"k8s.daemonset.desired_scheduled_nodes","text":"Deprecated, use k8s.daemonset.node.desired_scheduled instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {node}"},{"type":"metric","id":"k8s.daemonset.misscheduled_nodes","text":"Deprecated, use k8s.daemonset.node.misscheduled instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {node}"},{"type":"metric","id":"k8s.daemonset.node.current_scheduled","text":"Number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {node}"},{"type":"metric","id":"k8s.daemonset.node.desired_scheduled","text":"Number of nodes that should be running the daemon pod (including nodes currently running the daemon pod).","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {node}"},{"type":"metric","id":"k8s.daemonset.node.misscheduled","text":"Number of nodes that are running the daemon pod, but are not supposed to run the daemon pod.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {node}"},{"type":"metric","id":"k8s.daemonset.node.ready","text":"Number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {node}"},{"type":"metric","id":"k8s.daemonset.ready_nodes","text":"Deprecated, use k8s.daemonset.node.ready instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {node}"},{"type":"metric","id":"k8s.deployment.available_pods","text":"Deprecated, use k8s.deployment.pod.available instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.deployment.desired_pods","text":"Deprecated, use k8s.deployment.pod.desired instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.deployment.pod.available","text":"Total number of available replica pods (ready for at least minReadySeconds) targeted by this deployment.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.deployment.pod.desired","text":"Number of desired replica pods in this deployment.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.hpa.current_pods","text":"Deprecated, use k8s.hpa.pod.current instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.hpa.desired_pods","text":"Deprecated, use k8s.hpa.pod.desired instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.hpa.max_pods","text":"Deprecated, use k8s.hpa.pod.max instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.hpa.metric.target.cpu.average_utilization","text":"Target average utilization, in percentage, for CPU resource in HPA config.","url":"/domains/kubernetes#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"k8s.hpa.metric.target.cpu.average_value","text":"Target average value for CPU resource in HPA config.","url":"/domains/kubernetes#metrics","meta":"development · gauge · {cpu}"},{"type":"metric","id":"k8s.hpa.metric.target.cpu.value","text":"Target value for CPU resource in HPA config.","url":"/domains/kubernetes#metrics","meta":"development · gauge · {cpu}"},{"type":"metric","id":"k8s.hpa.min_pods","text":"Deprecated, use k8s.hpa.pod.min instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.hpa.pod.current","text":"Current number of replica pods managed by this horizontal pod autoscaler, as last seen by the autoscaler.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.hpa.pod.desired","text":"Desired number of replica pods managed by this horizontal pod autoscaler, as last calculated by the autoscaler.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.hpa.pod.max","text":"The upper limit for the number of replica pods to which the autoscaler can scale up.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.hpa.pod.min","text":"The lower limit for the number of replica pods to which the autoscaler can scale down.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.active_pods","text":"Deprecated, use k8s.job.pod.active instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.desired_successful_pods","text":"Deprecated, use k8s.job.pod.desired_successful instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.failed_pods","text":"Deprecated, use k8s.job.pod.failed instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.max_parallel_pods","text":"Deprecated, use k8s.job.pod.max_parallel instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.pod.active","text":"The number of pending and actively running pods for a job.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.pod.desired_successful","text":"The desired number of successfully finished pods the job should be run with.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.pod.failed","text":"The number of pods which reached phase Failed for a job.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.pod.max_parallel","text":"The max desired number of pods the job should run at any given time.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.pod.successful","text":"The number of pods which reached phase Succeeded for a job.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.job.successful_pods","text":"Deprecated, use k8s.job.pod.successful instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.namespace.phase","text":"Describes number of K8s namespaces that are currently in a given phase.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {namespace}"},{"type":"metric","id":"k8s.node.allocatable.cpu","text":"Deprecated, use k8s.node.cpu.allocatable instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {cpu}"},{"type":"metric","id":"k8s.node.allocatable.ephemeral_storage","text":"Deprecated, use k8s.node.ephemeral_storage.allocatable instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · By"},{"type":"metric","id":"k8s.node.allocatable.memory","text":"Deprecated, use k8s.node.memory.allocatable instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · By"},{"type":"metric","id":"k8s.node.allocatable.pods","text":"Deprecated, use k8s.node.pod.allocatable instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.node.condition.status","text":"Describes the condition of a particular Node.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {node}"},{"type":"metric","id":"k8s.node.cpu.allocatable","text":"Amount of CPU allocatable on the node.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"k8s.node.cpu.time","text":"Total CPU time consumed.","url":"/domains/kubernetes#metrics","meta":"release_candidate · counter · s"},{"type":"metric","id":"k8s.node.cpu.usage","text":"Node's CPU usage, measured in CPUs. Range from 0 to the number of allocatable CPUs.","url":"/domains/kubernetes#metrics","meta":"development · gauge · {cpu}"},{"type":"metric","id":"k8s.node.ephemeral_storage.allocatable","text":"Amount of ephemeral-storage allocatable on the node.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.node.filesystem.available","text":"Node filesystem available bytes.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.node.filesystem.capacity","text":"Node filesystem capacity.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.node.filesystem.inode.count","text":"The total inodes in the node's root filesystem.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {inode}"},{"type":"metric","id":"k8s.node.filesystem.inode.free","text":"The free inodes in the node's root filesystem.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {inode}"},{"type":"metric","id":"k8s.node.filesystem.usage","text":"Node filesystem usage.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.node.memory.allocatable","text":"Amount of memory allocatable on the node.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.node.memory.available","text":"Node memory available.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"k8s.node.memory.paging.faults","text":"Deprecated, use k8s.node.paging.faults instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · counter · {fault}"},{"type":"metric","id":"k8s.node.memory.rss","text":"Node memory RSS.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"k8s.node.memory.usage","text":"Memory usage of the Node.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"k8s.node.memory.working_set","text":"Node memory working set.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"k8s.node.network.errors","text":"Node network errors.","url":"/domains/kubernetes#metrics","meta":"development · counter · {error}"},{"type":"metric","id":"k8s.node.network.io","text":"Network bytes for the Node.","url":"/domains/kubernetes#metrics","meta":"development · counter · By"},{"type":"metric","id":"k8s.node.paging.faults","text":"Node memory paging faults.","url":"/domains/kubernetes#metrics","meta":"development · counter · {fault}"},{"type":"metric","id":"k8s.node.pod.allocatable","text":"Amount of pods allocatable on the node.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.node.system_container.cpu.time","text":"Node's system container CPU time.","url":"/domains/kubernetes#metrics","meta":"development · counter · s"},{"type":"metric","id":"k8s.node.system_container.cpu.usage","text":"Node's system container CPU usage, measured in CPUs.","url":"/domains/kubernetes#metrics","meta":"development · gauge · {cpu}"},{"type":"metric","id":"k8s.node.system_container.memory.usage","text":"Node's system container memory usage.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.node.system_container.memory.working_set","text":"The amount of working set memory.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.node.uptime","text":"The time the Node has been running.","url":"/domains/kubernetes#metrics","meta":"development · gauge · s"},{"type":"metric","id":"k8s.persistentvolume.status.phase","text":"Number of PersistentVolumes in a given phase.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {persistentvolume}"},{"type":"metric","id":"k8s.persistentvolume.storage.capacity","text":"The storage capacity of the PersistentVolume.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.persistentvolumeclaim.status.phase","text":"Number of PersistentVolumeClaims in a given phase.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {persistentvolumeclaim}"},{"type":"metric","id":"k8s.persistentvolumeclaim.storage.capacity","text":"The actual storage capacity provisioned for the PersistentVolumeClaim.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.persistentvolumeclaim.storage.request","text":"The storage requested by the PersistentVolumeClaim.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.pod.cpu.time","text":"Total CPU time consumed.","url":"/domains/kubernetes#metrics","meta":"release_candidate · counter · s"},{"type":"metric","id":"k8s.pod.cpu.usage","text":"Pod's CPU usage, measured in CPUs. Range from 0 to the number of allocatable CPUs.","url":"/domains/kubernetes#metrics","meta":"development · gauge · {cpu}"},{"type":"metric","id":"k8s.pod.filesystem.available","text":"Pod filesystem available bytes.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.pod.filesystem.capacity","text":"Pod filesystem capacity.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.pod.filesystem.usage","text":"Pod filesystem usage.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.pod.memory.available","text":"Pod memory available.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"k8s.pod.memory.paging.faults","text":"Deprecated, use k8s.pod.paging.faults instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · counter · {fault}"},{"type":"metric","id":"k8s.pod.memory.rss","text":"Pod memory RSS.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"k8s.pod.memory.usage","text":"Memory usage of the Pod.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"k8s.pod.memory.working_set","text":"Pod memory working set.","url":"/domains/kubernetes#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"k8s.pod.network.errors","text":"Pod network errors.","url":"/domains/kubernetes#metrics","meta":"development · counter · {error}"},{"type":"metric","id":"k8s.pod.network.io","text":"Network bytes for the Pod.","url":"/domains/kubernetes#metrics","meta":"development · counter · By"},{"type":"metric","id":"k8s.pod.paging.faults","text":"Pod memory paging faults.","url":"/domains/kubernetes#metrics","meta":"development · counter · {fault}"},{"type":"metric","id":"k8s.pod.status.phase","text":"Describes number of K8s Pods that are currently in a given phase.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.pod.status.reason","text":"Describes the number of K8s Pods that are currently in a state for a given reason.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.pod.uptime","text":"The time the Pod has been running.","url":"/domains/kubernetes#metrics","meta":"development · gauge · s"},{"type":"metric","id":"k8s.pod.volume.available","text":"Pod volume storage space available.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.pod.volume.capacity","text":"Pod volume total capacity.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.pod.volume.inode.count","text":"The total inodes in the filesystem of the Pod's volume.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {inode}"},{"type":"metric","id":"k8s.pod.volume.inode.free","text":"The free inodes in the filesystem of the Pod's volume.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {inode}"},{"type":"metric","id":"k8s.pod.volume.inode.used","text":"The inodes used by the filesystem of the Pod's volume.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {inode}"},{"type":"metric","id":"k8s.pod.volume.usage","text":"Pod volume usage.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.replicaset.available_pods","text":"Deprecated, use k8s.replicaset.pod.available instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.replicaset.desired_pods","text":"Deprecated, use k8s.replicaset.pod.desired instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.replicaset.pod.available","text":"Total number of available replica pods (ready for at least minReadySeconds) targeted by this replicaset.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.replicaset.pod.desired","text":"Number of desired replica pods in this replicaset.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.replication_controller.available_pods","text":"Deprecated, use k8s.replicationcontroller.pod.available instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.replication_controller.desired_pods","text":"Deprecated, use k8s.replicationcontroller.pod.desired instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.replicationcontroller.available_pods","text":"Deprecated, use k8s.replicationcontroller.pod.available instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.replicationcontroller.desired_pods","text":"Deprecated, use k8s.replicationcontroller.pod.desired instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.replicationcontroller.pod.available","text":"Total number of available replica pods (ready for at least minReadySeconds) targeted by this replication controller.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.replicationcontroller.pod.desired","text":"Number of desired replica pods in this replication controller.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.resourcequota.cpu.limit.hard","text":"The CPU limits in a specific namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"k8s.resourcequota.cpu.limit.used","text":"The CPU limits in a specific namespace. The value represents the current observed total usage of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"k8s.resourcequota.cpu.request.hard","text":"The CPU requests in a specific namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"k8s.resourcequota.cpu.request.used","text":"The CPU requests in a specific namespace. The value represents the current observed total usage of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"k8s.resourcequota.ephemeral_storage.limit.hard","text":"The sum of local ephemeral storage limits in the namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.resourcequota.ephemeral_storage.limit.used","text":"The sum of local ephemeral storage limits in the namespace. The value represents the current observed total usage of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.resourcequota.ephemeral_storage.request.hard","text":"The sum of local ephemeral storage requests in the namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.resourcequota.ephemeral_storage.request.used","text":"The sum of local ephemeral storage requests in the namespace. The value represents the current observed total usage of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.resourcequota.hugepage_count.request.hard","text":"The huge page requests in a specific namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {hugepage}"},{"type":"metric","id":"k8s.resourcequota.hugepage_count.request.used","text":"The huge page requests in a specific namespace. The value represents the current observed total usage of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {hugepage}"},{"type":"metric","id":"k8s.resourcequota.memory.limit.hard","text":"The memory limits in a specific namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.resourcequota.memory.limit.used","text":"The memory limits in a specific namespace. The value represents the current observed total usage of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.resourcequota.memory.request.hard","text":"The memory requests in a specific namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.resourcequota.memory.request.used","text":"The memory requests in a specific namespace. The value represents the current observed total usage of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.resourcequota.object_count.hard","text":"The object count limits in a specific namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {object}"},{"type":"metric","id":"k8s.resourcequota.object_count.used","text":"The object count limits in a specific namespace. The value represents the current observed total usage of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {object}"},{"type":"metric","id":"k8s.resourcequota.persistentvolumeclaim_count.hard","text":"The total number of PersistentVolumeClaims that can exist in the namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {persistentvolumeclaim}"},{"type":"metric","id":"k8s.resourcequota.persistentvolumeclaim_count.used","text":"The total number of PersistentVolumeClaims that can exist in the namespace. The value represents the current observed total usage of the resource in the namesp…","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {persistentvolumeclaim}"},{"type":"metric","id":"k8s.resourcequota.storage.request.hard","text":"The storage requests in a specific namespace. The value represents the configured quota limit of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.resourcequota.storage.request.used","text":"The storage requests in a specific namespace. The value represents the current observed total usage of the resource in the namespace.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"k8s.service.endpoint.count","text":"Number of endpoints for a service by condition and address type.","url":"/domains/kubernetes#metrics","meta":"development · gauge · {endpoint}"},{"type":"metric","id":"k8s.service.load_balancer.ingress.count","text":"Number of load balancer ingress points (external IPs/hostnames) assigned to the service.","url":"/domains/kubernetes#metrics","meta":"development · gauge · {ingress}"},{"type":"metric","id":"k8s.statefulset.current_pods","text":"Deprecated, use k8s.statefulset.pod.current instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.statefulset.desired_pods","text":"Deprecated, use k8s.statefulset.pod.desired instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.statefulset.pod.current","text":"The number of replica pods created by the statefulset controller from the statefulset version indicated by currentRevision.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.statefulset.pod.desired","text":"Number of desired replica pods in this statefulset.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.statefulset.pod.ready","text":"The number of replica pods created for this statefulset with a Ready Condition.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.statefulset.pod.updated","text":"Number of replica pods created by the statefulset controller from the statefulset version indicated by updateRevision.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {pod}"},{"type":"metric","id":"k8s.statefulset.ready_pods","text":"Deprecated, use k8s.statefulset.pod.ready instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"k8s.statefulset.updated_pods","text":"Deprecated, use k8s.statefulset.pod.updated instead.","url":"/domains/kubernetes#metrics","meta":"deprecated · updowncounter · {pod}"},{"type":"metric","id":"kestrel.active_connections","text":"Number of connections that are currently active on the server.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {connection}"},{"type":"metric","id":"kestrel.active_tls_handshakes","text":"Number of TLS handshakes that are currently in progress on the server.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {handshake}"},{"type":"metric","id":"kestrel.connection.duration","text":"The duration of connections on the server.","url":"/domains/runtime#metrics","meta":"stable · histogram · s"},{"type":"metric","id":"kestrel.queued_connections","text":"Number of connections that are currently queued and are waiting to start.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {connection}"},{"type":"metric","id":"kestrel.queued_requests","text":"Number of HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are currently queued and are waiting to start.","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {request}"},{"type":"metric","id":"kestrel.rejected_connections","text":"Number of connections rejected by the server.","url":"/domains/runtime#metrics","meta":"stable · counter · {connection}"},{"type":"metric","id":"kestrel.tls_handshake.duration","text":"The duration of TLS handshakes on the server.","url":"/domains/runtime#metrics","meta":"stable · histogram · s"},{"type":"metric","id":"kestrel.upgraded_connections","text":"Number of connections that are currently upgraded (WebSockets). .","url":"/domains/runtime#metrics","meta":"stable · updowncounter · {connection}"},{"type":"metric","id":"mcp.client.operation.duration","text":"The duration of the MCP request or notification as observed on the sender from the time it was sent until the response or ack is received.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"mcp.client.session.duration","text":"The duration of the MCP session as observed on the MCP client.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"mcp.server.operation.duration","text":"MCP request or notification duration as observed on the receiver from the time it was received until the result or ack is sent.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"mcp.server.session.duration","text":"The duration of the MCP session as observed on the MCP server.","url":"/domains/gen-ai#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"messaging.client.consumed.messages","text":"Number of messages that were delivered to the application.","url":"/domains/messaging#metrics","meta":"development · counter · {message}"},{"type":"metric","id":"messaging.client.operation.duration","text":"Duration of messaging operation initiated by a producer or consumer client.","url":"/domains/messaging#metrics","meta":"development · histogram · s"},{"type":"metric","id":"messaging.client.published.messages","text":"Deprecated. Use messaging.client.sent.messages instead.","url":"/domains/messaging#metrics","meta":"deprecated · counter · {message}"},{"type":"metric","id":"messaging.client.sent.messages","text":"Number of messages producer attempted to send to the broker.","url":"/domains/messaging#metrics","meta":"development · counter · {message}"},{"type":"metric","id":"messaging.process.duration","text":"Duration of processing operation.","url":"/domains/messaging#metrics","meta":"development · histogram · s"},{"type":"metric","id":"messaging.process.messages","text":"Deprecated. Use messaging.client.consumed.messages instead.","url":"/domains/messaging#metrics","meta":"deprecated · counter · {message}"},{"type":"metric","id":"messaging.publish.duration","text":"Deprecated. Use messaging.client.operation.duration instead.","url":"/domains/messaging#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"messaging.publish.messages","text":"Deprecated. Use messaging.client.sent.messages instead.","url":"/domains/messaging#metrics","meta":"deprecated · counter · {message}"},{"type":"metric","id":"messaging.receive.duration","text":"Deprecated. Use messaging.client.operation.duration instead.","url":"/domains/messaging#metrics","meta":"deprecated · histogram · s"},{"type":"metric","id":"messaging.receive.messages","text":"Deprecated. Use messaging.client.consumed.messages instead.","url":"/domains/messaging#metrics","meta":"deprecated · counter · {message}"},{"type":"metric","id":"nfs.client.net.count","text":"Reports the count of kernel NFS client TCP segments and UDP datagrams handled.","url":"/domains/infrastructure#metrics","meta":"development · counter · {record}"},{"type":"metric","id":"nfs.client.net.tcp.connection.accepted","text":"Reports the count of kernel NFS client TCP connections accepted.","url":"/domains/infrastructure#metrics","meta":"development · counter · {connection}"},{"type":"metric","id":"nfs.client.operation.count","text":"Reports the count of kernel NFSv4+ client operations.","url":"/domains/infrastructure#metrics","meta":"development · counter · {operation}"},{"type":"metric","id":"nfs.client.procedure.count","text":"Reports the count of kernel NFS client procedures.","url":"/domains/infrastructure#metrics","meta":"development · counter · {procedure}"},{"type":"metric","id":"nfs.client.rpc.authrefresh.count","text":"Reports the count of kernel NFS client RPC authentication refreshes.","url":"/domains/infrastructure#metrics","meta":"development · counter · {authrefresh}"},{"type":"metric","id":"nfs.client.rpc.count","text":"Reports the count of kernel NFS client RPCs sent, regardless of whether they're accepted/rejected by the server.","url":"/domains/infrastructure#metrics","meta":"development · counter · {request}"},{"type":"metric","id":"nfs.client.rpc.retransmit.count","text":"Reports the count of kernel NFS client RPC retransmits.","url":"/domains/infrastructure#metrics","meta":"development · counter · {retransmit}"},{"type":"metric","id":"nfs.server.fh.stale.count","text":"Reports the count of kernel NFS server stale file handles.","url":"/domains/infrastructure#metrics","meta":"development · counter · {fh}"},{"type":"metric","id":"nfs.server.io","text":"Reports the count of kernel NFS server bytes returned to receive and transmit (read and write) requests.","url":"/domains/infrastructure#metrics","meta":"development · counter · By"},{"type":"metric","id":"nfs.server.net.count","text":"Reports the count of kernel NFS server TCP segments and UDP datagrams handled.","url":"/domains/infrastructure#metrics","meta":"development · counter · {record}"},{"type":"metric","id":"nfs.server.net.tcp.connection.accepted","text":"Reports the count of kernel NFS server TCP connections accepted.","url":"/domains/infrastructure#metrics","meta":"development · counter · {connection}"},{"type":"metric","id":"nfs.server.operation.count","text":"Reports the count of kernel NFSv4+ server operations.","url":"/domains/infrastructure#metrics","meta":"development · counter · {operation}"},{"type":"metric","id":"nfs.server.procedure.count","text":"Reports the count of kernel NFS server procedures.","url":"/domains/infrastructure#metrics","meta":"development · counter · {procedure}"},{"type":"metric","id":"nfs.server.repcache.requests","text":"Reports the kernel NFS server reply cache request count by cache hit status.","url":"/domains/infrastructure#metrics","meta":"development · counter · {request}"},{"type":"metric","id":"nfs.server.rpc.count","text":"Reports the count of kernel NFS server RPCs handled.","url":"/domains/infrastructure#metrics","meta":"development · counter · {request}"},{"type":"metric","id":"nfs.server.thread.count","text":"Reports the count of kernel NFS server available threads.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {thread}"},{"type":"metric","id":"nodejs.eventloop.delay.max","text":"Event loop maximum delay.","url":"/domains/runtime#metrics","meta":"development · gauge · s"},{"type":"metric","id":"nodejs.eventloop.delay.mean","text":"Event loop mean delay.","url":"/domains/runtime#metrics","meta":"development · gauge · s"},{"type":"metric","id":"nodejs.eventloop.delay.min","text":"Event loop minimum delay.","url":"/domains/runtime#metrics","meta":"development · gauge · s"},{"type":"metric","id":"nodejs.eventloop.delay.p50","text":"Event loop 50 percentile delay.","url":"/domains/runtime#metrics","meta":"development · gauge · s"},{"type":"metric","id":"nodejs.eventloop.delay.p90","text":"Event loop 90 percentile delay.","url":"/domains/runtime#metrics","meta":"development · gauge · s"},{"type":"metric","id":"nodejs.eventloop.delay.p99","text":"Event loop 99 percentile delay.","url":"/domains/runtime#metrics","meta":"development · gauge · s"},{"type":"metric","id":"nodejs.eventloop.delay.stddev","text":"Event loop standard deviation delay.","url":"/domains/runtime#metrics","meta":"development · gauge · s"},{"type":"metric","id":"nodejs.eventloop.time","text":"Cumulative duration of time the event loop has been in each state.","url":"/domains/runtime#metrics","meta":"development · counter · s"},{"type":"metric","id":"nodejs.eventloop.utilization","text":"Event loop utilization.","url":"/domains/runtime#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"openshift.clusterquota.cpu.limit.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"openshift.clusterquota.cpu.limit.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"openshift.clusterquota.cpu.request.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"openshift.clusterquota.cpu.request.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"openshift.clusterquota.ephemeral_storage.limit.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"openshift.clusterquota.ephemeral_storage.limit.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"openshift.clusterquota.ephemeral_storage.request.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"openshift.clusterquota.ephemeral_storage.request.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"openshift.clusterquota.hugepage_count.request.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {hugepage}"},{"type":"metric","id":"openshift.clusterquota.hugepage_count.request.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {hugepage}"},{"type":"metric","id":"openshift.clusterquota.memory.limit.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"openshift.clusterquota.memory.limit.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"openshift.clusterquota.memory.request.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"openshift.clusterquota.memory.request.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"openshift.clusterquota.object_count.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {object}"},{"type":"metric","id":"openshift.clusterquota.object_count.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {object}"},{"type":"metric","id":"openshift.clusterquota.persistentvolumeclaim_count.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {persistentvolumeclaim}"},{"type":"metric","id":"openshift.clusterquota.persistentvolumeclaim_count.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · {persistentvolumeclaim}"},{"type":"metric","id":"openshift.clusterquota.storage.request.hard","text":"The enforced hard limit of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"openshift.clusterquota.storage.request.used","text":"The current observed total usage of the resource across all projects.","url":"/domains/kubernetes#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"otel.sdk.exporter.log.exported","text":"The number of log records for which the export has finished, either successful or failed.","url":"/domains/telemetry#metrics","meta":"development · counter · {log_record}"},{"type":"metric","id":"otel.sdk.exporter.log.inflight","text":"The number of log records which were passed to the exporter, but that have not been exported yet (neither successful, nor failed).","url":"/domains/telemetry#metrics","meta":"development · updowncounter · {log_record}"},{"type":"metric","id":"otel.sdk.exporter.metric_data_point.exported","text":"The number of metric data points for which the export has finished, either successful or failed.","url":"/domains/telemetry#metrics","meta":"development · counter · {data_point}"},{"type":"metric","id":"otel.sdk.exporter.metric_data_point.inflight","text":"The number of metric data points which were passed to the exporter, but that have not been exported yet (neither successful, nor failed).","url":"/domains/telemetry#metrics","meta":"development · updowncounter · {data_point}"},{"type":"metric","id":"otel.sdk.exporter.operation.duration","text":"The duration of exporting a batch of telemetry records.","url":"/domains/telemetry#metrics","meta":"development · histogram · s"},{"type":"metric","id":"otel.sdk.exporter.span.exported","text":"The number of spans for which the export has finished, either successful or failed.","url":"/domains/telemetry#metrics","meta":"development · counter · {span}"},{"type":"metric","id":"otel.sdk.exporter.span.exported.count","text":"Deprecated, use otel.sdk.exporter.span.exported instead.","url":"/domains/telemetry#metrics","meta":"deprecated · updowncounter · {span}"},{"type":"metric","id":"otel.sdk.exporter.span.inflight","text":"The number of spans which were passed to the exporter, but that have not been exported yet (neither successful, nor failed).","url":"/domains/telemetry#metrics","meta":"development · updowncounter · {span}"},{"type":"metric","id":"otel.sdk.exporter.span.inflight.count","text":"Deprecated, use otel.sdk.exporter.span.inflight instead.","url":"/domains/telemetry#metrics","meta":"deprecated · updowncounter · {span}"},{"type":"metric","id":"otel.sdk.log.created","text":"The number of logs submitted to enabled SDK Loggers.","url":"/domains/telemetry#metrics","meta":"development · counter · {log_record}"},{"type":"metric","id":"otel.sdk.metric_reader.collection.duration","text":"The duration of the collect operation of the metric reader.","url":"/domains/telemetry#metrics","meta":"development · histogram · s"},{"type":"metric","id":"otel.sdk.processor.log.processed","text":"The number of log records for which the processing has finished, either successful or failed.","url":"/domains/telemetry#metrics","meta":"development · counter · {log_record}"},{"type":"metric","id":"otel.sdk.processor.log.queue.capacity","text":"The maximum number of log records the queue of a given instance of an SDK Log Record processor can hold.","url":"/domains/telemetry#metrics","meta":"development · updowncounter · {log_record}"},{"type":"metric","id":"otel.sdk.processor.log.queue.size","text":"The number of log records in the queue of a given instance of an SDK log processor.","url":"/domains/telemetry#metrics","meta":"development · updowncounter · {log_record}"},{"type":"metric","id":"otel.sdk.processor.span.processed","text":"The number of spans for which the processing has finished, either successful or failed.","url":"/domains/telemetry#metrics","meta":"development · counter · {span}"},{"type":"metric","id":"otel.sdk.processor.span.processed.count","text":"Deprecated, use otel.sdk.processor.span.processed instead.","url":"/domains/telemetry#metrics","meta":"deprecated · updowncounter · {span}"},{"type":"metric","id":"otel.sdk.processor.span.queue.capacity","text":"The maximum number of spans the queue of a given instance of an SDK span processor can hold.","url":"/domains/telemetry#metrics","meta":"development · updowncounter · {span}"},{"type":"metric","id":"otel.sdk.processor.span.queue.size","text":"The number of spans in the queue of a given instance of an SDK span processor.","url":"/domains/telemetry#metrics","meta":"development · updowncounter · {span}"},{"type":"metric","id":"otel.sdk.span.ended","text":"Use otel.sdk.span.started minus otel.sdk.span.live to derive this value.","url":"/domains/telemetry#metrics","meta":"deprecated · counter · {span}"},{"type":"metric","id":"otel.sdk.span.ended.count","text":"Use otel.sdk.span.started minus otel.sdk.span.live to derive this value.","url":"/domains/telemetry#metrics","meta":"deprecated · counter · {span}"},{"type":"metric","id":"otel.sdk.span.live","text":"The number of created spans with recording=true for which the end operation has not been called yet.","url":"/domains/telemetry#metrics","meta":"development · updowncounter · {span}"},{"type":"metric","id":"otel.sdk.span.live.count","text":"Deprecated, use otel.sdk.span.live instead.","url":"/domains/telemetry#metrics","meta":"deprecated · updowncounter · {span}"},{"type":"metric","id":"otel.sdk.span.started","text":"The number of created spans.","url":"/domains/telemetry#metrics","meta":"development · counter · {span}"},{"type":"metric","id":"process.context_switches","text":"Number of times the process has been context switched.","url":"/domains/runtime#metrics","meta":"release_candidate · counter · {context_switch}"},{"type":"metric","id":"process.cpu.time","text":"Total CPU seconds broken down by different CPU modes.","url":"/domains/runtime#metrics","meta":"release_candidate · counter · s"},{"type":"metric","id":"process.cpu.utilization","text":"Difference in process.cpu.time since the last measurement, divided by the elapsed time and number of CPUs available to the process.","url":"/domains/runtime#metrics","meta":"release_candidate · gauge · 1"},{"type":"metric","id":"process.disk.io","text":"Disk bytes transferred.","url":"/domains/runtime#metrics","meta":"release_candidate · counter · By"},{"type":"metric","id":"process.disk.operations","text":"Number of disk operations performed by the process.","url":"/domains/runtime#metrics","meta":"development · counter · {operation}"},{"type":"metric","id":"process.memory.usage","text":"The amount of physical memory in use.","url":"/domains/runtime#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"process.memory.utilization","text":"Percentage of total physical memory that is used by the process.","url":"/domains/runtime#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"process.memory.virtual","text":"The amount of committed virtual memory.","url":"/domains/runtime#metrics","meta":"release_candidate · updowncounter · By"},{"type":"metric","id":"process.network.io","text":"Network bytes transferred.","url":"/domains/runtime#metrics","meta":"release_candidate · counter · By"},{"type":"metric","id":"process.open_file_descriptor.count","text":"Deprecated, use process.unix.file_descriptor.count instead.","url":"/domains/runtime#metrics","meta":"deprecated · updowncounter · {file_descriptor}"},{"type":"metric","id":"process.paging.faults","text":"Number of page faults the process has made.","url":"/domains/runtime#metrics","meta":"release_candidate · counter · {fault}"},{"type":"metric","id":"process.signals_pending","text":"Number of pending signals for the process.","url":"/domains/runtime#metrics","meta":"development · updowncounter · {signal}"},{"type":"metric","id":"process.thread.count","text":"Process threads count.","url":"/domains/runtime#metrics","meta":"release_candidate · updowncounter · {thread}"},{"type":"metric","id":"process.unix.file_descriptor.count","text":"Number of UNIX file descriptors in use by the process.","url":"/domains/runtime#metrics","meta":"release_candidate · updowncounter · {file_descriptor}"},{"type":"metric","id":"process.uptime","text":"The time the process has been running.","url":"/domains/runtime#metrics","meta":"release_candidate · gauge · s"},{"type":"metric","id":"process.windows.handle.count","text":"Number of handles held by the process.","url":"/domains/runtime#metrics","meta":"release_candidate · updowncounter · {handle}"},{"type":"metric","id":"rpc.client.call.duration","text":"Measures the duration of an outgoing Remote Procedure Call (RPC).","url":"/domains/rpc#metrics","meta":"release_candidate · histogram · s"},{"type":"metric","id":"rpc.client.duration","text":"Deprecated, use rpc.client.call.duration instead. Note: the unit also changed from ms to s.","url":"/domains/rpc#metrics","meta":"deprecated · histogram · ms"},{"type":"metric","id":"rpc.client.request.size","text":"Measures the size of RPC request messages (uncompressed).","url":"/domains/rpc#metrics","meta":"deprecated · histogram · By"},{"type":"metric","id":"rpc.client.requests_per_rpc","text":"Measures the number of messages received per RPC.","url":"/domains/rpc#metrics","meta":"deprecated · histogram · {count}"},{"type":"metric","id":"rpc.client.response.size","text":"Measures the size of RPC response messages (uncompressed).","url":"/domains/rpc#metrics","meta":"deprecated · histogram · By"},{"type":"metric","id":"rpc.client.responses_per_rpc","text":"Measures the number of messages sent per RPC.","url":"/domains/rpc#metrics","meta":"deprecated · histogram · {count}"},{"type":"metric","id":"rpc.server.call.duration","text":"Measures the duration of an incoming Remote Procedure Call (RPC).","url":"/domains/rpc#metrics","meta":"release_candidate · histogram · s"},{"type":"metric","id":"rpc.server.duration","text":"Deprecated, use rpc.server.call.duration instead. Note: the unit also changed from ms to s.","url":"/domains/rpc#metrics","meta":"deprecated · histogram · ms"},{"type":"metric","id":"rpc.server.request.size","text":"Measures the size of RPC request messages (uncompressed).","url":"/domains/rpc#metrics","meta":"deprecated · histogram · By"},{"type":"metric","id":"rpc.server.requests_per_rpc","text":"Measures the number of messages received per RPC.","url":"/domains/rpc#metrics","meta":"deprecated · histogram · {count}"},{"type":"metric","id":"rpc.server.response.size","text":"Measures the size of RPC response messages (uncompressed).","url":"/domains/rpc#metrics","meta":"deprecated · histogram · By"},{"type":"metric","id":"rpc.server.responses_per_rpc","text":"Measures the number of messages sent per RPC.","url":"/domains/rpc#metrics","meta":"deprecated · histogram · {count}"},{"type":"metric","id":"signalr.server.active_connections","text":"Number of connections that are currently active on the server.","url":"/domains/rpc#metrics","meta":"stable · updowncounter · {connection}"},{"type":"metric","id":"signalr.server.connection.duration","text":"The duration of connections on the server.","url":"/domains/rpc#metrics","meta":"stable · histogram · s"},{"type":"metric","id":"system.cpu.frequency","text":"Operating frequency of the logical CPU in Hertz.","url":"/domains/infrastructure#metrics","meta":"development · gauge · Hz"},{"type":"metric","id":"system.cpu.logical.count","text":"Reports the number of logical (virtual) processor cores created by the operating system to manage multitasking.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"system.cpu.physical.count","text":"Reports the number of actual physical processor cores on the hardware.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {cpu}"},{"type":"metric","id":"system.cpu.time","text":"Seconds each logical CPU spent on each mode.","url":"/domains/infrastructure#metrics","meta":"development · counter · s"},{"type":"metric","id":"system.cpu.utilization","text":"For each logical CPU, the utilization is calculated as the change in cumulative CPU time (cpu.time) over a measurement interval, divided by the elapsed time.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"system.disk.io","text":"Disk bytes transferred.","url":"/domains/infrastructure#metrics","meta":"development · counter · By"},{"type":"metric","id":"system.disk.io_time","text":"Time disk spent activated.","url":"/domains/infrastructure#metrics","meta":"development · counter · s"},{"type":"metric","id":"system.disk.limit","text":"The total storage capacity of the disk.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.disk.merged","text":"The number of disk reads/writes merged into single physical disk access operations.","url":"/domains/infrastructure#metrics","meta":"development · counter · {operation}"},{"type":"metric","id":"system.disk.operation_time","text":"Sum of the time each operation took to complete.","url":"/domains/infrastructure#metrics","meta":"development · counter · s"},{"type":"metric","id":"system.disk.operations","text":"Disk operations count.","url":"/domains/infrastructure#metrics","meta":"development · counter · {operation}"},{"type":"metric","id":"system.filesystem.limit","text":"The total storage capacity of the filesystem.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.filesystem.lock.count","text":"Filesystem lock counts.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {lock}"},{"type":"metric","id":"system.filesystem.usage","text":"Reports a filesystem's space usage across different states.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.filesystem.utilization","text":"Fraction of filesystem bytes used.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"system.linux.memory.available","text":"The number of packets transferred.","url":"/domains/infrastructure#metrics","meta":"deprecated · counter · {packet}"},{"type":"metric","id":"system.linux.memory.slab.usage","text":"The number of packets transferred.","url":"/domains/infrastructure#metrics","meta":"deprecated · counter · {packet}"},{"type":"metric","id":"system.memory.limit","text":"Total virtual memory available in the system.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.memory.linux.available","text":"An estimate of how much memory is available for starting new applications, without causing swapping.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.memory.linux.hugepages.limit","text":"Total number of hugepages available.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {page}"},{"type":"metric","id":"system.memory.linux.hugepages.page_size","text":"System hugepage size in bytes.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.memory.linux.hugepages.reserved","text":"Number of reserved hugepages.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {page}"},{"type":"metric","id":"system.memory.linux.hugepages.surplus","text":"Number of surplus hugepages.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {page}"},{"type":"metric","id":"system.memory.linux.hugepages.usage","text":"Number of hugepages in use by state.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {page}"},{"type":"metric","id":"system.memory.linux.hugepages.utilization","text":"Percentage of hugepages in use by state.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"system.memory.linux.shared","text":"Shared memory used (mostly by tmpfs).","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.memory.linux.slab.usage","text":"Reports the memory used by the Linux kernel for managing caches of frequently used objects.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.memory.shared","text":"Deprecated, use system.memory.linux.shared instead.","url":"/domains/infrastructure#metrics","meta":"deprecated · updowncounter · By"},{"type":"metric","id":"system.memory.usage","text":"Reports memory in use by state.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.memory.utilization","text":"Percentage of memory bytes in use.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"system.network.connection.count","text":"The number of connections.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {connection}"},{"type":"metric","id":"system.network.connections","text":"Deprecated, use system.network.connection.count instead.","url":"/domains/infrastructure#metrics","meta":"deprecated · updowncounter · {connection}"},{"type":"metric","id":"system.network.dropped","text":"Count of packets that are dropped or discarded even though there was no error.","url":"/domains/infrastructure#metrics","meta":"deprecated · counter · {packet}"},{"type":"metric","id":"system.network.errors","text":"Count of network errors detected.","url":"/domains/infrastructure#metrics","meta":"development · counter · {error}"},{"type":"metric","id":"system.network.io","text":"The number of bytes transmitted and received.","url":"/domains/infrastructure#metrics","meta":"development · counter · By"},{"type":"metric","id":"system.network.packet.count","text":"The number of packets transferred.","url":"/domains/infrastructure#metrics","meta":"development · counter · {packet}"},{"type":"metric","id":"system.network.packet.dropped","text":"Count of packets that are dropped or discarded even though there was no error.","url":"/domains/infrastructure#metrics","meta":"development · counter · {packet}"},{"type":"metric","id":"system.network.packets","text":"The number of packets transferred.","url":"/domains/infrastructure#metrics","meta":"deprecated · counter · {packet}"},{"type":"metric","id":"system.paging.faults","text":"The number of page faults.","url":"/domains/infrastructure#metrics","meta":"development · counter · {fault}"},{"type":"metric","id":"system.paging.operations","text":"The number of paging operations.","url":"/domains/infrastructure#metrics","meta":"development · counter · {operation}"},{"type":"metric","id":"system.paging.usage","text":"UNIX swap or windows pagefile usage.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"system.paging.utilization","text":"Swap (UNIX) or pagefile (windows) utilization.","url":"/domains/infrastructure#metrics","meta":"development · gauge · 1"},{"type":"metric","id":"system.process.count","text":"Total number of processes in each state.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {process}"},{"type":"metric","id":"system.process.created","text":"Total number of processes created over uptime of the host.","url":"/domains/infrastructure#metrics","meta":"development · counter · {process}"},{"type":"metric","id":"system.process.limit","text":"The maximum number of concurrent processes/tasks allowed by the operating system.","url":"/domains/infrastructure#metrics","meta":"development · updowncounter · {thread}"},{"type":"metric","id":"system.uptime","text":"The time the system has been running.","url":"/domains/infrastructure#metrics","meta":"development · gauge · s"},{"type":"metric","id":"v8js.gc.duration","text":"Garbage collection duration.","url":"/domains/runtime#metrics","meta":"development · histogram · s"},{"type":"metric","id":"v8js.heap.space.available_size","text":"Deprecated, use v8js.memory.heap.space.available_size instead.","url":"/domains/runtime#metrics","meta":"deprecated · updowncounter · By"},{"type":"metric","id":"v8js.heap.space.physical_size","text":"Deprecated, use v8js.memory.heap.space.physical_size instead.","url":"/domains/runtime#metrics","meta":"deprecated · updowncounter · By"},{"type":"metric","id":"v8js.memory.heap.limit","text":"Deprecated, use v8js.memory.heap.space.size instead.","url":"/domains/runtime#metrics","meta":"deprecated · updowncounter · By"},{"type":"metric","id":"v8js.memory.heap.space.available_size","text":"Heap space available size.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"v8js.memory.heap.space.physical_size","text":"Committed size of a heap space.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"v8js.memory.heap.space.size","text":"Total heap memory size pre-allocated for a heap space.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"v8js.memory.heap.used","text":"Heap Memory size allocated.","url":"/domains/runtime#metrics","meta":"development · updowncounter · By"},{"type":"metric","id":"v8js.resource.active","text":"Gauge of the active resources that are currently keeping the event loop alive.","url":"/domains/runtime#metrics","meta":"development · gauge · {resource}"},{"type":"metric","id":"vcs.change.count","text":"The number of changes (pull requests/merge requests/changelists) in a repository, categorized by their state (e.g. open or merged).","url":"/domains/cicd#metrics","meta":"release_candidate · updowncounter · {change}"},{"type":"metric","id":"vcs.change.duration","text":"The time duration a change (pull request/merge request/changelist) has been in a given state.","url":"/domains/cicd#metrics","meta":"release_candidate · gauge · s"},{"type":"metric","id":"vcs.change.time_to_approval","text":"The amount of time since its creation it took a change (pull request/merge request/changelist) to get the first approval.","url":"/domains/cicd#metrics","meta":"development · gauge · s"},{"type":"metric","id":"vcs.change.time_to_merge","text":"The amount of time since its creation it took a change (pull request/merge request/changelist) to get merged into the target(base) ref.","url":"/domains/cicd#metrics","meta":"development · gauge · s"},{"type":"metric","id":"vcs.contributor.count","text":"The number of unique contributors to a repository.","url":"/domains/cicd#metrics","meta":"release_candidate · gauge · {contributor}"},{"type":"metric","id":"vcs.ref.count","text":"The number of refs of type branch or tag in a repository.","url":"/domains/cicd#metrics","meta":"release_candidate · updowncounter · {ref}"},{"type":"metric","id":"vcs.ref.lines_delta","text":"The number of lines added/removed in a ref (branch) relative to the ref from the vcs.ref.base.name attribute.","url":"/domains/cicd#metrics","meta":"release_candidate · gauge · {line}"},{"type":"metric","id":"vcs.ref.revisions_delta","text":"The number of revisions (commits) a ref (branch) is ahead/behind the branch from the vcs.ref.base.name attribute.","url":"/domains/cicd#metrics","meta":"release_candidate · gauge · {revision}"},{"type":"metric","id":"vcs.ref.time","text":"Time a ref (branch) created from the default branch (trunk) has existed. The ref.type attribute will always be branch.","url":"/domains/cicd#metrics","meta":"release_candidate · gauge · s"},{"type":"metric","id":"vcs.repository.count","text":"The number of repositories in an organization.","url":"/domains/cicd#metrics","meta":"release_candidate · updowncounter · {repository}"},{"type":"metric","id":"gen_ai.client.operation.duration","text":"GenAI operation duration.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"gen_ai.client.operation.time_per_output_chunk","text":"Time per output chunk, recorded for each chunk received after the first one, measured as the time elapsed from the end of the previous chunk to the end of the …","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"gen_ai.client.operation.time_to_first_chunk","text":"Time to receive the first chunk, measured from when the client issues the generation request to when the first chunk is received in the response stream.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"gen_ai.client.token.usage","text":"Number of input and output tokens used.","url":"/domains/gen-ai#metrics","meta":"development · histogram · {token}"},{"type":"metric","id":"gen_ai.execute_tool.duration","text":"The duration of a single tool execution.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"gen_ai.invoke_agent.duration","text":"The end-to-end duration of a single in-process agent invocation, from the moment the invocation starts until the agent emits the last chunk of its final respon…","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"gen_ai.invoke_agent.inference_calls","text":"The number of inference (model) calls a GenAI agent makes during a single invocation.","url":"/domains/gen-ai#metrics","meta":"development · histogram · {inference_call}"},{"type":"metric","id":"gen_ai.invoke_agent.tool_calls","text":"The number of tool calls a GenAI agent makes during a single invocation.","url":"/domains/gen-ai#metrics","meta":"development · histogram · {tool_call}"},{"type":"metric","id":"gen_ai.invoke_workflow.duration","text":"Records duration of GenAI workflow.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"gen_ai.server.request.duration","text":"Generative AI server request duration such as time-to-last byte or last output token.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"gen_ai.server.time_per_output_token","text":"Time per output token generated after the first token for successful responses.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"gen_ai.server.time_to_first_token","text":"Time to generate first token for successful responses.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"mcp.client.operation.duration","text":"The duration of the MCP request or notification as observed on the sender from the time it was sent until the response or ack is received.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"mcp.client.session.duration","text":"The duration of the MCP session as observed on the MCP client.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"mcp.server.operation.duration","text":"MCP request or notification duration as observed on the receiver from the time it was received until the result or ack is sent.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"metric","id":"mcp.server.session.duration","text":"The duration of the MCP session as observed on the MCP server.","url":"/domains/gen-ai#metrics","meta":"development · histogram · s"},{"type":"entity","id":"android","text":"The Android platform on which the Android application is running.","url":"/domains/apps#signals","meta":"development"},{"type":"entity","id":"app","text":"An app used directly by end users — like mobile, web, or desktop.","url":"/domains/apps#signals","meta":"development"},{"type":"entity","id":"aws.ecs","text":"Entities used by AWS Elastic Container Service (ECS).","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"aws.eks","text":"Entities used by AWS Elastic Kubernetes Service (EKS).","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"aws.log","text":"Entities specific to Amazon Web Services.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"browser","text":"The web browser in which the application represented by the resource is running. The browser.* attributes MUST be used only for resources that represent applic…","url":"/domains/http#signals","meta":"development"},{"type":"entity","id":"browser.document","text":"The web page document loaded in the browser.","url":"/domains/http#signals","meta":"development"},{"type":"entity","id":"cicd.pipeline","text":"A pipeline is a series of automated steps that helps software teams deliver code.","url":"/domains/cicd#signals","meta":"release_candidate"},{"type":"entity","id":"cicd.pipeline.run","text":"A pipeline run is a singular execution of a given pipeline's tasks.","url":"/domains/cicd#signals","meta":"release_candidate"},{"type":"entity","id":"cicd.worker","text":"A CI/CD worker is a component of the CI/CD system that performs work (eg. running pipeline tasks or performing sync). A single pipeline run may be distributed …","url":"/domains/cicd#signals","meta":"release_candidate"},{"type":"entity","id":"cloud","text":"A cloud environment (e.g. GCP, Azure, AWS)","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"cloudfoundry.app","text":"The application which is monitored.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"cloudfoundry.org","text":"The organization of the application which is monitored.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"cloudfoundry.process","text":"The process of the application which is monitored.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"cloudfoundry.space","text":"The space of the application which is monitored.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"cloudfoundry.system","text":"The system component which is monitored.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"container","text":"A container instance.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"container.image","text":"The image used for the container.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"container.runtime","text":"The runtime being used to run the container","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"deployment","text":"The software deployment.","url":"/domains/cicd#signals","meta":"development"},{"type":"entity","id":"device","text":"The device on which the process represented by this resource is running.","url":"/domains/apps#signals","meta":"development"},{"type":"entity","id":"faas","text":"A serverless instance.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"gcp.apphub.application","text":"Attributes denoting data from an Application in AppHub. See AppHub overview.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"gcp.apphub.service","text":"Attributes denoting data from a Service in AppHub. See AppHub overview.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"gcp.apphub.workload","text":"Attributes denoting data from a Workload in AppHub. See AppHub overview.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"gcp.cloud_run","text":"Resource used by Google Cloud Run.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"gcp.gce","text":"Resources used by Google Compute Engine (GCE).","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"gcp.gce.instance_group_manager","text":"A GCE instance group manager.","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"heroku","text":"Heroku dyno metadata","url":"/domains/cloud#signals","meta":"development"},{"type":"entity","id":"host","text":"A host is defined as a computing instance. For example, physical servers, virtual machines, switches or disk array.","url":"/domains/infrastructure#signals","meta":"development"},{"type":"entity","id":"host.cpu","text":"A host's CPU information","url":"/domains/infrastructure#signals","meta":"development"},{"type":"entity","id":"k8s.cluster","text":"A Kubernetes Cluster.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.container","text":"A container in a PodTemplate.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.cronjob","text":"A Kubernetes CronJob object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.daemonset","text":"A Kubernetes DaemonSet object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.deployment","text":"A Kubernetes Deployment object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.hpa","text":"A Kubernetes HorizontalPodAutoscaler object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.job","text":"A Kubernetes Job object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.namespace","text":"A Kubernetes Namespace.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.node","text":"A Kubernetes Node object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.node.system_container","text":"A Kubernetes Node System Container.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.persistentvolume","text":"A Kubernetes PersistentVolume object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.persistentvolumeclaim","text":"A Kubernetes PersistentVolumeClaim object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.pod","text":"A Kubernetes Pod object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.replicaset","text":"A Kubernetes ReplicaSet object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.replicationcontroller","text":"A Kubernetes ReplicationController object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.resourcequota","text":"A Kubernetes ResourceQuota object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.service","text":"A Kubernetes Service object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"k8s.statefulset","text":"A Kubernetes StatefulSet object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"openshift.clusterquota","text":"An OpenShift ClusterResourceQuota object.","url":"/domains/kubernetes#signals","meta":"development"},{"type":"entity","id":"os","text":"The operating system (OS) on which the process represented by this resource is running.","url":"/domains/infrastructure#signals","meta":"development"},{"type":"entity","id":"otel.scope","text":"Attributes used by non-OTLP exporters to represent OpenTelemetry Scope's concepts.","url":"/domains/telemetry#signals","meta":"deprecated"},{"type":"entity","id":"process","text":"An operating system process.","url":"/domains/runtime#signals","meta":"release_candidate"},{"type":"entity","id":"process.executable","text":"The executable of a process.","url":"/domains/runtime#signals","meta":"development"},{"type":"entity","id":"process.runtime","text":"The single (language) runtime instance which is monitored.","url":"/domains/runtime#signals","meta":"development"},{"type":"entity","id":"service","text":"A logical unit of an application or system that performs a specific function.","url":"/domains/telemetry#signals","meta":"stable"},{"type":"entity","id":"service.instance","text":"A unique instance of a logical service.","url":"/domains/telemetry#signals","meta":"stable"},{"type":"entity","id":"service.namespace","text":"Groups related services that compose a system or application under a common namespace.","url":"/domains/telemetry#signals","meta":"stable"},{"type":"entity","id":"telemetry.distro","text":"The distribution of telemetry SDK used to capture data recorded by the instrumentation libraries.","url":"/domains/telemetry#signals","meta":"stable"},{"type":"entity","id":"telemetry.sdk","text":"The telemetry SDK used to capture data recorded by the instrumentation libraries.","url":"/domains/telemetry#signals","meta":"stable"},{"type":"entity","id":"vcs.ref","text":"A reference to a specific version in the Version Control System.","url":"/domains/cicd#signals","meta":"development"},{"type":"entity","id":"vcs.repository","text":"A repository in the Version Control System.","url":"/domains/cicd#signals","meta":"release_candidate"},{"type":"entity","id":"webengine","text":"Resource describing the packaged software running the application code. Web engines are typically executed using process.runtime.","url":"/domains/http#signals","meta":"development"},{"type":"entity","id":"zos.software","text":"A software resource running on a z/OS system.","url":"/domains/infrastructure#signals","meta":"development"},{"type":"event","id":"app.crash","text":"This event represents a termination of a user-facing application due to unrecoverable programming errors such as exceptions or signals that indicate an error h…","url":"/domains/apps#signals","meta":"development"},{"type":"event","id":"app.jank","text":"This event indicates that the application has detected substandard UI rendering performance.","url":"/domains/apps#signals","meta":"development"},{"type":"event","id":"app.screen.click","text":"This event represents an instantaneous click on the screen of an application.","url":"/domains/apps#signals","meta":"development"},{"type":"event","id":"app.widget.click","text":"This event indicates that an application widget has been clicked.","url":"/domains/apps#signals","meta":"development"},{"type":"event","id":"az.resource.log","text":"Deprecated. Use azure.resource.log instead.","url":"/domains/cloud#signals","meta":"deprecated"},{"type":"event","id":"azure.resource.log","text":"Describes Azure Resource Log event, see Azure Resource Log Top-level Schema for more details.","url":"/domains/cloud#signals","meta":"development"},{"type":"event","id":"browser.web_vital","text":"This event describes the website performance metrics introduced by Google, See web vitals.","url":"/domains/http#signals","meta":"development"},{"type":"event","id":"db.client.operation.exception","text":"This event represents an exception that occurred during a database client operation, such as connection failures, query errors, timeouts, or other errors that …","url":"/domains/database#signals","meta":"development"},{"type":"event","id":"device.app.lifecycle","text":"This event represents an occurrence of a lifecycle transition on Android or iOS platform.","url":"/domains/apps#signals","meta":"development"},{"type":"event","id":"exception","text":"This event describes a single exception.","url":"/domains/errors#signals","meta":"stable"},{"type":"event","id":"faas.invocation.exception","text":"This event represents an exception that occurred during FaaS function invocation, such as application errors, internal failures, or other exceptions that preve…","url":"/domains/cloud#signals","meta":"development"},{"type":"event","id":"feature_flag.evaluation","text":"Defines feature flag evaluation as an event.","url":"/domains/apps#signals","meta":"release_candidate"},{"type":"event","id":"gen_ai.assistant.message","text":"This event describes the assistant message passed to GenAI system.","url":"/domains/gen-ai#signals","meta":"deprecated"},{"type":"event","id":"gen_ai.choice","text":"This event describes the Gen AI response message.","url":"/domains/gen-ai#signals","meta":"deprecated"},{"type":"event","id":"gen_ai.client.inference.operation.details","text":"Describes the details of a GenAI completion request including chat history and parameters.","url":"/domains/gen-ai#signals","meta":"deprecated"},{"type":"event","id":"gen_ai.client.operation.exception","text":"This event represents an exception that occurred during a Generative AI client operation, such as API errors, rate limiting, model errors, timeouts, or other e…","url":"/domains/gen-ai#signals","meta":"deprecated"},{"type":"event","id":"gen_ai.evaluation.result","text":"This event captures the result of evaluating GenAI output for quality, accuracy, or other characteristics. This event SHOULD be parented to GenAI operation spa…","url":"/domains/gen-ai#signals","meta":"deprecated"},{"type":"event","id":"gen_ai.system.message","text":"This event describes the system instructions passed to the GenAI model.","url":"/domains/gen-ai#signals","meta":"deprecated"},{"type":"event","id":"gen_ai.tool.message","text":"This event describes the response from a tool or function call passed to the GenAI model.","url":"/domains/gen-ai#signals","meta":"deprecated"},{"type":"event","id":"gen_ai.user.message","text":"This event describes the user message passed to the GenAI model.","url":"/domains/gen-ai#signals","meta":"deprecated"},{"type":"event","id":"http.client.request.exception","text":"This event represents an exception that occurred during an HTTP client request, such as network failures, timeouts, or other errors that prevent the request fr…","url":"/domains/http#signals","meta":"development"},{"type":"event","id":"http.server.request.exception","text":"This event represents an exception that occurred during HTTP server request processing, such as application errors, internal failures, or other exceptions that…","url":"/domains/http#signals","meta":"development"},{"type":"event","id":"messaging.create.exception","text":"This event represents an exception that occurred during a messaging create operation.","url":"/domains/messaging#signals","meta":"development"},{"type":"event","id":"messaging.process.exception","text":"This event represents an exception that occurred during messaging process operations.","url":"/domains/messaging#signals","meta":"development"},{"type":"event","id":"messaging.receive.exception","text":"This event represents an exception that occurred during a messaging receive operation.","url":"/domains/messaging#signals","meta":"development"},{"type":"event","id":"messaging.send.exception","text":"This event represents an exception that occurred during a messaging send operation.","url":"/domains/messaging#signals","meta":"development"},{"type":"event","id":"messaging.settle.exception","text":"This event represents an exception that occurred during a messaging settle operation.","url":"/domains/messaging#signals","meta":"development"},{"type":"event","id":"rpc.client.call.exception","text":"This event represents an exception that occurred during an outgoing RPC call, such as network failures, timeouts, serialization errors, or other errors that pr…","url":"/domains/rpc#signals","meta":"development"},{"type":"event","id":"rpc.message","text":"Describes a message sent or received within the context of an RPC call.","url":"/domains/rpc#signals","meta":"deprecated"},{"type":"event","id":"rpc.server.call.exception","text":"This event represents an exception that occurred during incoming RPC call processing, such as application errors, internal failures, or other exceptions that p…","url":"/domains/rpc#signals","meta":"development"},{"type":"event","id":"session.end","text":"Indicates that a session has ended.","url":"/domains/apps#signals","meta":"development"},{"type":"event","id":"session.start","text":"Indicates that a new session has been started, optionally linking to the prior session.","url":"/domains/apps#signals","meta":"development"},{"type":"span","id":"faas.client","text":"This span represents an outgoing call to a FaaS service.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"faas.datasource.server","text":"This span represents the server side of a FaaS invocation triggered in response to some data source operation such as a database or filesystem read/write.","url":"/domains/cloud#signals","meta":"development · server"},{"type":"span","id":"faas.server","text":"This span represents the server (incoming) side of a FaaS invocation.","url":"/domains/cloud#signals","meta":"development · server"},{"type":"span","id":"faas.timer.server","text":"This span represents the server side of a FaaS invocation triggered by a timer.","url":"/domains/cloud#signals","meta":"development · server"},{"type":"span","id":"messaging.create.producer","text":"Describes a message being created or passed to a client library for sending.","url":"/domains/messaging#signals","meta":"development · producer"},{"type":"span","id":"messaging.eventhubs.generic.client","text":"Describes an Azure Event Hubs client operation that is not covered by a more specific (create, send, receive, process, or settle) span.","url":"/domains/messaging#signals","meta":"development · client"},{"type":"span","id":"messaging.process.consumer","text":"Describes one or more messages being processed by a consumer (push-based).","url":"/domains/messaging#signals","meta":"development · consumer"},{"type":"span","id":"messaging.receive.client","text":"Describes one or more messages being requested by a consumer (pull-based).","url":"/domains/messaging#signals","meta":"development · client"},{"type":"span","id":"messaging.send.client","text":"Describes one or more messages being sent to an intermediary when a separate message creation context (\"Create\" span or custom context) already exists.","url":"/domains/messaging#signals","meta":"development · client"},{"type":"span","id":"messaging.send.producer","text":"Describes one or more messages being sent to an intermediary, where the \"Send\" span's context is used as the message creation context.","url":"/domains/messaging#signals","meta":"development · producer"},{"type":"span","id":"messaging.servicebus.generic.client","text":"Describes an Azure Service Bus client operation that is not covered by a more specific (create, send, receive, process, or settle) span.","url":"/domains/messaging#signals","meta":"development · client"},{"type":"span","id":"messaging.settle.client","text":"Describes one or more messages being settled.","url":"/domains/messaging#signals","meta":"development · client"},{"type":"span","id":"span.anthropic.inference.client","text":"Semantic Conventions for Anthropic client spans extend and override the semantic conventions for Gen AI Spans.","url":"/domains/gen-ai#signals","meta":"deprecated · client"},{"type":"span","id":"span.aws.bedrock.client","text":"Describes an AWS Bedrock operation span.","url":"/domains/cloud#signals","meta":"deprecated · client"},{"type":"span","id":"span.aws.client","text":"This span describes an AWS SDK client call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.aws.lambda.server","text":"This span represents AWS Lambda invocation.","url":"/domains/cloud#signals","meta":"development · server"},{"type":"span","id":"span.aws.s3.client","text":"Semantic Conventions for AWS S3 client spans extend the general AWS SDK Semantic Conventions","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.azure.ai.inference.client","text":"Semantic Conventions for Azure AI Inference client spans extend and override the semantic conventions for Gen AI Spans.","url":"/domains/cloud#signals","meta":"deprecated · client"},{"type":"span","id":"span.azure.cosmosdb.client","text":"Cosmos DB instrumentations include call-level spans that represent logical database calls and adhere to the general Semantic Conventions for Database Client Sp…","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.cicd.pipeline.run.server","text":"This span describes a CI/CD pipeline run.","url":"/domains/cicd#signals","meta":"release_candidate · server"},{"type":"span","id":"span.cicd.pipeline.task.internal","text":"This span describes task execution in a pipeline run.","url":"/domains/cicd#signals","meta":"release_candidate · internal"},{"type":"span","id":"span.cli.client","text":"This span describes CLI (Command Line Interfaces) program execution from a caller perspective.","url":"/domains/runtime#signals","meta":"development · client"},{"type":"span","id":"span.cli.internal","text":"This span describes CLI (Command Line Interfaces) program execution from a callee perspective.","url":"/domains/runtime#signals","meta":"development · internal"},{"type":"span","id":"span.db.cassandra.client","text":"Spans representing calls to a Cassandra database adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"development · client"},{"type":"span","id":"span.db.client","text":"This span describes database client call.","url":"/domains/database#signals","meta":"stable · client"},{"type":"span","id":"span.db.couchdb.client","text":"Spans representing calls to CouchDB adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"development · client"},{"type":"span","id":"span.db.elasticsearch.client","text":"Spans representing calls to Elasticsearch adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"development · client"},{"type":"span","id":"span.db.hbase.client","text":"Spans representing calls to an HBase database adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"development · client"},{"type":"span","id":"span.db.mariadb.client","text":"Spans representing calls to MariaDB adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"stable · client"},{"type":"span","id":"span.db.mongodb.client","text":"Spans representing calls to MongoDB adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"development · client"},{"type":"span","id":"span.db.mysql.client","text":"Spans representing calls to a MySQL Server adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"stable · client"},{"type":"span","id":"span.db.oracledb.client","text":"Spans representing calls to a Oracle SQL Database adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"release_candidate · client"},{"type":"span","id":"span.db.postgresql.client","text":"Spans representing calls to a PostgreSQL database adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"stable · client"},{"type":"span","id":"span.db.redis.client","text":"Spans representing calls to Redis adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"development · client"},{"type":"span","id":"span.db.sql_server.client","text":"Spans representing calls to Microsoft SQL Server adhere to the general Semantic Conventions for Database Client Spans.","url":"/domains/database#signals","meta":"stable · client"},{"type":"span","id":"span.db.sql.client","text":"The SQL databases Semantic Conventions describes how common Database Semantic Conventions apply to SQL databases.","url":"/domains/database#signals","meta":"stable · client"},{"type":"span","id":"span.dotnet.dns.lookup.internal","text":"The span describes DNS lookup or reverse lookup performed with one of the methods on System.Net.Dns class.","url":"/domains/runtime#signals","meta":"development · internal"},{"type":"span","id":"span.dotnet.http.connection_setup.internal","text":"The span describes the establishment of the HTTP connection. It includes the time it takes to resolve the DNS, establish the socket connection, and perform the…","url":"/domains/runtime#signals","meta":"development · internal"},{"type":"span","id":"span.dotnet.http.request.wait_for_connection.internal","text":"The span describes the time it takes for the HTTP request to obtain a connection from the connection pool.","url":"/domains/runtime#signals","meta":"development · internal"},{"type":"span","id":"span.dotnet.socket.connect.internal","text":"The span describes the establishment of the socket connection.","url":"/domains/runtime#signals","meta":"development · internal"},{"type":"span","id":"span.dotnet.tls.handshake.internal","text":"The span describes TLS client or server handshake performed with System.Net.Security.SslStream.","url":"/domains/runtime#signals","meta":"development · internal"},{"type":"span","id":"span.dynamodb.batchgetitem.client","text":"This span represents a DynamoDB.BatchGetItem call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.batchwriteitem.client","text":"This span represents a DynamoDB.BatchWriteItem call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.createtable.client","text":"This span represents a DynamoDB.CreateTable call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.deleteitem.client","text":"This span represents a DynamoDB.DeleteItem call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.deletetable.client","text":"This span represents a DynamoDB.DeleteTable call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.describetable.client","text":"This span represents a DynamoDB.DescribeTable call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.getitem.client","text":"This span represents a DynamoDB.GetItem call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.listtables.client","text":"This span represents a DynamoDB.ListTables call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.putitem.client","text":"This span represents a DynamoDB.PutItem call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.query.client","text":"This span represents a DynamoDB.Query call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.scan.client","text":"This span represents a DynamoDB.Scan call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.updateitem.client","text":"This span represents a DynamoDB.UpdateItem call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.dynamodb.updatetable.client","text":"This span represents a DynamoDB.UpdateTable call.","url":"/domains/cloud#signals","meta":"development · client"},{"type":"span","id":"span.gen_ai.create_agent.client","text":"Describes GenAI agent creation and is usually applicable when working with remote agent services.","url":"/domains/gen-ai#signals","meta":"deprecated · client"},{"type":"span","id":"span.gen_ai.embeddings.client","text":"Describes GenAI embeddings span - a request to a Generative AI model or service that generates an embeddings based on the input. The gen_ai.operation.name SHOU…","url":"/domains/gen-ai#signals","meta":"deprecated · client"},{"type":"span","id":"span.gen_ai.execute_tool.internal","text":"Describes tool execution span.","url":"/domains/gen-ai#signals","meta":"deprecated · internal"},{"type":"span","id":"span.gen_ai.inference.client","text":"This span represents a client call to Generative AI model or service that generates a response or requests a tool call based on the input prompt.","url":"/domains/gen-ai#signals","meta":"deprecated · client"},{"type":"span","id":"span.gen_ai.invoke_agent.client","text":"Describes GenAI agent invocation over a remote service.","url":"/domains/gen-ai#signals","meta":"deprecated · client"},{"type":"span","id":"span.gen_ai.invoke_agent.internal","text":"Describes GenAI agent invocation within the same process.","url":"/domains/gen-ai#signals","meta":"deprecated · internal"},{"type":"span","id":"span.gen_ai.invoke_workflow.internal","text":"Represents an operation that executes a coordinated process composed of multiple agents or other operations involving generative AI.","url":"/domains/gen-ai#signals","meta":"deprecated · internal"},{"type":"span","id":"span.gen_ai.retrieval.client","text":"Describes GenAI retrieval span - a request to a Generative AI service or framework that retrieves relevant information or context from a vector database or sea…","url":"/domains/gen-ai#signals","meta":"deprecated · client"},{"type":"span","id":"span.graphql.server","text":"This span represents an incoming operation on a GraphQL server implementation.","url":"/domains/http#signals","meta":"development · server"},{"type":"span","id":"span.http.client","text":"This span represents an outbound HTTP request.","url":"/domains/http#signals","meta":"stable · client"},{"type":"span","id":"span.http.server","text":"This span represents an inbound HTTP request.","url":"/domains/http#signals","meta":"stable · server"},{"type":"span","id":"span.mcp.client","text":"This span describes the MCP call from the client side.","url":"/domains/gen-ai#signals","meta":"deprecated · client"},{"type":"span","id":"span.mcp.server","text":"This span describes the processing of the MCP request or notification initiated by the peer.","url":"/domains/gen-ai#signals","meta":"deprecated · server"},{"type":"span","id":"span.openai.inference.client","text":"Semantic Conventions for OpenAI client spans extend and override the semantic conventions for Gen AI Spans.","url":"/domains/gen-ai#signals","meta":"deprecated · client"},{"type":"span","id":"span.rpc.call.client","text":"This span represents an outgoing Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"release_candidate · client"},{"type":"span","id":"span.rpc.call.server","text":"This span represents an incoming Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"release_candidate · server"},{"type":"span","id":"span.rpc.connect_rpc.call.client","text":"This span represents an outgoing Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"development · client"},{"type":"span","id":"span.rpc.connect_rpc.call.server","text":"This span represents an incoming Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"development · server"},{"type":"span","id":"span.rpc.dubbo.call.client","text":"This span represents an outgoing Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"release_candidate · client"},{"type":"span","id":"span.rpc.dubbo.call.server","text":"This span represents an incoming Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"release_candidate · server"},{"type":"span","id":"span.rpc.grpc.call.client","text":"This span represents an outgoing Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"release_candidate · client"},{"type":"span","id":"span.rpc.grpc.call.server","text":"This span represents an incoming Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"release_candidate · server"},{"type":"span","id":"span.rpc.jsonrpc.call.client","text":"This span represents an outgoing Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"development · client"},{"type":"span","id":"span.rpc.jsonrpc.call.server","text":"This span represents an incoming Remote Procedure Call (RPC).","url":"/domains/rpc#signals","meta":"development · server"},{"type":"event","id":"gen_ai.client.inference.operation.details","text":"Describes the details of a GenAI completion request including chat history and parameters.","url":"/domains/gen-ai#signals","meta":"development"},{"type":"event","id":"gen_ai.client.operation.exception","text":"This event represents an exception that occurred during a Generative AI client operation, such as API errors, rate limiting, model errors, timeouts, or other e…","url":"/domains/gen-ai#signals","meta":"development"},{"type":"event","id":"gen_ai.evaluation.result","text":"This event captures the result of evaluating GenAI output for quality, accuracy, or other characteristics. This event SHOULD be parented to GenAI operation spa…","url":"/domains/gen-ai#signals","meta":"development"},{"type":"span","id":"gen_ai.create_agent.client","text":"Describes GenAI agent creation and is usually applicable when working with remote agent services.","url":"/domains/gen-ai#signals","meta":"development · client"},{"type":"span","id":"gen_ai.embeddings.client","text":"Describes GenAI embeddings span - a request to a Generative AI model or service that generates an embeddings based on the input.","url":"/domains/gen-ai#signals","meta":"development · client"},{"type":"span","id":"gen_ai.execute_tool.internal","text":"Describes tool execution span.","url":"/domains/gen-ai#signals","meta":"development · internal"},{"type":"span","id":"gen_ai.fetch_response.client","text":"Describes a request to a Generative AI provider that fetches a previously generated model response by its identifier.","url":"/domains/gen-ai#signals","meta":"development · client"},{"type":"span","id":"gen_ai.inference.client","text":"This span represents a client call to Generative AI model or service that generates a response or requests a tool call based on the input prompt.","url":"/domains/gen-ai#signals","meta":"development · client"},{"type":"span","id":"gen_ai.invoke_agent.client","text":"Describes GenAI agent invocation over a remote service.","url":"/domains/gen-ai#signals","meta":"development · client"},{"type":"span","id":"gen_ai.invoke_agent.internal","text":"Describes GenAI agent invocation within the same process.","url":"/domains/gen-ai#signals","meta":"development · internal"},{"type":"span","id":"gen_ai.invoke_workflow.internal","text":"Represents an operation that executes a coordinated process composed of multiple agents or other operations involving generative AI.","url":"/domains/gen-ai#signals","meta":"development · internal"},{"type":"span","id":"gen_ai.memory.client","text":"Describes a memory operation, including memory store lifecycle operations and memory record operations.","url":"/domains/gen-ai#signals","meta":"development · client"},{"type":"span","id":"gen_ai.plan.internal","text":"Represents an agent planning or task decomposition phase.","url":"/domains/gen-ai#signals","meta":"development · internal"},{"type":"span","id":"gen_ai.retrieval.client","text":"Describes GenAI retrieval span - a request to a Generative AI service or framework that retrieves relevant information or context from a vector database or sea…","url":"/domains/gen-ai#signals","meta":"development · client"},{"type":"span","id":"mcp.client","text":"This span describes the MCP call from the client side.","url":"/domains/gen-ai#signals","meta":"development · client"},{"type":"span","id":"mcp.server","text":"This span describes the processing of the MCP request or notification initiated by the peer.","url":"/domains/gen-ai#signals","meta":"development · server"},{"type":"requirement","id":"Clear Baggage in the Context","text":"To avoid sending any name/value pairs to an untrusted process, the Baggage API MUST provide a way to remove all baggage entries from a context.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#clear-baggage-in-the-context","meta":"MUST · Stable"},{"type":"requirement","id":"Conflict Resolution","text":"If a new name/value pair is added and its name is the same as an existing name, then the new pair MUST take precedence.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#conflict-resolution","meta":"MUST · Stable"},{"type":"requirement","id":"Context Interaction","text":"If an implementation of this API does not operate directly on the Context, it MUST provide the following functionality to interact with a Context instance:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#context-interaction","meta":"MUST · Stable"},{"type":"requirement","id":"Context Interaction","text":"The functionality listed above is necessary because API users SHOULD NOT have access to the Context Key used by the Baggage API implementation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#context-interaction","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Context Interaction","text":"If the language has support for implicitly propagated Context (see here), the API SHOULD also provide the following functionality:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#context-interaction","meta":"SHOULD · Stable"},{"type":"requirement","id":"Context Interaction","text":"All the above functionalities operate solely on the context API, and they MAY be exposed as static methods on the baggage module, as static methods on a class inside the baggage module (it MAY be named BaggageUtilities), or on the Baggage …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#context-interaction","meta":"MAY · Stable"},{"type":"requirement","id":"Context Interaction","text":"This functionality SHOULD be fully implemented in the API when possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#context-interaction","meta":"SHOULD · Stable"},{"type":"requirement","id":"Get All Values","text":"The order of name/value pairs MUST NOT be significant.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#get-all-values","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Get Value","text":"To access the value for a name/value pair set by a prior event, the Baggage API MUST provide a function that takes the name as input, and returns a value associated with the given name, or null if the given name is not present.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#get-value","meta":"MUST · Stable"},{"type":"requirement","id":"Get Value","text":"REQUIRED parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#get-value","meta":"REQUIRED · Stable"},{"type":"requirement","id":"Overview","text":"Each name in Baggage MUST be associated with exactly one value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#overview","meta":"MUST · Stable"},{"type":"requirement","id":"Overview","text":"Language API SHOULD NOT restrict which strings are used as baggage names.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#overview","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Overview","text":"Language API MUST accept any valid UTF-8 string as baggage value in Set and return the same value from Get.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#overview","meta":"MUST · Stable"},{"type":"requirement","id":"Overview","text":"Language API MUST treat both baggage names and values as case sensitive.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#overview","meta":"MUST · Stable"},{"type":"requirement","id":"Overview","text":"Depending on language idioms, a language API MAY implement these functions by interacting with the baggage via the Context directly.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#overview","meta":"MAY · Stable"},{"type":"requirement","id":"Overview","text":"The Baggage API MUST be fully functional in the absence of an installed SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#overview","meta":"MUST · Stable"},{"type":"requirement","id":"Overview","text":"The Baggage container MUST be immutable, so that the containing Context also remains immutable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#overview","meta":"MUST · Stable"},{"type":"requirement","id":"Propagation","text":"Baggage MAY be propagated across process boundaries or across any arbitrary boundaries (process, $OTHERBOUNDARY1, $OTHERBOUNDARY2, etc) for various reasons.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#propagation","meta":"MAY · Stable"},{"type":"requirement","id":"Propagation","text":"The API layer or an extension package MUST include the following Propagators:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#propagation","meta":"MUST · Stable"},{"type":"requirement","id":"Remove Value","text":"To delete a name/value pair, the Baggage API MUST provide a function which takes a name as input.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#remove-value","meta":"MUST · Stable"},{"type":"requirement","id":"Remove Value","text":"Depending on language idioms, a language API MAY implement these functions by using a Builder pattern and exposing a way to construct a Builder from a Baggage.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#remove-value","meta":"MAY · Stable"},{"type":"requirement","id":"Remove Value","text":"REQUIRED parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#remove-value","meta":"REQUIRED · Stable"},{"type":"requirement","id":"Set Value","text":"To record the value for a name/value pair, the Baggage API MUST provide a function which takes a name, and a value as input.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#set-value","meta":"MUST · Stable"},{"type":"requirement","id":"Set Value","text":"Depending on language idioms, a language API MAY implement these functions by using a Builder pattern and exposing a way to construct a Builder from a Baggage.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#set-value","meta":"MAY · Stable"},{"type":"requirement","id":"Set Value","text":"REQUIRED parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#set-value","meta":"REQUIRED · Stable"},{"type":"requirement","id":"Set Value","text":"OPTIONAL parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/baggage/api.md#set-value","meta":"OPTIONAL · Stable"},{"type":"requirement","id":"Array Values","text":"Values that represent ordered sequences of other values (such as arrays, vectors, ordered lists, slices) SHOULD be converted to AnyValue's array_value field.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#array-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Associative Arrays With Non-Unique Keys","text":"Values that represent an associative arrays with non-unique keys where multiple values may be associated with the same key (also sometimes known as multimaps, multidicts) SHOULD be converted to AnyValue's kvlist_value field.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#associative-arrays-with-non-unique-keys","meta":"SHOULD · Development"},{"type":"requirement","id":"Associative Arrays With Non-Unique Keys","text":"The resulting kvlistvalue field MUST list each key only once and the value of each element of kvlistvalue field MUST be an array represented using AnyValue's arrayvalue field, each element of the arrayvalue representing one value of source…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#associative-arrays-with-non-unique-keys","meta":"MUST · Development"},{"type":"requirement","id":"Associative Arrays With Non-Unique Keys","text":"SHOULD be converted to:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#associative-arrays-with-non-unique-keys","meta":"SHOULD · Development"},{"type":"requirement","id":"Associative Arrays With Unique Keys","text":"Values that represent associative arrays with unique keys (also often known as maps, dictionaries or key-value stores) SHOULD be converted to AnyValue's kvlist_value field.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#associative-arrays-with-unique-keys","meta":"SHOULD · Development"},{"type":"requirement","id":"Associative Arrays With Unique Keys","text":"If the keys of the source array are not strings, they MUST be converted to strings by any means available, often via a toString() or stringify functions available in programming languages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#associative-arrays-with-unique-keys","meta":"MUST · Development"},{"type":"requirement","id":"Associative Arrays With Unique Keys","text":"The conversion function MUST be chosen in a way that ensures that the resulting string keys are unique in the target array.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#associative-arrays-with-unique-keys","meta":"MUST · Development"},{"type":"requirement","id":"Associative Arrays With Unique Keys","text":"The value part of each element of the source array SHOULD be converted to AnyValue recursively.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#associative-arrays-with-unique-keys","meta":"SHOULD · Development"},{"type":"requirement","id":"Associative Arrays With Unique Keys","text":"For example a JSON object {\"a\": 123, \"b\": \"def\"} SHOULD be converted to","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#associative-arrays-with-unique-keys","meta":"SHOULD · Development"},{"type":"requirement","id":"Byte Sequences","text":"Byte sequences (e.g. Go's []byte slice or raw byte content of a file) SHOULD be converted to AnyValue's bytes_value field.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#byte-sequences","meta":"SHOULD · Development"},{"type":"requirement","id":"Converting to AnyValue","text":"Implementations that have source data in any form, such as in-memory objects or data coming from other formats that needs to be converted to AnyValue SHOULD follow the rules described below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#converting-to-anyvalue","meta":"SHOULD · Development"},{"type":"requirement","id":"Empty Values","text":"If the source data has no type associated with it and is empty, null, nil or otherwise indicates absence of data it SHOULD be converted to an empty AnyValue, where all the fields are unset.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#empty-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Empty Values","text":"Empty values which has a type associated with them (e.g. empty associative array) SHOULD be converted using the corresponding rules defined for the types above.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#empty-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Enumerations","text":"Values, which belong to a limited enumerated set (e.g. a Java enum), SHOULD be converted to AnyValue's string_value field with the value of the string set to the symbolic name of the enumeration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#enumerations","meta":"SHOULD · Development"},{"type":"requirement","id":"Enumerations","text":"If it is not possible to obtain the symbolic name of the enumeration, the implementation SHOULD map enumeration values to AnyValue's int_value field set to the enum's ordinal value, when such an ordinal number is naturally obtainable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#enumerations","meta":"SHOULD · Development"},{"type":"requirement","id":"Enumerations","text":"If it is also not possible to obtain the ordinal value, the enumeration SHOULD be converted to AnyValue's bytes_value field in any manner that the implementation deems reasonable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#enumerations","meta":"SHOULD · Development"},{"type":"requirement","id":"Floating Point Values","text":"Floating point values which are within the range and precision of IEEE 754 64-bit floating point numbers (including IEEE 32-bit floating point values) SHOULD be converted to AnyValue's double_value field.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#floating-point-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Floating Point Values","text":"Floating point values which are outside the range or precision of IEEE 754 64-bit floating point numbers (e.g. IEEE 128-bit floating bit values) SHOULD be converted to AnyValue's string_value field using decimal floating point representati…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#floating-point-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Integer Values","text":"Integer values which are within the range of 64 bit signed numbers [-2^63..2^63-1] SHOULD be converted to AnyValue's int_value field.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#integer-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Integer Values","text":"Integer values which are outside the range of 64 bit signed numbers SHOULD be converted to AnyValue's string_value field using decimal representation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#integer-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Other Values","text":"Any other values not listed above SHOULD be converted to AnyValue's string_value field if the source data can be serialized to a string (can be stringified) using toString() or stringify functions available in programming languages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#other-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Other Values","text":"If the source data cannot be serialized to a string then the value SHOULD be converted AnyValue's bytes_value field by serializing it into a byte sequence by any means available.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#other-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Other Values","text":"If the source data cannot be serialized neither to a string nor to a byte sequence then it SHOULD by converted to an empty AnyValue.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#other-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Sets","text":"Unordered collections of unique values (such as Java Sets, C++ sets, Python Sets) SHOULD be converted to AnyValue's array_value field, where each element of the set becomes an element of the array.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#sets","meta":"SHOULD · Development"},{"type":"requirement","id":"String Values","text":"String values which are valid UTF-8 sequences SHOULD be converted to AnyValue's string_value field.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#string-values","meta":"SHOULD · Development"},{"type":"requirement","id":"String Values","text":"String values which are not valid Unicode sequences SHOULD be converted to AnyValue's bytes_value with the bytes representing the string in the original order and format of the source string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/attribute-type-mapping.md#string-values","meta":"SHOULD · Development"},{"type":"requirement","id":"Instrumentation Scope","text":"This tuple SHOULD uniquely identify the logical unit of software that emits the telemetry.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/instrumentation-scope.md#instrumentation-scope","meta":"SHOULD · Stable"},{"type":"requirement","id":"Instrumentation Scope","text":"The instrumentation scope's name SHOULD be specified to identify the InstrumentationScope name.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/instrumentation-scope.md#instrumentation-scope","meta":"SHOULD · Stable"},{"type":"requirement","id":"Instrumentation Scope","text":"The instrumentation scope's optional Schema URL SHOULD identify the Telemetry Schema that the instrumentation's emitted telemetry conforms to.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/instrumentation-scope.md#instrumentation-scope","meta":"SHOULD · Stable"},{"type":"requirement","id":"Dropped Attributes Count","text":"OpenTelemetry dropped attributes count MUST be reported as a key-value pair associated with the corresponding data entity (e.g. Span, Span Link, Span Event, Metric data point, LogRecord, etc).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#dropped-attributes-count","meta":"MUST · Stable"},{"type":"requirement","id":"Dropped Attributes Count","text":"The key name MUST be otel.droppedattributescount.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#dropped-attributes-count","meta":"MUST · Stable"},{"type":"requirement","id":"Dropped Events Count","text":"OpenTelemetry Span's dropped events count MUST be reported as a key-value pair associated with the Span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#dropped-events-count","meta":"MUST · Stable"},{"type":"requirement","id":"Dropped Events Count","text":"The key name MUST be otel.droppedeventscount.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#dropped-events-count","meta":"MUST · Stable"},{"type":"requirement","id":"Dropped Links Count","text":"OpenTelemetry Span's dropped links count MUST be reported as a key-value pair associated with the Span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#dropped-links-count","meta":"MUST · Stable"},{"type":"requirement","id":"Dropped Links Count","text":"The key name MUST be otel.droppedlinkscount.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#dropped-links-count","meta":"MUST · Stable"},{"type":"requirement","id":"Instrumentation Scope Attributes","text":"Exporters to formats that don't have a concept that is equivalent to the Scope SHOULD record the attributes at the most suitable place in their corresponding format, typically at the Span, Metric or LogRecord equivalent.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#instrumentation-scope-attributes","meta":"SHOULD · Stable"},{"type":"requirement","id":"InstrumentationScope","text":"OpenTelemetry InstrumentationScope's fields MUST be reported as key-value pairs associated with the Span, Metric Data Point or LogRecord using the following mapping:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#instrumentationscope","meta":"MUST · Stable"},{"type":"requirement","id":"InstrumentationScope","text":"The following deprecated aliases MUST also be reported with exact same values for backward compatibility reasons:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#instrumentationscope","meta":"MUST · Stable"},{"type":"requirement","id":"OpenTelemetry Transformation to non-OTLP Formats","text":"Note: when a format has a direct semantic equivalent for a particular field or concept then the recommendation in this document MUST be ignored.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#opentelemetry-transformation-to-non-otlp-formats","meta":"MUST · Stable"},{"type":"requirement","id":"Span Status","text":"Span Status MUST be reported as key-value pairs associated with the Span, unless the Status is UNSET.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#span-status","meta":"MUST · Stable"},{"type":"requirement","id":"Span Status","text":"In the latter case it MUST NOT be reported.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#span-status","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Span Status","text":"MUST NOT be set if the status code is UNSET. | OK | Recommended | | otel.statusdescription | string | Description of the Status if it has a value, otherwise not set. | resource not found | Recommended |","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#span-status","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Span Status","text":"otel.status_code MUST be one of the following:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/mapping-to-non-otlp.md#span-status","meta":"MUST · Stable"},{"type":"requirement","id":"AnyValue","text":"A homogeneous array MUST NOT contain values of different types.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#anyvalue","meta":"MUST NOT · Stable"},{"type":"requirement","id":"AnyValue","text":"APIs SHOULD be documented in a way to communicate to users that using array and map values may carry higher performance overhead compared to primitive values.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#anyvalue","meta":"SHOULD · Stable"},{"type":"requirement","id":"AnyValue","text":"AnyValues expressing an empty value, a numerical value of zero, an empty string, or an empty array are considered meaningful and MUST be stored and passed on to processors / exporters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#anyvalue","meta":"MUST · Stable"},{"type":"requirement","id":"AnyValue","text":"While null is a valid attribute value, its use within homogeneous arrays SHOULD generally be avoided unless language constraints make this impossible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#anyvalue","meta":"SHOULD · Stable"},{"type":"requirement","id":"AnyValue","text":"However, if it is impossible to make sure that no null values are accepted (e.g. in languages that do not have appropriate compile-time type checking), null values within arrays MUST be preserved as-is (i.e., passed on to processors / expo…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#anyvalue","meta":"MUST · Stable"},{"type":"requirement","id":"AnyValue","text":"If exporters do not support exporting null values, they MAY replace those values by 0, false, or empty strings.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#anyvalue","meta":"MAY · Stable"},{"type":"requirement","id":"AnyValue representation for non-OTLP protocols","text":"For protocols that do not natively support some of the AnyValue types, those values SHOULD be represented as strings following the encoding rules below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#anyvalue-representation-for-non-otlp-protocols","meta":"SHOULD · Stable"},{"type":"requirement","id":"Arrays","text":"Arrays, except for byte arrays, SHOULD be represented as JSON arrays.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#arrays","meta":"SHOULD · Stable"},{"type":"requirement","id":"Arrays","text":"Array elements SHOULD be represented as JSON values using the following rules:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#arrays","meta":"SHOULD · Stable"},{"type":"requirement","id":"Arrays","text":"Integers and floating point numbers as JSON numbers, except that the special floating point values NaN and Infinity SHOULD be represented as JSON strings \"NaN\", \"Infinity\", and \"-Infinity\",","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#arrays","meta":"SHOULD · Stable"},{"type":"requirement","id":"Attribute","text":"An Attribute is a key-value pair, which MUST have the following properties:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute","text":"The attribute key MUST be a non-null and non-empty string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute","text":"The attribute value MUST be one of types defined in AnyValue.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute Collection representation for non-OTLP","text":"For non-OTLP protocols that need to represent an Attribute Collection as a string, the RECOMMENDED form is a JSON object.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-collection-representation-for-non-otlp","meta":"RECOMMENDED · Stable"},{"type":"requirement","id":"Attribute Collection representation for non-OTLP","text":"Each attribute key SHOULD be represented as a JSON object member name.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-collection-representation-for-non-otlp","meta":"SHOULD · Stable"},{"type":"requirement","id":"Attribute Collection representation for non-OTLP","text":"Each attribute value SHOULD be represented as the corresponding JSON object member value and follow the encoding rules defined in AnyValue representation for non-OTLP protocols, as it would be represented as an element in an array and a va…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-collection-representation-for-non-otlp","meta":"SHOULD · Stable"},{"type":"requirement","id":"Attribute Collections","text":"Implementation MUST by default enforce that the exported attribute collections contain only unique keys.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-collections","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute Collections","text":"Setting an attribute with the same key as an existing attribute SHOULD overwrite the existing attribute's value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-collections","meta":"SHOULD · Stable"},{"type":"requirement","id":"Attribute Collections","text":"Implementations MAY have an option to allow exporting attribute collections with duplicate keys (e.g. for better performance).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-collections","meta":"MAY · Stable"},{"type":"requirement","id":"Attribute Collections","text":"If such option is provided, it MUST be documented that for many receivers, handling of maps with duplicate keys is unpredictable and it is the users' responsibility to ensure keys are not duplicate.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-collections","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute Limits","text":"By default an SDK SHOULD apply truncation as per the list of configurable parameters below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"SHOULD · Stable"},{"type":"requirement","id":"Attribute Limits","text":"if it is a string, if it exceeds that limit (counting any character in it as 1), SDKs MUST truncate that value, so that its length is at most equal to the limit,","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute Limits","text":"if it is a byte array, if its length exceeds that limit (counting each byte as 1), SDKs MUST truncate that value, so that its length is at most equal to the limit,","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute Limits","text":"otherwise a value MUST NOT be truncated;","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Attribute Limits","text":"if adding an attribute to an attribute collection would result in exceeding the limit (counting each attribute in the collection as 1), the SDK MUST discard that attribute, so that the total number of attributes in an attribute collection …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute Limits","text":"otherwise an attribute MUST NOT be discarded.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Attribute Limits","text":"There MAY be a log emitted to indicate to the user that an attribute was truncated or discarded.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MAY · Stable"},{"type":"requirement","id":"Attribute Limits","text":"To prevent excessive logging, the log MUST NOT be emitted more than once per record on which an attribute is set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Attribute Limits","text":"If the SDK implements the limits above, it MUST provide a way to change these limits programmatically.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute Limits","text":"Names of the configuration options SHOULD be the same as in the list below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"SHOULD · Stable"},{"type":"requirement","id":"Attribute Limits","text":"An SDK MAY implement model-specific limits, for example SpanAttributeCountLimit or LogRecordAttributeCountLimit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MAY · Stable"},{"type":"requirement","id":"Attribute Limits","text":"If both a general and a model-specific limit are implemented, then the SDK MUST first attempt to use the model-specific limit, if it isn't set, then the SDK MUST attempt to use the general limit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute Limits","text":"If neither are defined, then the SDK MUST try to use the model-specific limit default value, followed by the global limit default value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-limits","meta":"MUST · Stable"},{"type":"requirement","id":"Attribute representation for non-OTLP","text":"For non-OTLP protocols that need to represent a single Attribute as a string, the RECOMMENDED form is a JSON object containing a single name/value pair (member).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-representation-for-non-otlp","meta":"RECOMMENDED · Stable"},{"type":"requirement","id":"Attribute representation for non-OTLP","text":"The attribute key SHOULD be represented as a JSON object member name.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-representation-for-non-otlp","meta":"SHOULD · Stable"},{"type":"requirement","id":"Attribute representation for non-OTLP","text":"The attribute value SHOULD be represented as a JSON object member value and follow the encoding rules defined in AnyValue representation for non-OTLP protocols, as it would be represented as an element in an array and a value in a map.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#attribute-representation-for-non-otlp","meta":"SHOULD · Stable"},{"type":"requirement","id":"Booleans","text":"Booleans SHOULD be represented as JSON booleans.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#booleans","meta":"SHOULD · Stable"},{"type":"requirement","id":"Byte Arrays","text":"Byte arrays SHOULD be Base64-encoded.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#byte-arrays","meta":"SHOULD · Stable"},{"type":"requirement","id":"Byte Arrays","text":"They SHOULD NOT be encoded as JSON strings (with explicit surrounding quotes).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#byte-arrays","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Empty Values","text":"Empty values SHOULD be represented as the empty string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#empty-values","meta":"SHOULD · Stable"},{"type":"requirement","id":"Empty Values","text":"They SHOULD NOT be encoded as a JSON string (with explicit surrounding quotes).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#empty-values","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Exempt Entities","text":"Resource attributes SHOULD be exempt from the limits described above as resources are not susceptible to the scenarios (auto-instrumentation) that result in excessive attributes count or size.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#exempt-entities","meta":"SHOULD · Stable"},{"type":"requirement","id":"Floating Point Numbers","text":"Floating point numbers SHOULD be represented as JSON numbers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#floating-point-numbers","meta":"SHOULD · Stable"},{"type":"requirement","id":"Floating Point Numbers","text":"The special floating point values NaN and Infinity SHOULD be represented as NaN, Infinity, and -Infinity.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#floating-point-numbers","meta":"SHOULD · Stable"},{"type":"requirement","id":"Floating Point Numbers","text":"They SHOULD NOT be encoded as JSON strings (with explicit surrounding quotes).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#floating-point-numbers","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Integers","text":"Integers SHOULD be represented as JSON numbers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#integers","meta":"SHOULD · Stable"},{"type":"requirement","id":"Maps","text":"Maps SHOULD be represented as JSON objects.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#maps","meta":"SHOULD · Stable"},{"type":"requirement","id":"Maps","text":"Map keys SHOULD be represented as JSON string member names.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#maps","meta":"SHOULD · Stable"},{"type":"requirement","id":"Maps","text":"Map values SHOULD be represented using the same rules as array elements.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#maps","meta":"SHOULD · Stable"},{"type":"requirement","id":"map<string, AnyValue>","text":"Case sensitivity of keys MUST be preserved.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#mapstring-anyvalue","meta":"MUST · Stable"},{"type":"requirement","id":"map<string, AnyValue>","text":"The implementation MUST by default enforce that the exported maps contain only unique keys.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#mapstring-anyvalue","meta":"MUST · Stable"},{"type":"requirement","id":"map<string, AnyValue>","text":"The implementation MAY have an option to allow exporting maps with duplicate keys (e.g. for better performance).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#mapstring-anyvalue","meta":"MAY · Stable"},{"type":"requirement","id":"map<string, AnyValue>","text":"If such option is provided, it MUST be documented that for many receivers, handling of maps with duplicate keys is unpredictable and it is the users' responsibility to ensure keys are not duplicate.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#mapstring-anyvalue","meta":"MUST · Stable"},{"type":"requirement","id":"Strings","text":"Strings SHOULD be represented as-is without any additional encoding.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#strings","meta":"SHOULD · Stable"},{"type":"requirement","id":"Strings","text":"They SHOULD NOT be encoded as JSON strings (with explicit surrounding quotes).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/common/README.md#strings","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"JSON Formats","text":"The fields SHOULD be recorded as top-level fields in the JSON structure.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/logging_trace_context.md#json-formats","meta":"SHOULD · Stable"},{"type":"requirement","id":"Other Structured Formats","text":"The fields SHOULD be recorded as top-level structured attributes of the log record as it is customary for the particular format.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/logging_trace_context.md#other-structured-formats","meta":"SHOULD · Stable"},{"type":"requirement","id":"Plain Text Formats","text":"The fields SHOULD be recorded according to the customary approach used for a particular format (e.g. field:value format for LTSV).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/logging_trace_context.md#plain-text-formats","meta":"SHOULD · Stable"},{"type":"requirement","id":"Syslog RFC5424","text":"Trace ID, span ID and traceflags SHOULD be recorded via SD-ID \"OpenTelemetry\".","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/logging_trace_context.md#syslog-rfc5424","meta":"SHOULD · Stable"},{"type":"requirement","id":"Creating Spans in OpenCensus","text":"When the shim is in place, all OpenCensus Spans MUST be sent through an OpenTelemetry Tracer as specified for the OpenTelemetry API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#creating-spans-in-opencensus","meta":"MUST · Deprecated"},{"type":"requirement","id":"Creating Spans in OpenCensus","text":"This mechanism SHOULD be seamless to the user in languages that allow discovery and auto injection of dependencies.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#creating-spans-in-opencensus","meta":"SHOULD · Deprecated"},{"type":"requirement","id":"Instrumentation Scope","text":"The shim MUST add an instrumentation scope name and version which identifies the shim.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#instrumentation-scope","meta":"MUST · Deprecated"},{"type":"requirement","id":"Known Incompatibilities","text":"OpenTelemetry does not support OpenCensus' GaugeHistogram type; these metrics MUST be dropped when using the bridge.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#known-incompatibilities-1","meta":"MUST · Deprecated"},{"type":"requirement","id":"OpenCensus Binary Context Propagation","text":"This adapter MUST provide an implementation of OpenCensus BinaryPropagator to write OpenCensus binary format using OpenTelemetry's context.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#opencensus-binary-context-propagation","meta":"MUST · Deprecated"},{"type":"requirement","id":"OpenCensus Binary Context Propagation","text":"The BinaryPropagator MUST be a TextMapPropagator if possible in the language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#opencensus-binary-context-propagation","meta":"MUST · Deprecated"},{"type":"requirement","id":"OpenCensus Binary Context Propagation","text":"Otherwise, the BinaryPropagator MUST be a library, which is expected to be used by OpenTelemetry gRPC instrumentation. gRPC instrumentation in those languages SHOULD NOT enable the BinaryPropagator by default, but SHOULD provide configurat…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#opencensus-binary-context-propagation","meta":"SHOULD NOT · Deprecated"},{"type":"requirement","id":"OpenCensus Compatibility","text":"> [!NOTE] > OpenCensus compatibility requirements are deprecated. > Existing OpenCensus shims MAY continue to be supported for backwards > compatibility, but implementing new OpenCensus compatibility is not required > by this specification…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#opencensus-compatibility","meta":"MAY · Deprecated"},{"type":"requirement","id":"Requirements","text":"This component MUST be an optional dependency.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#requirements","meta":"MUST · Deprecated"},{"type":"requirement","id":"Requirements","text":"This component MUST be an optional dependency","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#requirements-1","meta":"MUST · Deprecated"},{"type":"requirement","id":"Requirements","text":"MUST NOT require OpenTelemetry to be included in OpenCensus API distributions","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#requirements-1","meta":"MUST NOT · Deprecated"},{"type":"requirement","id":"Requirements","text":"SHOULD NOT require OpenCensus to depend on OpenTelemetry at runtime","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#requirements-1","meta":"SHOULD NOT · Deprecated"},{"type":"requirement","id":"Requirements","text":"MUST require few or no changes to OpenCensus","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#requirements-1","meta":"MUST · Deprecated"},{"type":"requirement","id":"Requirements","text":"MUST be compatible with push and pull exporters","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#requirements-1","meta":"MUST · Deprecated"},{"type":"requirement","id":"Requirements","text":"MUST support Gauges, Counters, Cumulative Histograms, and Summaries","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#requirements-1","meta":"MUST · Deprecated"},{"type":"requirement","id":"Requirements","text":"Is NOT REQUIRED to support Gauge Histograms","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#requirements-1","meta":"REQUIRED · Deprecated"},{"type":"requirement","id":"Requirements","text":"MUST support exemplar span context in language that provide utilities for recording span context in exemplars","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#requirements-1","meta":"MUST · Deprecated"},{"type":"requirement","id":"Resource","text":"The shim MUST discard the resource attached to OpenCensus metrics, and insert the resource provided during initialization, or fall back to the the default OpenTelemetry resource.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#resource","meta":"MUST · Deprecated"},{"type":"requirement","id":"Trace Bridge","text":"This layer MUST NOT rely on implementation specific details of the OpenTelemetry SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#trace-bridge","meta":"MUST NOT · Deprecated"},{"type":"requirement","id":"Trace Bridge","text":"This Shim Layer MUST NOT publicly expose any upstream OpenTelemetry API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opencensus.md#trace-bridge","meta":"MUST NOT · Deprecated"},{"type":"requirement","id":"Abstract","text":"This layer MUST NOT rely on implementation specific details of any SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#abstract","meta":"MUST NOT · Deprecated"},{"type":"requirement","id":"Abstract","text":"This Shim Layer MUST NOT publicly expose any upstream OpenTelemetry API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#abstract","meta":"MUST NOT · Deprecated"},{"type":"requirement","id":"Abstract","text":"Semantic convention mapping SHOULD NOT be performed, with the exception of error mapping, as described in the Set Tag and Log sections.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#abstract","meta":"SHOULD NOT · Deprecated"},{"type":"requirement","id":"Activate a Span","text":"If the specified Span is null, it MUST be set to a NonRecordableSpan wrapping an invalid SpanContext, to signal there is no active Span nor Baggage.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#activate-a-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Close","text":"OPTIONAL operation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#close","meta":"OPTIONAL · Deprecated"},{"type":"requirement","id":"Close","text":"If this operation is implemented for a specific OpenTracing language, it MUST close the underlying TracerProvider if it implements a \"closeable\" interface or method; otherwise it MUST be defined as a no-op operation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#close","meta":"MUST · Deprecated"},{"type":"requirement","id":"Close","text":"The Shim layer MUST protect against errors or exceptions raised while closing the underlying TracerProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#close","meta":"MUST · Deprecated"},{"type":"requirement","id":"Create an OpenTracing Tracer Shim","text":"This operation MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#create-an-opentracing-tracer-shim","meta":"MUST · Deprecated"},{"type":"requirement","id":"Create an OpenTracing Tracer Shim","text":"This operation MUST use this TracerProvider to obtain a Tracer with the name opentracing-shim along with the current shim library version.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#create-an-opentracing-tracer-shim","meta":"MUST · Deprecated"},{"type":"requirement","id":"Create an OpenTracing Tracer Shim","text":"The API MUST return an OpenTracing Tracer.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#create-an-opentracing-tracer-shim","meta":"MUST · Deprecated"},{"type":"requirement","id":"Extract","text":"TextMap and HttpHeaders formats MUST use their explicitly specified TextMapPropagator, if any, or else use the global TextMapPropagator.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#extract","meta":"MUST · Deprecated"},{"type":"requirement","id":"Extract","text":"The operation MUST return a SpanContext Shim instance with the extracted values if any of these conditions are met:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#extract","meta":"MUST · Deprecated"},{"type":"requirement","id":"Extract","text":"Otherwise, the operation MUST return null or empty value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#extract","meta":"MUST · Deprecated"},{"type":"requirement","id":"Extract","text":"Errors MAY be raised if either the Format is not recognized or no value could be extracted, depending on the specific OpenTracing Language API (e.g. Go and Python do, but Java may not).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#extract","meta":"MAY · Deprecated"},{"type":"requirement","id":"Finish","text":"If an explicit timestamp is specified, a conversion MUST be done to match the OpenTracing and OpenTelemetry units.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#finish","meta":"MUST · Deprecated"},{"type":"requirement","id":"Get Baggage Item","text":"This operation MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#get-baggage-item","meta":"MUST · Deprecated"},{"type":"requirement","id":"Get Context","text":"This operation MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#get-context","meta":"MUST · Deprecated"},{"type":"requirement","id":"Get the active Span","text":"This operation MUST immediately return null if the current OpenTelemetry Span's SpanContext is invalid and the current Baggage is empty, to signal there is no active Span nor Baggage.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#get-the-active-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Get the active Span","text":"If the current OpenTelemetry Span's SpanContext is invalid but the current Baggage is not empty, this operation MUST return a new Span Shim containing a no-op OpenTelemetry Span and the non-empty Baggage.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#get-the-active-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Get the active Span","text":"If there are matching OpenTelemetry Span and Span Shim objects in the current Context, the Span Shim MUST be returned.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#get-the-active-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Get the active Span","text":"Else, a new Span Shim containing the current OpenTelemetry Span and Baggage MUST be returned.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#get-the-active-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Implicit and Explicit support mismatch","text":"For languages with implicit in-process propagation support in OpenTelemetry and none in OpenTracing (i.e. no ScopeManager support), the Shim MUST only use explicit context propagation in its operations (e.g. when starting a new Span).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#implicit-and-explicit-support-mismatch","meta":"MUST · Deprecated"},{"type":"requirement","id":"Implicit and Explicit support mismatch","text":"For this case, the Shim MAY offer in-Development integration with the OpenTelemetry implicit in-process propagation via an explicit setting, warning the user incorrect parent values may be consumed:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#implicit-and-explicit-support-mismatch","meta":"MAY · Deprecated"},{"type":"requirement","id":"Inject","text":"TextMap and HttpHeaders formats MUST use their explicitly specified TextMapPropagator, if any, or else use the global TextMapPropagator.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#inject","meta":"MUST · Deprecated"},{"type":"requirement","id":"Inject","text":"It MUST inject any non-empty Baggage even amidst no valid SpanContext.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#inject","meta":"MUST · Deprecated"},{"type":"requirement","id":"Inject","text":"Errors MAY be raised if the specified Format is not recognized, depending on the specific OpenTracing Language API (e.g. Go and Python do, but Java may not).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#inject","meta":"MAY · Deprecated"},{"type":"requirement","id":"Log","text":"The Add Event's name parameter MUST be the value with the event key in the pair set, or else fallback to use the log literal string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#log","meta":"MUST · Deprecated"},{"type":"requirement","id":"Log","text":"If pair set contains an event=error entry, the values MUST be mapped to an Event with the conventions outlined in the Exception semantic conventions document:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#log","meta":"MUST · Deprecated"},{"type":"requirement","id":"Log","text":"If an explicit timestamp is specified, a conversion MUST be done to match the OpenTracing and OpenTelemetry units.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#log","meta":"MUST · Deprecated"},{"type":"requirement","id":"OpenTracing Compatibility","text":"> [!NOTE] > OpenTracing compatibility requirements are deprecated. > Existing OpenTracing shims MAY continue to be supported for backwards > compatibility, but implementing new OpenTracing compatibility is not required > by this specificat…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#opentracing-compatibility","meta":"MAY · Deprecated"},{"type":"requirement","id":"ScopeManager Shim","text":"For OpenTracing languages implementing the ScopeManager interface, its operations MUST be implemented using the OpenTelemetry Context Propagation API in order to get and set active Context instances.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#scopemanager-shim","meta":"MUST · Deprecated"},{"type":"requirement","id":"Set Baggage Item","text":"This operation MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#set-baggage-item","meta":"MUST · Deprecated"},{"type":"requirement","id":"Set Tag","text":"The error tag MUST be mapped to StatusCode:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#set-tag","meta":"MUST · Deprecated"},{"type":"requirement","id":"Set Tag","text":"If the type of the specified value is not supported by the OTel API, the value MUST be converted to a string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#set-tag","meta":"MUST · Deprecated"},{"type":"requirement","id":"Span Shim","text":"The OpenTracing Span operations MUST be implemented using the underlying OpenTelemetry Span and Baggage values with the help of a SpanContext Shim object.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#span-shim","meta":"MUST · Deprecated"},{"type":"requirement","id":"Span Shim","text":"The Log operations MUST be implemented using the OpenTelemetry Span's Add Events operations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#span-shim","meta":"MUST · Deprecated"},{"type":"requirement","id":"Span Shim","text":"The Set Tag operations MUST be implemented using the OpenTelemetry Span's Set Attributes operations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#span-shim","meta":"MUST · Deprecated"},{"type":"requirement","id":"Span Shim and SpanContext Shim relationship","text":"As per the OpenTracing Specification, the OpenTracing SpanContext Shim MUST contain Baggage data and it MUST be immutable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#span-shim-and-spancontext-shim-relationship","meta":"MUST · Deprecated"},{"type":"requirement","id":"Span Shim and SpanContext Shim relationship","text":"In turn, the OpenTracing Span Shim MUST contain a SpanContext Shim.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#span-shim-and-spancontext-shim-relationship","meta":"MUST · Deprecated"},{"type":"requirement","id":"Span Shim and SpanContext Shim relationship","text":"When updating its associated baggage, the OpenTracing Span MUST set its OpenTracing SpanContext Shim to a new instance containing the updated Baggage.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#span-shim-and-spancontext-shim-relationship","meta":"MUST · Deprecated"},{"type":"requirement","id":"Span Shim and SpanContext Shim relationship","text":"Operations accessing the associated Baggage MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#span-shim-and-spancontext-shim-relationship","meta":"MUST · Deprecated"},{"type":"requirement","id":"SpanContext Shim","text":"SpanContext Shim MUST be immutable and MUST contain the associated SpanContext and Baggage values.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#spancontext-shim","meta":"MUST · Deprecated"},{"type":"requirement","id":"Start a new Span","text":"All values in the list MUST be added as Links with the reference type value as a Link attribute, i.e. opentracing.reftype set to followsfrom or child_of.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#start-a-new-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Start a new Span","text":"If a list of Span references is specified, the union of their Baggage values MUST be used as the initial Baggage of the newly created Span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#start-a-new-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Start a new Span","text":"If no such list of references is specified, the current Baggage MUST be used as the initial value of the newly created Span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#start-a-new-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Start a new Span","text":"If an initial set of tags is specified, the values MUST be set at the creation time of the OpenTelemetry Span, as opposed to setting them after the Span is already created.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#start-a-new-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Start a new Span","text":"If an initial set of tags is specified and the OpenTracing error tag is included, after the OpenTelemetry Span was created the Shim layer MUST perform the same error handling as described in the Set Tag operation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#start-a-new-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Start a new Span","text":"If an explicit start timestamp is specified, a conversion MUST be done to match the OpenTracing and OpenTelemetry units.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#start-a-new-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Start a new Span","text":"The API MUST return an OpenTracing Span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/opentracing.md#start-a-new-span","meta":"MUST · Deprecated"},{"type":"requirement","id":"Counters","text":"A Prometheus Counter MUST be converted to an OTLP Sum with is_monotonic equal to true.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#counters","meta":"MUST · Mixed"},{"type":"requirement","id":"Counters","text":"Exemplars on the Prometheus Counter Sample MUST be converted to OpenTelemetry Exemplars on the OpenTelemetry Sum data point following the rules in Exemplars.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#counters","meta":"MUST · Mixed"},{"type":"requirement","id":"Differences between Prometheus formats","text":"Exemplars MUST be dropped if they are not supported.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#differences-between-prometheus-formats","meta":"MUST · Mixed"},{"type":"requirement","id":"Differences between Prometheus formats","text":"If the specification below requires producing a Prometheus Info-typed metric, a Prometheus Gauge with an additional _info name suffix MUST be produced if Info-typed metrics are not supported.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#differences-between-prometheus-formats","meta":"MUST · Mixed"},{"type":"requirement","id":"Differences between Prometheus formats","text":"If the specification below requires producing a Prometheus StateSet-typed metric, a Prometheus Gauge MUST be produced instead if StateSet-typed metrics are not supported.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#differences-between-prometheus-formats","meta":"MUST · Mixed"},{"type":"requirement","id":"Differences between Prometheus formats","text":"Exponential (Native) Histograms SHOULD be dropped if they are not supported, or MAY be converted to fixed-bucket histograms.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#differences-between-prometheus-formats","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Dropped Types","text":"The following Prometheus types MUST be dropped:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#dropped-types","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplar Conversion","text":"When an exemplar is converted per the metric-type-specific sections above, the OpenTelemetry Exemplar MUST be converted to a Prometheus exemplar if the Prometheus (push or pull) protocol being used supports them, as follows:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exemplar-conversion","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplar Conversion","text":"If present, the OpenTelemetry Exemplar's Trace ID and Span ID MUST be added as Exemplar labels using the traceid and spanid keys, respectively.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exemplar-conversion","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplar Conversion","text":"These labels MUST take precedence over labels from filtered_attributes in cases where there is a key collision.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exemplar-conversion","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplar Conversion","text":"Timestamps MUST be added as timestamps on the Prometheus exemplar.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exemplar-conversion","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplar Conversion","text":"filtered_attributes MUST be added as labels on the Prometheus exemplar, unless they would exceed the Prometheus protocol's exemplar limits.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exemplar-conversion","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplars","text":"Prometheus Exemplars MUST be converted to OpenTelemetry Exemplars as follows:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exemplars","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplars","text":"If present, the timestamp MUST be used as the OpenTelemetry exemplar's timestamp.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exemplars","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplars","text":"If present, and if the values are valid Trace and Span IDs, the traceid and spanid labels MUST be converted to the OpenTelemetry Exemplar's Trace ID and Span ID, respectively.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exemplars","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplars","text":"All labels other than traceid and spanid MUST be added to the OpenTelemetry exemplar as filtered attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exemplars","meta":"MUST · Mixed"},{"type":"requirement","id":"Exponential Histograms","text":"An OpenTelemetry Exponential Histogram with a cumulative aggregation temporality MUST be converted to a Prometheus Native Histogram as follows:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exponential-histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Exponential Histograms","text":"If Scale is > 8 then Exponential Histogram data points SHOULD be downscaled to a scale accepted by Prometheus (in range [-4,8]).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exponential-histograms","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Exponential Histograms","text":"Any data point unable to be rescaled to an acceptable range MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#exponential-histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Gauges","text":"A Prometheus Gauge MUST be converted to an OTLP Gauge.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#gauges","meta":"MUST · Mixed"},{"type":"requirement","id":"Gauges","text":"An OpenTelemetry Gauge MUST be converted following a hint present in [metric.metadata][metricMetadata]:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#gauges-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Gauges","text":"If the prometheus.type key is absent, or its value is equal to gauge, the datapoint MUST be transformed to a Prometheus Gauge.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#gauges-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Gauges","text":"If the prometheus.type key has value equal to unkown, the datapoint MUST be transformed to a Prometheus Unknown.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#gauges-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Gauges","text":"If the prometheus.type key has value equal to info, the datapoint SHOULD be transformed to a Prometheus Info.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#gauges-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Gauges","text":"If the prometheus.type key has value equal to stateset, the datapoint SHOULD be transformed to a Prometheus Stateset.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#gauges-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Gauges","text":"Exemplars on OpenTelemetry Gauges SHOULD be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#gauges-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Histograms","text":"A Prometheus Histogram MUST be converted to an OTLP Histogram.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms","text":"In the text format, Prometheus histograms buckets, count and sum are sent as separate samples and they MUST be merged together when forming an OTLP Histogram.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms","text":"If _count is not present, the metric MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms","text":"If _sum is not present, the histogram's sum MUST be unset.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms","text":"Exemplars on the Prometheus Histogram Sample MUST be converted to OpenTelemetry Exemplars on the OpenTelemetry Histogram data point following the rules in Exemplars.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms","text":"An OpenTelemetry Histogram with a cumulative aggregation temporality MUST be converted to a Prometheus Histogram by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms","text":"OpenTelemetry Histograms with Delta aggregation temporality MAY be aggregated into a Cumulative aggregation temporality and follow the logic below, or MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus Histograms","text":"When converting to a Prometheus Histogram, an OpenTelemetry Histogram MUST be converted following the rules below:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus Histograms","text":"If set, StartTimeUnixNano SHOULD be transformed into Prometheus StartTime, following the appropriate format used by each Prometheus protocol.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-histograms","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Histograms as Prometheus Histograms","text":"If the Prometheus protocol only supports a single exemplar per-bucket, the latest exemplar that falls into each bucket SHOULD be converted.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-histograms","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"When converting to a Prometheus NHCB, only a single NHCB metric MUST be created:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"The flavor of the NHCB MUST be integer counter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"The ResetHint in the NHCB MUST be set to UNKNOWN.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"The Schema in the NHCB MUST be set to -53.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"If set, StartTimeUnixNano SHOULD be transformed into Prometheus StartTime, following the appropriate format used by each Prometheus protocol.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"The implicit +Inf upper bound MUST NOT be written into CustomValues; it is represented by the overflow bucket at index len(CustomValues).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"All fields of the NHCB that are not explicitly referenced here MUST be set to their zero value, such as zero threshold, zero count, negative spans, negative deltas, etc.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"If the NoRecordedValue flag is set to true, the NHCB MUST be marked as stale:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"The Native Histogram Sum MUST be set to the Stale NaN value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"The Native Histogram Count MUST be set to zero.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"PositiveSpans and PositiveDeltas MUST be left empty.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"Non-zero bucket counts MUST be converted into PositiveDeltas.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MUST · Mixed"},{"type":"requirement","id":"Histograms as Prometheus NHCB","text":"Zero-count buckets MAY also be included in PositiveDeltas to extend an enclosing span (rather than creating a gap between spans) and reduce the number of PositiveSpans.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#histograms-as-prometheus-nhcb","meta":"MAY · Mixed"},{"type":"requirement","id":"Info","text":"A Prometheus Info metric MUST be converted to an OTLP Non-Monotonic Sum unless it is the target info metric, which is used to populate resource attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#info","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrumentation Scope","text":"Labels with otelscope prefix MUST be dropped from all metric points and used as the Instrumentation Scope name (otelscopename), version (otelscopeversion), schema URL (otelscopeschemaurl), attributes (otelscope_[attribute]).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrumentation Scope","text":"Metrics which do not have any label with otelscope prefix MUST be assigned an instrumentation scope identifying the entity performing the translation from Prometheus to OpenTelemetry (e.g. the collector's Prometheus receiver).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrumentation Scope","text":"Prometheus exporters MUST by default add the scope name as the otelscopename label, the scope version as the otelscopeversion label, the scope schema URL as the otelscopeschemaurl label, the scope attributes as labels with otelscope prefix…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrumentation Scope","text":"Scope attributes that, after adding the otelscope prefix and applying the label-name conversion described in Metric Attributes, would conflict with otelscopename, otelscopeversion, or otelscopeschemaurl MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#instrumentation-scope-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Attributes","text":"OpenTelemetry Metric Attributes MUST be converted to Prometheus labels.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-attributes","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Attributes","text":"String Attribute values are converted directly to Metric Attributes, and non-string Attribute values MUST be converted to string attributes following the attribute specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-attributes","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Attributes","text":"Discouraged characters SHOULD be replaced with the character.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-attributes","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Metric Attributes","text":"Multiple consecutive characters SHOULD be replaced with a single character.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-attributes","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Metric Attributes","text":"In such cases, the values MUST be concatenated together, separated by ;, and ordered by the lexicographical order of the original keys.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-attributes","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"The Prometheus Metric Name MUST be added as the Name of the OTLP metric.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"The name SHOULD NOT be altered.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Prometheus UNIT metadata, if present, MUST be converted to the unit of the OTLP metric.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"The unit MUST be translated from words to the UCUM abbreviation if it is in the following set of commonly-used units:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Prometheus HELP metadata, if present, MUST be added as the description of the OTLP metric.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Prometheus TYPE metadata, if present, MUST be used to determine the OTLP data type, and dictates type-specific conversion rules listed below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"The TYPE metadata MUST also be added to the OTLP [metric.metadata][metricMetadata] under the prometheus.type key (e.g. prometheus.type=\"unknown\").","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Prometheus Pull exporters for OpenTelemetry metric data MUST NOT allow duplicate UNIT, HELP, or TYPE comments for the same metric name to be returned in a single scrape of the Prometheus endpoint.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Exporters MUST drop entire metrics to prevent conflicting TYPE comments, but SHOULD NOT drop metric points as a result of conflicting UNIT or HELP comments.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Instead, all but one of the conflicting UNIT and HELP comments (but not metric points) SHOULD be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"If dropping a comment or metric points, the exporter SHOULD warn the user through error logging.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"The Name of an OTLP metric MUST be added as the Prometheus Metric Name.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Discouraged characters in the metric name SHOULD be replaced with the character by default, aiming for compatibility with Prometheus conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Multiple consecutive characters SHOULD be replaced with a single _ character.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"The Unit of an OTLP metric point MUST be converted from the UCUM unit to the equivalent unit word in Prometheus if it is included in the table in Metric Metadata above.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Portions of the Unit within brackets (e.g. {packet}) MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"Units defined as rates over time (e.g. \"m/s\") MUST be converted to words (e.g. \"meterspersecond\").","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"The resulting unit SHOULD be added to the metric as UNIT metadata.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"A suffix to the metric name SHOULD be added unless the metric name already ends with the unit (before type-specific suffixes).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"The description of an OTLP metrics point MUST be added as HELP metadata.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Metadata","text":"The data point type of an OTLP metric MUST be added as TYPE metadata.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#metric-metadata-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Native Histograms","text":"A Prometheus Native Histogram with standard (exponential) schema (i.e. schemas -4 to 8) and which are of the integer and counter flavor MUST be converted to an OTLP Exponential Histogram as follows:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#native-histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Native Histograms","text":"Overflow buckets MUST be dropped and not counted in the overall Count.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#native-histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Native Histograms","text":"A Native histogram with custom buckets (NHCB) schema (i.e. schema -53) and which are of the integer and counter flavor MUST be converted to an OTLP Histogram as follows:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#native-histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Native Histograms","text":"Native histograms of the float or gauge flavors MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#native-histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Native Histograms","text":"Native Histograms with Schema outside of the range [-4, 8] and not equal to -53 MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#native-histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Native Histograms","text":"Exemplars on the Prometheus Native Histogram Sample MUST be converted to OpenTelemetry Exemplars on the OpenTelemetry Exponential Histogram data point following the rules in Exemplars.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#native-histograms","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"When scraping a Prometheus endpoint, resource attributes MUST be added to the scraped metrics to distinguish them from metrics from other Prometheus endpoints.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"The following attributes MUST be associated with scraped metrics as resource attributes, and MUST NOT be added as metric attributes:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"The following attributes SHOULD be associated with scraped metrics as resource attributes, and MUST NOT be added as metric attributes:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"If present, the target info metric MUST be dropped from the batch of metrics, and all labels from the target info metric MUST be converted to resource attributes attached to all other metrics which are part of the scrape.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"By default, label keys and values MUST NOT be altered (such as replacing _ with . characters in keys).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"In Prometheus exporters, an OpenTelemetry Resource SHOULD be converted to a target info metric if the resource is not empty.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"The Resource attributes MAY be copied to labels of exported metric families if required by the exporter configuration, or MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"The target info metric MUST be an info-typed metric whose labels MUST include the resource attributes, and MUST NOT include any other labels.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"In the collector Prometheus exporters, the service.name and service.namespace attributes MUST be combined as <service.namespace>/<service.name>, or <service.name> if namespace is empty, to form the job metric label.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"The service.instance.id attribute, if present, MUST be converted to the instance label; otherwise, instance should be added with an empty value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"Other resource attributes SHOULD be converted to a target info metric, or MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"The target metric is an info-typed metric whose labels MUST include the resource attributes, and MUST NOT include any other labels other than job and instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"There MUST be at most one target info metric exported for each unique combination of job and instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"If info-typed metric families are not yet supported by the language Prometheus client library, a gauge-typed metric family named target_info with a constant value of 1 MUST be used instead.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes","text":"To convert OTLP resource attributes to Prometheus labels, string Attribute values are converted directly to labels, and non-string Attribute values MUST be converted to string attributes following the attribute specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#resource-attributes-1","meta":"MUST · Mixed"},{"type":"requirement","id":"StateSet","text":"A Prometheus StateSet metric MUST be converted to an OTLP Non-Monotonic Sum.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#stateset","meta":"MUST · Mixed"},{"type":"requirement","id":"Summaries","text":"Prometheus Summary MUST be converted to an OTLP Summary.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#summaries","meta":"MUST · Mixed"},{"type":"requirement","id":"Summaries","text":"In text formats where Prometheus Summaries are represented by multiple samples, samples with same metric family name MUST be merged together into a single OTLP Summary.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#summaries","meta":"MUST · Mixed"},{"type":"requirement","id":"Summaries","text":"If _count is not present, the metric MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#summaries","meta":"MUST · Mixed"},{"type":"requirement","id":"Summaries","text":"If _sum is not present, the summary's sum MUST be set to zero.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#summaries","meta":"MUST · Mixed"},{"type":"requirement","id":"Summaries","text":"An OpenTelemetry Summary MUST be converted to a Prometheus Summary as follows:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#summaries-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Summaries","text":"The quantile label value MUST be the stringified floating point value of each quantile (between 0.0 and 1.0), starting from lowest to highest, and all being non-negative.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#summaries-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Summaries","text":"Explicit timestamps SHOULD NOT be used for pull protocols, such as the Prometheus text exposition format, where Prometheus assigns the scrape timestamp.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#summaries-1","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Summaries","text":"Exemplars on OpenTelemetry Summaries SHOULD be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#summaries-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Sums","text":"An OpenTelemetry Sum MUST be converted following the rules below:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#sums","meta":"MUST · Mixed"},{"type":"requirement","id":"Sums","text":"If the aggregation temporality is cumulative and the sum is monotonic, it MUST be converted to a Prometheus Counter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#sums","meta":"MUST · Mixed"},{"type":"requirement","id":"Sums","text":"If the aggregation temporality is delta and the sum is monotonic, it MAY be converted to a cumulative temporality and become a Prometheus Counter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#sums","meta":"MAY · Mixed"},{"type":"requirement","id":"Sums","text":"If the metric name for monotonic Sum metric points does not end in a suffix of total a suffix of total SHOULD be added by default, otherwise the name MUST remain unchanged.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#sums","meta":"MUST · Mixed"},{"type":"requirement","id":"Sums","text":"Monotonic Sum metric points with StartTimeUnixNano SHOULD transform StartTimeUnixNano into Prometheus StartTime, following the appropriate format used by each Prometheus protocol.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#sums","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Sums","text":"If Sum is converted to a Prometheus Counter, then Exemplars MUST be converted as described in the Exemplar Conversion section.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#sums","meta":"MUST · Mixed"},{"type":"requirement","id":"Sums","text":"Otherwise, Exemplars SHOULD be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#sums","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Sums","text":"If the Prometheus protocol only supports a single exemplar on the Counter sample, the latest exemplar SHOULD be converted.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#sums","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Timestamps","text":"If present, the Prometheus Metric Sample's Start timestamp (also referred to as the Created timestamp) MUST be converted to the Start timestamp of the OTLP data point.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#timestamps","meta":"MUST · Mixed"},{"type":"requirement","id":"Timestamps","text":"If no start timestamp is present, the start time of the OTLP data point SHOULD be left unset.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#timestamps","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Timestamps","text":"If present, the Prometheus Metric Sample's Timestamp MUST be converted to the Timestamp of the OTLP data point.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#timestamps","meta":"MUST · Mixed"},{"type":"requirement","id":"Timestamps","text":"For metrics scraped from a Prometheus endpoint without an explicit timestamp, the timestamp of the OTLP data point MUST be set to the time of the scrape.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#timestamps","meta":"MUST · Mixed"},{"type":"requirement","id":"Unknown-typed","text":"A Prometheus Unknown MUST be converted to an OTLP Gauge.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/compatibility/prometheus_and_openmetrics.md#unknown-typed","meta":"MUST · Mixed"},{"type":"requirement","id":"ConfigProperties","text":"ConfigProperties MUST provide accessors for reading all properties from the mapping node it represents, including:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/api.md#configproperties","meta":"MUST · Mixed"},{"type":"requirement","id":"ConfigProperties","text":"mappings, which SHOULD be represented as ConfigProperties","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/api.md#configproperties","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ConfigProperties","text":"sequences of mappings, which SHOULD be represented as ConfigProperties","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/api.md#configproperties","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ConfigProperties","text":"ConfigProperties SHOULD provide access to properties in a type safe manner, based on what is idiomatic in the language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/api.md#configproperties","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ConfigProperties","text":"ConfigProperties SHOULD allow a caller to determine if a property is present with a null value, versus not set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/api.md#configproperties","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ConfigProvider","text":"Thus, the API SHOULD provide a way to access a global default ConfigProvider, and set/register it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/api.md#configprovider","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ConfigProvider operations","text":"The ConfigProvider MUST provide the following functions:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/api.md#configprovider-operations","meta":"MUST · Mixed"},{"type":"requirement","id":"Get instrumentation config","text":"If the .instrumentation node is not set, get instrumentation config SHOULD return an empty ConfigProperties (as if .instrumentation: {} was set).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/api.md#get-instrumentation-config","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Duration","text":"Any value that represents a duration MUST be an integer representing a number of milliseconds.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#duration","meta":"MUST · Stable"},{"type":"requirement","id":"Duration","text":"The value is non-negative - if a negative value is provided, the implementation MUST generate a warning, gracefully ignore the setting and use the default value if it is defined.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#duration","meta":"MUST · Stable"},{"type":"requirement","id":"Enum","text":"For configuration sources which accept a known value out of a set, i.e., an enum value, implementations MAY support additional values not listed here.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#enum","meta":"MAY · Stable"},{"type":"requirement","id":"Enum","text":"When reporting configuration errors, implementations SHOULD display the original user-provided value to aid debugging.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#enum","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enum","text":"If a null object (empty, no-op) value is acceptable, then the enum value representing it MUST be \"none\".","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#enum","meta":"MUST · Stable"},{"type":"requirement","id":"Integer","text":"If an implementation chooses to support an integer-valued configuration source, it SHOULD support non-negative values between 0 and 2³¹ − 1 (inclusive).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#integer","meta":"SHOULD · Stable"},{"type":"requirement","id":"Integer","text":"Individual SDKs MAY choose to support a larger range of values.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#integer","meta":"MAY · Stable"},{"type":"requirement","id":"Numeric","text":"> The following paragraph was added after stabilization and the requirements are > thus qualified as \"SHOULD\" to allow implementations to avoid breaking changes. > For new > implementations, these should be treated as MUST requirements.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#numeric","meta":"MUST · Stable"},{"type":"requirement","id":"Numeric","text":"For sources accepting a numeric value, if the user provides a value which is outside the valid range for the configuration item, the implementation SHOULD generate a warning and gracefully ignore the setting, i.e., treat them as not set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#numeric","meta":"SHOULD · Stable"},{"type":"requirement","id":"Numeric","text":"In particular, implementations SHOULD NOT assign a custom interpretation e.g. to negative values if a negative value does not naturally apply to a configuration and does not have an explicitly specified meaning, but treat it like any other…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#numeric","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"OpenTelemetry Common Configuration Specification","text":"Implementations MAY choose to allow configuration via any configuration source in this specification, but are not required to.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#opentelemetry-common-configuration-specification","meta":"MAY · Stable"},{"type":"requirement","id":"OpenTelemetry Common Configuration Specification","text":"If they do, they SHOULD follow the guidance listed in this document.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#opentelemetry-common-configuration-specification","meta":"SHOULD · Stable"},{"type":"requirement","id":"Timeout","text":"Any value that represents a timeout MUST be an integer representing a number of milliseconds.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#timeout","meta":"MUST · Stable"},{"type":"requirement","id":"Timeout","text":"The value is non-negative - if a negative value is provided, the implementation MUST generate a warning, gracefully ignore the setting and use the default value if it is defined.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#timeout","meta":"MUST · Stable"},{"type":"requirement","id":"Timeout","text":"Implementations SHOULD interpret timeout zero values (i.e. 0 indicating 0 milliseconds) as no limit (i.e. infinite).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#timeout","meta":"SHOULD · Stable"},{"type":"requirement","id":"Timeout","text":"In practice, implementations MAY treat no limit as \"a very long time\" and substitute a very large duration ( e.g. the maximum milliseconds representable by a 32-bit integer).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/common.md#timeout","meta":"MAY · Stable"},{"type":"requirement","id":"Environment variable substitution","text":"When PREFIX is absent or env, GENERIC-SUBSTITUTION MUST conform to ENV-SUBSTITUTION:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#environment-variable-substitution","meta":"MUST · Stable"},{"type":"requirement","id":"Environment variable substitution","text":"Language implementations MAY support additional prefixes beyond env: to access language-specific configuration sources.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#environment-variable-substitution","meta":"MAY · Stable"},{"type":"requirement","id":"Environment variable substitution","text":"Language implementations SHOULD document any additional prefixes they support.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#environment-variable-substitution","meta":"SHOULD · Stable"},{"type":"requirement","id":"Environment variable substitution","text":"Environment variable substitution MUST only apply to scalar values.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#environment-variable-substitution","meta":"MUST · Stable"},{"type":"requirement","id":"Environment variable substitution","text":"If a referenced environment variable is not defined and does not have a DEFAULT-VALUE, it MUST be replaced with an empty value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#environment-variable-substitution","meta":"MUST · Stable"},{"type":"requirement","id":"Environment variable substitution","text":"The resolved $ from an escape sequence MUST NOT be considered when matching input against the environment variable substitution regular expression.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#environment-variable-substitution","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Environment variable substitution","text":"Node types MUST be interpreted after environment variable substitution takes place.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#environment-variable-substitution","meta":"MUST · Stable"},{"type":"requirement","id":"Environment variable substitution","text":"It MUST NOT be possible to inject YAML structures by environment variables.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#environment-variable-substitution","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Environment variable substitution","text":"It MUST NOT be possible to inject environment variable by environment variables.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#environment-variable-substitution","meta":"MUST NOT · Stable"},{"type":"requirement","id":"File-based configuration model","text":"Configuration files SHOULD use one the following serialization formats:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#file-based-configuration-model","meta":"SHOULD · Stable"},{"type":"requirement","id":"YAML file format","text":"YAML configuration files SHOULD follow YAML spec revision >= 1.2.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#yaml-file-format","meta":"SHOULD · Stable"},{"type":"requirement","id":"YAML file format","text":"YAML configuration files SHOULD be parsed using v1.2 YAML core schema.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#yaml-file-format","meta":"SHOULD · Stable"},{"type":"requirement","id":"YAML file format","text":"YAML configuration files MUST use file extensions .yaml or .yml.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/data-model.md#yaml-file-format","meta":"MUST · Stable"},{"type":"requirement","id":"Other Mechanisms","text":"Additional configuration mechanisms SHOULD be provided in whatever language/format/style is idiomatic for the language of the SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/README.md#other-mechanisms","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Programmatic","text":"The SDK MUST provide a programmatic interface for all configuration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/README.md#programmatic","meta":"MUST · Unspecified"},{"type":"requirement","id":"Programmatic","text":"This interface SHOULD be written in the language of the SDK itself.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/README.md#programmatic","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Programmatic","text":"All other configuration mechanisms SHOULD be built on top of this interface.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/README.md#programmatic","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Attribute Limits","text":"Implementations SHOULD only offer environment variables for the types of attributes, for which that SDK implements truncation mechanism.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#attribute-limits","meta":"SHOULD · Stable"},{"type":"requirement","id":"Boolean","text":"Any value that represents a Boolean MUST be set to true only by the case-insensitive string \"true\", meaning \"True\" or \"TRUE\" are also accepted, as true.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#boolean","meta":"MUST · Stable"},{"type":"requirement","id":"Boolean","text":"An implementation MUST NOT extend this definition and define additional values that are interpreted as true.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#boolean","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Boolean","text":"Any value not explicitly defined here as a true value, including unset and empty values, MUST be interpreted as false.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#boolean","meta":"MUST · Stable"},{"type":"requirement","id":"Boolean","text":"If any value other than a true value, case-insensitive string \"false\", empty, or unset is used, a warning SHOULD be logged to inform users about the fallback to false being applied.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#boolean","meta":"SHOULD · Stable"},{"type":"requirement","id":"Boolean","text":"All Boolean environment variables SHOULD be named and defined such that false is the expected safe default behavior.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#boolean","meta":"SHOULD · Stable"},{"type":"requirement","id":"Boolean","text":"Renaming or changing the default value MUST NOT happen without a major version upgrade.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#boolean","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Declarative configuration","text":"When OTELCONFIGFILE is set, all other environment variables besides those referenced in the configuration file for environment variable substitution MUST be ignored.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#declarative-configuration","meta":"MUST · Stable"},{"type":"requirement","id":"Declarative configuration","text":"Implementations MAY provide a mechanism to customize the configuration model parsed from OTELCONFIGFILE.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#declarative-configuration","meta":"MAY · Stable"},{"type":"requirement","id":"Enum","text":"Enum values SHOULD be interpreted in a case-insensitive manner.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#enum","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enum","text":"For sources accepting an enum value, if the user provides a value the implementation does not recognize, the implementation MUST generate a warning and gracefully ignore the setting.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#enum","meta":"MUST · Stable"},{"type":"requirement","id":"Exporter Selection","text":"The implementation MAY accept a comma-separated list to enable setting multiple exporters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#exporter-selection","meta":"MAY · Stable"},{"type":"requirement","id":"Exporter Selection","text":"It SHOULD NOT be supported by new implementations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#exporter-selection","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"General SDK Configuration","text":"This setting has no effect on propagators configured through the OTELPROPAGATORS variable. | | OTELENTITIES | Entity information to be associated with the resource | | [String][] | See Entities SDK for more details. | | OTELRESOURCEATTRIBU…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#general-sdk-configuration","meta":"MUST · Stable"},{"type":"requirement","id":"General SDK Configuration","text":"Invalid or unrecognized input MUST be logged and MUST be otherwise ignored, i.e. the implementation MUST behave as if OTELTRACESSAMPLER_ARG is not set. |","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#general-sdk-configuration","meta":"MUST · Stable"},{"type":"requirement","id":"Implementation guidelines","text":"Environment variables MAY be handled (implemented) directly by a component, in the SDK, or in a separate component (e.g. environment-based autoconfiguration component).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#implementation-guidelines","meta":"MAY · Stable"},{"type":"requirement","id":"Implementation guidelines","text":"The environment-based configuration MUST have a direct code configuration equivalent.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#implementation-guidelines","meta":"MUST · Stable"},{"type":"requirement","id":"Numeric","text":"> The following paragraph was added after stabilization and the requirements are > thus qualified as \"SHOULD\" to allow implementations to avoid breaking changes. > For new > implementations, these should be treated as MUST requirements.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#numeric","meta":"MUST · Stable"},{"type":"requirement","id":"Numeric","text":"For variables accepting a numeric value, if the user provides a value the implementation cannot parse, the implementation SHOULD generate a warning and gracefully ignore the setting, i.e., treat them as not set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#numeric","meta":"SHOULD · Stable"},{"type":"requirement","id":"OpenTelemetry Environment Variable Specification","text":"Implementations MAY choose to allow configuration via the environment variables in this specification, but are not required to.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#opentelemetry-environment-variable-specification","meta":"MAY · Stable"},{"type":"requirement","id":"OpenTelemetry Environment Variable Specification","text":"If they do, they SHOULD use the names and value parsing behavior specified in this document.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#opentelemetry-environment-variable-specification","meta":"SHOULD · Stable"},{"type":"requirement","id":"OpenTelemetry Environment Variable Specification","text":"They SHOULD also follow the common configuration specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#opentelemetry-environment-variable-specification","meta":"SHOULD · Stable"},{"type":"requirement","id":"Parsing empty value","text":"The SDK MUST interpret an empty value of an environment variable the same way as when the variable is unset.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk-environment-variables.md#parsing-empty-value","meta":"MUST · Stable"},{"type":"requirement","id":"ConfigProvider","text":"The SDK implementation of ConfigProvider MUST be created using a ConfigProperties representing the .instrumentation mapping node of the configuration model.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#configprovider","meta":"MUST · Stable"},{"type":"requirement","id":"Create","text":"The multiple responses MAY be returned using a tuple, or some other data structure encapsulating the components.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create","meta":"MAY · Stable"},{"type":"requirement","id":"Create","text":"If a property is present and the value is null, Create MUST use the nullBehavior, or defaultBehavior if nullBehavior is not set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create","meta":"MUST · Stable"},{"type":"requirement","id":"Create","text":"If a property is required, and not present, Create MUST return an error.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create","meta":"MUST · Stable"},{"type":"requirement","id":"Create","text":"Create SHOULD return an error if it encounters a value which is invalid according to the property description.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create","meta":"SHOULD · Stable"},{"type":"requirement","id":"Create","text":"When encountering a reference to an SDK plugin component which is not built-in to the SDK, Create MUST resolve the component using Create Component of the PluginComponentProvider of the corresponding type and name used to register, includi…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create","meta":"MUST · Stable"},{"type":"requirement","id":"Create","text":"If no PluginComponentProvider is registered with the type and name, Create SHOULD return an error.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create","meta":"SHOULD · Stable"},{"type":"requirement","id":"Create","text":"If Create Component returns an error, Create SHOULD propagate the error.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create","meta":"SHOULD · Stable"},{"type":"requirement","id":"Create","text":"This SHOULD return an error if it encounters an error in configuration (i.e. fail fast) in accordance with initialization error handling principles.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create","meta":"SHOULD · Stable"},{"type":"requirement","id":"Create","text":"Status: Development SDK implementations MAY provide options to allow programmatic customization of the components initialized by Create.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create","meta":"MAY · Stable"},{"type":"requirement","id":"Create Component","text":"The plugin component MAY have properties which are optional or required, and have specific requirements around type or format.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create-component","meta":"MAY · Stable"},{"type":"requirement","id":"Create Component","text":"A PluginComponentProvider SHOULD document its configuration schema and include examples.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create-component","meta":"SHOULD · Stable"},{"type":"requirement","id":"Create Component","text":"If this fails (e.g. a required property is not present, a type is mismatches, etc.), Create Component SHOULD return an error.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#create-component","meta":"SHOULD · Stable"},{"type":"requirement","id":"In-Memory configuration model","text":"SDKs SHOULD provide an in-memory representation of the configuration model.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#in-memory-configuration-model","meta":"SHOULD · Stable"},{"type":"requirement","id":"In-Memory configuration model","text":"Whereas ConfigProperties is a schemaless representation of any mapping node, the in-memory configuration model SHOULD reflect the schema of the configuration model.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#in-memory-configuration-model","meta":"SHOULD · Stable"},{"type":"requirement","id":"In-Memory configuration model","text":"If an SDK needs to expose a class or interface, the name Configuration is RECOMMENDED.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#in-memory-configuration-model","meta":"RECOMMENDED · Stable"},{"type":"requirement","id":"Parse","text":"This MAY be a file path, or language specific file data structure, or a stream of a file's content.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#parse","meta":"MAY · Stable"},{"type":"requirement","id":"Parse","text":"Implementations MAY accept a fileformat parameter, or infer it from the file extension, or include file format specific overloads of parse, e.g. parseYaml(file).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#parse","meta":"MAY · Stable"},{"type":"requirement","id":"Parse","text":"If parse accepts file_format, the API SHOULD be structured so a user is obligated to provide it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#parse","meta":"SHOULD · Stable"},{"type":"requirement","id":"Parse","text":"Parse MUST perform environment variable substitution.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#parse","meta":"MUST · Stable"},{"type":"requirement","id":"Parse","text":"Parse MUST differentiate between properties that are missing and properties that are present but null.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#parse","meta":"MUST · Stable"},{"type":"requirement","id":"Parse","text":"The user MUST not be required to specify an empty object (i.e. drop: {}) in these cases.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#parse","meta":"MUST · Stable"},{"type":"requirement","id":"Parse","text":"When encountering a reference to a SDK extension component which is not built-in to the SDK, Parse MUST resolve corresponding configuration to a generic ConfigProperties representation as described in Create Component.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#parse","meta":"MUST · Stable"},{"type":"requirement","id":"Parse","text":"Parse SHOULD return an error if:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#parse","meta":"SHOULD · Stable"},{"type":"requirement","id":"PluginComponentProvider","text":"This MAY be done automatically or require manual intervention by the user based on what is possible and idiomatic in the language ecosystem.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#plugincomponentprovider","meta":"MAY · Stable"},{"type":"requirement","id":"PluginComponentProvider operations","text":"The PluginComponentProvider MUST provide the following functions:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#plugincomponentprovider-operations","meta":"MUST · Stable"},{"type":"requirement","id":"Register PluginComponentProvider","text":"The SDK MUST provide a mechanism to register PluginComponentProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#register-plugincomponentprovider","meta":"MUST · Stable"},{"type":"requirement","id":"Register PluginComponentProvider","text":"The mechanism MAY be language-specific and automatic.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#register-plugincomponentprovider","meta":"MAY · Stable"},{"type":"requirement","id":"Register PluginComponentProvider","text":"Register MUST return an error if it is called multiple times with the same type and name combination.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#register-plugincomponentprovider","meta":"MUST · Stable"},{"type":"requirement","id":"Register PluginComponentProvider","text":"SDKs SHOULD represent type in a manner that is idiomatic for their language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#register-plugincomponentprovider","meta":"SHOULD · Stable"},{"type":"requirement","id":"SDK extension components","text":"The configuration data model SHOULD define specific types for built-in implementations of these plugin components.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#sdk-extension-components","meta":"SHOULD · Stable"},{"type":"requirement","id":"SDK extension components","text":"The schema SHOULD support the ability to specify custom implementations of plugin components defined by libraries or users.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#sdk-extension-components","meta":"SHOULD · Stable"},{"type":"requirement","id":"SDK operations","text":"SDK implementations of configuration MUST provide the following operations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/sdk.md#sdk-operations","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration interface prioritization and `create`","text":"According to the trace, metric, and log specs, SDKs MAY support updating the config, but there is no conflict with declarative config which doesn't already exist.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/configuration/supplementary-guidelines.md#configuration-interface-prioritization-and-create","meta":"MAY · Unspecified"},{"type":"requirement","id":"B3 Extract","text":"MUST attempt to extract B3 encoded using single and multi-header formats.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#b3-extract","meta":"MUST · Stable"},{"type":"requirement","id":"B3 Extract","text":"MUST preserve a debug trace flag, if received, and propagate it with subsequent requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#b3-extract","meta":"MUST · Stable"},{"type":"requirement","id":"B3 Extract","text":"Additionally, an OpenTelemetry implementation MUST set the sampled trace flag when the debug flag is set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#b3-extract","meta":"MUST · Stable"},{"type":"requirement","id":"B3 Extract","text":"MUST NOT reuse X-B3-SpanId as the ID for the server-side span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#b3-extract","meta":"MUST NOT · Stable"},{"type":"requirement","id":"B3 Inject","text":"MUST default to injecting B3 using the single-header format","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#b3-inject","meta":"MUST · Stable"},{"type":"requirement","id":"B3 Inject","text":"MUST provide configuration to change the default injection format to B3 multi-header","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#b3-inject","meta":"MUST · Stable"},{"type":"requirement","id":"B3 Inject","text":"MUST NOT propagate X-B3-ParentSpanId as OpenTelemetry does not support reusing the same ID for both sides of a request.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#b3-inject","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Composite Extract","text":"If the TextMapPropagator's Extract implementation accepts the optional Getter argument, the following arguments are REQUIRED, otherwise they are OPTIONAL:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#composite-extract","meta":"REQUIRED · Stable"},{"type":"requirement","id":"Composite Inject","text":"If the TextMapPropagator's Inject implementation accepts the optional Setter argument, the following arguments are REQUIRED, otherwise they are OPTIONAL:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#composite-inject","meta":"REQUIRED · Stable"},{"type":"requirement","id":"Composite Inject","text":"Propagators MAY invoke it multiple times in order to set multiple pairs.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#composite-inject","meta":"MAY · Stable"},{"type":"requirement","id":"Composite Propagator","text":"Implementations MUST offer a facility to group multiple Propagators from different cross-cutting concerns in order to leverage them as a single entity.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#composite-propagator","meta":"MUST · Stable"},{"type":"requirement","id":"Composite Propagator","text":"There MUST be functions to accomplish the following operations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#composite-propagator","meta":"MUST · Stable"},{"type":"requirement","id":"Extract","text":"If a value can not be parsed from the carrier, for a cross-cutting concern, the implementation MUST NOT throw an exception and MUST NOT store a new value in the Context, in order to preserve any previously existing valid value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#extract","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Fields","text":"Fields MUST return the header names that correspond to the configured format, i.e., the headers used for the inject operation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#fields-1","meta":"MUST · Stable"},{"type":"requirement","id":"Get","text":"The Get function MUST return the first value of the given propagation key or return null if the key doesn't exist.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#get","meta":"MUST · Stable"},{"type":"requirement","id":"Get","text":"If the getter is intended to work with an HTTP request object, the getter MUST be case insensitive.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#get","meta":"MUST · Stable"},{"type":"requirement","id":"Get Global Propagator","text":"This method MUST exist for each supported Propagator type.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#get-global-propagator","meta":"MUST · Stable"},{"type":"requirement","id":"GetAll","text":"If explicitly implemented, the GetAll function MUST return all values of the given propagation key.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#getall","meta":"MUST · Stable"},{"type":"requirement","id":"GetAll","text":"It SHOULD return them in the same order as they appear in the carrier.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#getall","meta":"SHOULD · Stable"},{"type":"requirement","id":"GetAll","text":"If the key doesn't exist, it SHOULD return an empty collection.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#getall","meta":"SHOULD · Stable"},{"type":"requirement","id":"GetAll","text":"If the getter is intended to work with an HTTP request object, the getter MUST be case insensitive.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#getall","meta":"MUST · Stable"},{"type":"requirement","id":"Global Propagators","text":"The OpenTelemetry API MUST provide a way to obtain a propagator for each supported Propagator type.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#global-propagators","meta":"MUST · Stable"},{"type":"requirement","id":"Global Propagators","text":"Instrumentation libraries SHOULD call propagators to extract and inject the context on all remote calls.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#global-propagators","meta":"SHOULD · Stable"},{"type":"requirement","id":"Global Propagators","text":"Propagators, depending on the language, MAY be set up using various dependency injection techniques or available as global accessors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#global-propagators","meta":"MAY · Stable"},{"type":"requirement","id":"Global Propagators","text":"In such cases, instrumentation libraries MAY choose not to use the API-provided propagators and instead hardcode the context extraction and injection logic.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#global-propagators","meta":"MAY · Stable"},{"type":"requirement","id":"Global Propagators","text":"The OpenTelemetry API MUST use no-op propagators unless explicitly configured otherwise.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#global-propagators","meta":"MUST · Stable"},{"type":"requirement","id":"Global Propagators","text":"Therefore, context propagation MAY be enabled for any of them independently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#global-propagators","meta":"MAY · Stable"},{"type":"requirement","id":"Global Propagators","text":"If pre-configured, Propagators SHOULD default to a composite Propagator containing the W3C Trace Context Propagator and the Baggage Propagator specified in the Baggage API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#global-propagators","meta":"SHOULD · Stable"},{"type":"requirement","id":"Global Propagators","text":"These platforms MUST also allow pre-configured propagators to be disabled or overridden.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#global-propagators","meta":"MUST · Stable"},{"type":"requirement","id":"Inject","text":"The Propagator MUST retrieve the appropriate value from the Context first, such as SpanContext, Baggage or another cross-cutting concern context.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#inject","meta":"MUST · Stable"},{"type":"requirement","id":"Keys","text":"The Keys function MUST return the list of all the keys in the carrier.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#keys","meta":"MUST · Stable"},{"type":"requirement","id":"Operations","text":"Propagators MUST define Inject and Extract operations, in order to write values to and read values from carriers respectively.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#operations","meta":"MUST · Stable"},{"type":"requirement","id":"Operations","text":"Each Propagator type MUST define the specific carrier type and MAY define additional parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#operations","meta":"MUST · Stable"},{"type":"requirement","id":"Propagators Distribution","text":"The official list of propagators that MUST be maintained by the OpenTelemetry organization and MUST be distributed as OpenTelemetry Core packages:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#propagators-distribution","meta":"MUST · Stable"},{"type":"requirement","id":"Propagators Distribution","text":"MAY alternatively be distributed as part of the OpenTelemetry API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#propagators-distribution","meta":"MAY · Stable"},{"type":"requirement","id":"Propagators Distribution","text":"This is a list of additional propagators that MAY be maintained and distributed as OpenTelemetry Core packages:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#propagators-distribution","meta":"MAY · Stable"},{"type":"requirement","id":"Propagators Distribution","text":"It MUST NOT use OpenTracing in the resulting propagator name as it is not widely adopted format in the OpenTracing ecosystem.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#propagators-distribution","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Propagators Distribution","text":"Additional Propagators implementing vendor-specific protocols such as AWS X-Ray trace header protocol MUST NOT be maintained or distributed as part of the OpenTelemetry Core packages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#propagators-distribution","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Set","text":"The implementation SHOULD preserve casing (e.g. it should not transform Content-Type to content-type) if the used protocol is case insensitive, otherwise it MUST preserve casing.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#set","meta":"MUST · Stable"},{"type":"requirement","id":"Set Global Propagator","text":"This method MUST exist for each supported Propagator type.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#set-global-propagator","meta":"MUST · Stable"},{"type":"requirement","id":"TextMap Inject","text":"Propagators MAY invoke it multiple times in order to set multiple pairs.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#textmap-inject","meta":"MAY · Stable"},{"type":"requirement","id":"TextMap Propagator","text":"In order to increase compatibility, the key-value pairs MUST only consist of US-ASCII characters that make up valid HTTP header fields as per RFC 9110.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#textmap-propagator","meta":"MUST · Stable"},{"type":"requirement","id":"TextMap Propagator","text":"Getter and Setter MUST be stateless and allowed to be saved as constants, in order to effectively avoid runtime allocations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#textmap-propagator","meta":"MUST · Stable"},{"type":"requirement","id":"W3C Trace Context Requirements","text":"A W3C Trace Context propagator MUST parse and validate the traceparent and tracestate HTTP headers as specified in W3C Trace Context Level 2.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#w3c-trace-context-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"W3C Trace Context Requirements","text":"A W3C Trace Context propagator MUST propagate a valid traceparent value using the same header.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#w3c-trace-context-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"W3C Trace Context Requirements","text":"A W3C Trace Context propagator MUST propagate a valid tracestate unless the value is empty, in which case the tracestate header may be omitted.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/api-propagators.md#w3c-trace-context-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Key Name Normalization","text":"Language implementations MUST ensure that environment variable Get, Set, and Keys operations use normalized key names for context propagation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#key-name-normalization","meta":"MUST · Release Candidate"},{"type":"requirement","id":"Key Name Normalization","text":"To normalize a key name, implementations MUST:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#key-name-normalization","meta":"MUST · Release Candidate"},{"type":"requirement","id":"Key Name Normalization","text":"Set MUST write values using the normalized form of the key provided by the propagator.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#key-name-normalization","meta":"MUST · Release Candidate"},{"type":"requirement","id":"Key Name Normalization","text":"Get MUST normalize the key requested by the propagator and MUST use the normalized key name to read from the carrier.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#key-name-normalization","meta":"MUST · Release Candidate"},{"type":"requirement","id":"Key Name Normalization","text":"Keys MUST return only key names that are already normalized.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#key-name-normalization","meta":"MUST · Release Candidate"},{"type":"requirement","id":"Key Name Normalization","text":"For example, if a propagator requests the key x-b3-traceid, the environment-specific Get operation MUST normalize the requested key to XB3TRACEID and read the XB3TRACEID environment variable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#key-name-normalization","meta":"MUST · Release Candidate"},{"type":"requirement","id":"Key Name Normalization","text":"It MUST NOT read a non-normalized environment variable named x-b3-traceid, even though that name normalizes to XB3TRACEID.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#key-name-normalization","meta":"MUST NOT · Release Candidate"},{"type":"requirement","id":"Propagator Mechanisms","text":"A TextMapPropagator SHOULD be used alongside its normal Get, Set, Extract, and Inject functionality as described in the API Propagators specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#propagator-mechanisms","meta":"SHOULD · Release Candidate"},{"type":"requirement","id":"Propagator Mechanisms","text":"The environment variable carrier MUST be format-agnostic and MUST treat values as opaque strings and MUST NOT apply propagation-format-specific logic such as validating, parsing values, or enforcing other format-specific constraints.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#propagator-mechanisms","meta":"MUST NOT · Release Candidate"},{"type":"requirement","id":"Propagator Mechanisms","text":"Language implementations SHOULD document operational guidance, including initialization-time extraction, child process environment handling, and security considerations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#propagator-mechanisms","meta":"SHOULD · Release Candidate"},{"type":"requirement","id":"Propagator Mechanisms","text":"Language implementations MUST NOT spawn child processes as part of environment variable context propagation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/env-carriers.md#propagator-mechanisms","meta":"MUST NOT · Release Candidate"},{"type":"requirement","id":"Attach Context","text":"The API MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#attach-context","meta":"MUST · Stable"},{"type":"requirement","id":"Attach Context","text":"The API MUST return a value that can be used as a Token to restore the previous Context.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#attach-context","meta":"MUST · Stable"},{"type":"requirement","id":"Create a key","text":"The API MUST accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#create-a-key","meta":"MUST · Stable"},{"type":"requirement","id":"Create a key","text":"Multiple calls to CreateKey with the same name SHOULD NOT return the same value unless language constraints dictate otherwise.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#create-a-key","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Create a key","text":"The API MUST return an opaque object representing the newly created key.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#create-a-key","meta":"MUST · Stable"},{"type":"requirement","id":"Detach Context","text":"The API MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#detach-context","meta":"MUST · Stable"},{"type":"requirement","id":"Detach Context","text":"The API MAY return a value used to check whether the operation was successful or not.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#detach-context","meta":"MAY · Stable"},{"type":"requirement","id":"Get current Context","text":"The API MUST return the Context associated with the caller's current execution unit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#get-current-context","meta":"MUST · Stable"},{"type":"requirement","id":"Get value","text":"The API MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#get-value","meta":"MUST · Stable"},{"type":"requirement","id":"Get value","text":"The API MUST return the value in the Context for the specified key.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#get-value","meta":"MUST · Stable"},{"type":"requirement","id":"Optional Global operations","text":"These operations SHOULD only be used to implement automatic scope switching and define higher level APIs by SDK components and OpenTelemetry instrumentation libraries.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#optional-global-operations","meta":"SHOULD · Stable"},{"type":"requirement","id":"Overview","text":"A Context MUST be immutable, and its write operations MUST result in the creation of a new Context containing the original values and the specified values updated.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#overview","meta":"MUST · Stable"},{"type":"requirement","id":"Overview","text":"In the cases where an extremely clear, pre-existing option is not available, OpenTelemetry MUST provide its own Context implementation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#overview","meta":"MUST · Stable"},{"type":"requirement","id":"Set value","text":"The API MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#set-value","meta":"MUST · Stable"},{"type":"requirement","id":"Set value","text":"The API MUST return a new Context containing the new value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/context/README.md#set-value","meta":"MUST · Stable"},{"type":"requirement","id":"Maturity levels","text":"The component SHOULD NOT be used in production.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/document-status.md#maturity-levels","meta":"SHOULD NOT · Unspecified"},{"type":"requirement","id":"Maturity levels","text":"The component MAY be removed without prior notice. | | Alpha | The component is ready to be used for limited non-critical production workloads, and the authors of this component welcome user feedback.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/document-status.md#maturity-levels","meta":"MAY · Unspecified"},{"type":"requirement","id":"Maturity levels","text":"They also MUST communicate in which version they will be removed. | | Unmaintained | A component identified as unmaintained does not have an active code owner.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/document-status.md#maturity-levels","meta":"MUST · Unspecified"},{"type":"requirement","id":"Maturity levels","text":"Issues and pull requests for unmaintained components SHOULD be labeled as such.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/document-status.md#maturity-levels","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Maturity levels","text":"After 6 months of being unmaintained, these components MAY be deprecated.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/document-status.md#maturity-levels","meta":"MAY · Unspecified"},{"type":"requirement","id":"Entity Data Model","text":"MUST not change during the lifetime of the entity.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#entity-data-model","meta":"MUST · Development"},{"type":"requirement","id":"Entity Data Model","text":"This field is required and MUST not be empty for valid entities. | | ID | map<string, attribute value> | Attributes that identify the entity.<p>MUST not change during the lifetime of the entity.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#entity-data-model","meta":"MUST · Development"},{"type":"requirement","id":"Entity Data Model","text":"SHOULD follow OpenTelemetry semantic conventions for attributes. | | Description | map<string, attribute value> | Descriptive (non-identifying) attributes of the entity.<p>MAY change over the lifetime of the entity.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#entity-data-model","meta":"SHOULD · Development"},{"type":"requirement","id":"Entity Data Model","text":"MAY be empty.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#entity-data-model","meta":"MAY · Development"},{"type":"requirement","id":"Entity Data Model","text":"SHOULD follow OpenTelemetry semantic conventions for attributes. |","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#entity-data-model","meta":"SHOULD · Development"},{"type":"requirement","id":"Examples of Entities","text":"Note: These examples MAY diverge from semantic conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#examples-of-entities","meta":"MAY · Development"},{"type":"requirement","id":"Identifying Attributes","text":"OpenTelemetry Semantic Conventions MUST define a set of identifying attribute keys for every defined entity type.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#identifying-attributes","meta":"MUST · Development"},{"type":"requirement","id":"Identifying Attributes","text":"Names of the identifying attributes SHOULD use the entity type as a prefix to avoid collisions with other entity types.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#identifying-attributes","meta":"SHOULD · Development"},{"type":"requirement","id":"Identifying Attributes","text":"Two independent observers that report the same entity MUST be able to supply identical values for all identifying attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#identifying-attributes","meta":"MUST · Development"},{"type":"requirement","id":"Identifying Attributes","text":"If an observer cannot reliably obtain one or more identifying attributes, it MUST NOT emit telemetry using that entity type.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#identifying-attributes","meta":"MUST NOT · Development"},{"type":"requirement","id":"Identifying Attributes","text":"Instead, it SHOULD:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#identifying-attributes","meta":"SHOULD · Development"},{"type":"requirement","id":"Merging of Entities","text":"Entities MAY be merged if and only if their types are the same, their identity attributes are exactly the same AND their schema_url is the same.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#merging-of-entities","meta":"MAY · Development"},{"type":"requirement","id":"Merging of Entities","text":"This means both Entities MUST have the same identity attribute keys and for each key, the values of the key MUST be the same.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#merging-of-entities","meta":"MUST · Development"},{"type":"requirement","id":"Merging of Entities","text":"Note: If Entities have different schema_urls, they SHOULD be converted to the same schema version (if possible) before attempting a merge.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#merging-of-entities","meta":"SHOULD · Development"},{"type":"requirement","id":"Placement of Shared Descriptive Attributes","text":"If multiple entities share the same descriptive attribute key with potentially conflicting values, the attribute MUST logically belong to only one of them.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#placement-of-shared-descriptive-attributes","meta":"MUST · Development"},{"type":"requirement","id":"Placement of Shared Descriptive Attributes","text":"All others SHOULD NOT reference it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#placement-of-shared-descriptive-attributes","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Placement of Shared Descriptive Attributes","text":"The attribute MUST be referenced by the most specific entity, the one closest in the topology graph to the entity associated with the telemetry signal.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#placement-of-shared-descriptive-attributes","meta":"MUST · Development"},{"type":"requirement","id":"Repeatable Identity","text":"The identifying attributes for entity SHOULD be values that can be repeatably obtained by observers of that entity.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#repeatable-identity","meta":"SHOULD · Development"},{"type":"requirement","id":"Repeatable Identity","text":"For example, a process entity SHOULD have the same identity (and be recognized as the same process), regardless of whether the identity was generated from the process itself, e.g. via SDK, or by an OpenTelemetry Collector running on the sa…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/data-model.md#repeatable-identity","meta":"SHOULD · Development"},{"type":"requirement","id":"Entity Delete Event","text":"Recipients of entity signals MUST be prepared to handle this situation by expiring entities that are no longer seeing Entity State events reported.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-delete-event","meta":"MUST · Development"},{"type":"requirement","id":"Entity Delete Event","text":"Recipients MUST also be prepared to receive an Entity Delete event out of order, for example, before the last Entity State event.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-delete-event","meta":"MUST · Development"},{"type":"requirement","id":"Entity Delete Event","text":"In this case, recipients SHOULD apply state updates regardless, as each Entity State event represents the full current state of the entity and can be used to update a previously deleted entity record.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-delete-event","meta":"SHOULD · Development"},{"type":"requirement","id":"Entity State Event","text":"MUST not change during the lifetime of the entity.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"MUST · Development"},{"type":"requirement","id":"Entity State Event","text":"The map MUST contain at least one attribute.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"MUST · Development"},{"type":"requirement","id":"Entity State Event","text":"Keys and values MUST be strings.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"MUST · Development"},{"type":"requirement","id":"Entity State Event","text":"SHOULD follow OpenTelemetry semantic conventions for attribute names. |","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"SHOULD · Development"},{"type":"requirement","id":"Entity State Event","text":"When absent, MUST be treated as an empty map.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"MUST · Development"},{"type":"requirement","id":"Entity State Event","text":"SHOULD follow OpenTelemetry semantic conventions for attributes. | | entity.relationships | array of maps | Relationships to other entities.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"SHOULD · Development"},{"type":"requirement","id":"Entity State Event","text":"When absent, MUST be treated as an empty array. | | entity.report.interval | int64 (seconds) | The reporting period for this entity.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"MUST · Development"},{"type":"requirement","id":"Entity State Event","text":"MUST be a non-negative value when present.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"MUST · Development"},{"type":"requirement","id":"Entity State Event","text":"Implementations SHOULD emit Entity State events whenever entity descriptive attributes change, and periodically based on the entity.report.interval value to indicate the entity still exists.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"SHOULD · Development"},{"type":"requirement","id":"Entity State Event","text":"Implementations SHOULD also emit Entity Delete events when entities are removed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#entity-state-event","meta":"SHOULD · Development"},{"type":"requirement","id":"Relationship Lifecycle","text":"Backends SHOULD handle this accordingly.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#relationship-lifecycle","meta":"SHOULD · Development"},{"type":"requirement","id":"Relationship Placement","text":"When choosing which entity should contain a relationship in its entity.relationships array, implementations SHOULD prefer placing relationships on the entity type with the shorter lifespan or higher churn rate.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#relationship-placement","meta":"SHOULD · Development"},{"type":"requirement","id":"Relationship Placement","text":"Semantic conventions SHOULD provide guidance on relationship placement for common entity types.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#relationship-placement","meta":"SHOULD · Development"},{"type":"requirement","id":"Standard Relationship Types","text":"Standard relationship types SHOULD be defined in OpenTelemetry semantic conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#standard-relationship-types","meta":"SHOULD · Development"},{"type":"requirement","id":"Standard Relationship Types","text":"Custom relationship types MAY be defined to represent domain-specific relationships.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-events.md#standard-relationship-types","meta":"MAY · Development"},{"type":"requirement","id":"Character Encoding","text":"All attribute values MUST be considered strings and characters outside the baggage-octet range MUST be percent-encoded following the W3C Baggage specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#character-encoding","meta":"MUST · Development"},{"type":"requirement","id":"Character Encoding","text":"The reserved characters {}[]@;,= MUST be percent-encoded when they appear literally in attribute values:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#character-encoding","meta":"MUST · Development"},{"type":"requirement","id":"Error Handling","text":"The SDK SHOULD be resilient to malformed input and follow these error handling rules:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#error-handling","meta":"SHOULD · Development"},{"type":"requirement","id":"Error Handling","text":"Invalid syntax: If the environment variable contains invalid syntax, the SDK SHOULD log a warning and ignore the malformed portions while processing valid parts","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#error-handling","meta":"SHOULD · Development"},{"type":"requirement","id":"Error Handling","text":"Missing required fields: If an entity is missing required fields (type or identifying attributes), the SDK SHOULD log a warning and skip that entity","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#error-handling","meta":"SHOULD · Development"},{"type":"requirement","id":"Error Handling","text":"Duplicate entities: If multiple entities of the same type with identical identifying attributes are defined, the SDK SHOULD use the last occurrence and SHOULD log a warning","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#error-handling","meta":"SHOULD · Development"},{"type":"requirement","id":"Error Handling","text":"Schema URL validation: If a schema URL is present but invalid, the SDK SHOULD log a warning and ignore the URL while processing the entity","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#error-handling","meta":"SHOULD · Development"},{"type":"requirement","id":"Error Handling","text":"Conflicting identifying attributes: If two entities of the same type define different values for the same identifying attribute key, the SDK SHOULD log a warning and preserve only the last entity","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#error-handling","meta":"SHOULD · Development"},{"type":"requirement","id":"Error Handling","text":"Conflicting descriptive attributes: If two entities define different values for the same descriptive attribute key, the SDK SHOULD use the value from the last entity definition and SHOULD log a warning.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#error-handling","meta":"SHOULD · Development"},{"type":"requirement","id":"Error Handling","text":"The conflicting attributes SHOULD NOT be recorded for entities other than the last one","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#error-handling","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Specifying entity information via an environment variable","text":"The SDK that has access to environment variables MUST provide an EnvEntityDetector which will use the OTEL_ENTITIES environment variable to discover and associate defined entities with the resource.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#specifying-entity-information-via-an-environment-variable","meta":"MUST · Development"},{"type":"requirement","id":"Validation Requirements","text":"Entity type MUST NOT be empty and MUST match the pattern [a-zA-Z][a-zA-Z0-9.-]","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#validation-requirements","meta":"MUST NOT · Development"},{"type":"requirement","id":"Validation Requirements","text":"At least one identifying attribute MUST be present in the {...} block","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#validation-requirements","meta":"MUST · Development"},{"type":"requirement","id":"Validation Requirements","text":"Attribute keys MUST NOT be empty and SHOULD follow OpenTelemetry semantic conventions","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#validation-requirements","meta":"MUST NOT · Development"},{"type":"requirement","id":"Validation Requirements","text":"Schema URL, if present, MUST be a valid URI","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#validation-requirements","meta":"MUST · Development"},{"type":"requirement","id":"Validation Requirements","text":"Entity types SHOULD follow existing OpenTelemetry entity naming conventions (e.g., \"service\", \"host\", \"container\", \"k8s.pod\")","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/entities/entity-propagation.md#validation-requirements","meta":"SHOULD · Development"},{"type":"requirement","id":"Basic error handling principles","text":"OpenTelemetry implementations MUST NOT throw unhandled exceptions at runtime.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#basic-error-handling-principles","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Basic error handling principles","text":"API methods MUST NOT throw unhandled exceptions when used incorrectly by end users.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#basic-error-handling-principles","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Basic error handling principles","text":"The API and SDK SHOULD provide safe defaults for missing or invalid arguments.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#basic-error-handling-principles","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Basic error handling principles","text":"The API or SDK MAY fail fast and cause the application to fail on initialization, e.g. because of a bad user config or environment, but MUST NOT cause the application to fail later at runtime, e.g. due to dynamic config settings received f…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#basic-error-handling-principles","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Basic error handling principles","text":"The SDK MUST NOT throw unhandled exceptions for errors in their own operations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#basic-error-handling-principles","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Configuring Error Handlers","text":"SDK implementations MUST allow end users to change the library's default error handling behavior for relevant errors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#configuring-error-handlers","meta":"MUST · Unspecified"},{"type":"requirement","id":"Guidance","text":"API methods that accept external callbacks MUST handle all errors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#guidance","meta":"MUST · Unspecified"},{"type":"requirement","id":"Guidance","text":"Whenever API call returns values that is expected to be non-null value - in case of error in processing logic - SDK MUST return a \"no-op\" or any other \"default\" object that was (ideally) pre-allocated and readily available.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#guidance","meta":"MUST · Unspecified"},{"type":"requirement","id":"Self-diagnostics","text":"Whenever the library suppresses an error that would otherwise have been exposed to the user, the library SHOULD log the error using language-specific conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#self-diagnostics","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Self-diagnostics","text":"SDKs MAY expose callbacks to allow end users to handle self-diagnostics separately from application code.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/error-handling.md#self-diagnostics","meta":"MAY · Unspecified"},{"type":"requirement","id":"Requirements","text":"To enable this clean separation, the OpenTelemetry API and SDK libraries MUST be provided as independent artifacts.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/library-guidelines.md#requirements","meta":"MUST · Unspecified"},{"type":"requirement","id":"Resource Detection","text":"These MUST be implemented outside of the SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/library-guidelines.md#resource-detection","meta":"MUST · Unspecified"},{"type":"requirement","id":"Version Labeling","text":"API and SDK packages MUST be labeled with their own version number.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/library-guidelines.md#version-labeling","meta":"MUST · Unspecified"},{"type":"requirement","id":"Version Labeling","text":"Because API and SDK package version numbers are not coupled, every API and SDK package release MUST clearly mention the Specification version number that they implement.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/library-guidelines.md#version-labeling","meta":"MUST · Unspecified"},{"type":"requirement","id":"Version Labeling","text":"OpenTelemetry client authors MUST include this information in the release notes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/library-guidelines.md#version-labeling","meta":"MUST · Unspecified"},{"type":"requirement","id":"Concurrency requirements","text":"LoggerProvider - all methods MUST be documented that implementations need to be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Logger - all methods MUST be documented that implementations need to be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"The API MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#emit-a-logrecord","meta":"MUST · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"When implicit Context is supported, then this parameter SHOULD be optional and if unspecified then MUST use current Context.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#emit-a-logrecord","meta":"MUST · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"When only explicit Context is supported, this parameter SHOULD be required.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#emit-a-logrecord","meta":"SHOULD · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"The API MAY accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#emit-a-logrecord","meta":"MAY · Stable"},{"type":"requirement","id":"Enabled","text":"To help users avoid performing computationally expensive operations when generating a LogRecord, a Logger SHOULD provide this Enabled API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enabled","text":"The API SHOULD accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enabled","text":"When implicit Context is supported, then this parameter SHOULD be optional and if unspecified then MUST use current Context.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#enabled","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"When only explicit Context is supported, accepting this parameter is REQUIRED.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#enabled","meta":"REQUIRED · Stable"},{"type":"requirement","id":"Enabled","text":"This API MUST return a language idiomatic boolean type.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#enabled","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"The API documentation SHOULD state that calling Enabled is optional and is not required before emitting a LogRecord.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enabled","text":"The documentation SHOULD also state that the returned value is not static and can change over time, so a cached value can become stale.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"Ergonomic API","text":"Languages MAY additionally provide a more ergonomic and convenient logging API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#ergonomic-api","meta":"MAY · Stable"},{"type":"requirement","id":"Ergonomic API","text":"The ergonomic API SHOULD make it more convenient to emit event records following the event semantics.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#ergonomic-api","meta":"SHOULD · Stable"},{"type":"requirement","id":"Ergonomic API","text":"The design of the ergonomic API SHOULD be idiomatic for its language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#ergonomic-api","meta":"SHOULD · Stable"},{"type":"requirement","id":"Get a Logger","text":"This API MUST accept the following instrumentation scope parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#get-a-logger","meta":"MUST · Stable"},{"type":"requirement","id":"Get a Logger","text":"This API MUST be structured to accept a variable number of attributes, including none.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#get-a-logger","meta":"MUST · Stable"},{"type":"requirement","id":"Logger","text":"The Logger MUST provide a function to:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#logger","meta":"MUST · Stable"},{"type":"requirement","id":"Logger","text":"The Logger SHOULD provide functions to:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#logger","meta":"SHOULD · Stable"},{"type":"requirement","id":"LoggerProvider","text":"Thus, the API SHOULD provide a way to set/register and access a global default LoggerProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#loggerprovider","meta":"SHOULD · Stable"},{"type":"requirement","id":"LoggerProvider operations","text":"The LoggerProvider MUST provide the following functions:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#loggerprovider-operations","meta":"MUST · Stable"},{"type":"requirement","id":"Optional and required parameters","text":"For each optional parameter, the API MUST be structured to accept it, but MUST NOT obligate a user to provide it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#optional-and-required-parameters","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Optional and required parameters","text":"For each required parameter, the API MUST be structured to obligate a user to provide it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/api.md#optional-and-required-parameters","meta":"MUST · Stable"},{"type":"requirement","id":"Comparing Severity","text":"Special handling MAY be given to SeverityNumber=0 when it is used to represent an unspecified severity.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#comparing-severity","meta":"MAY · Stable"},{"type":"requirement","id":"Errors and Exceptions","text":"Additional information about errors and/or exceptions that are associated with a log record MAY be included in the structured data in the Attributes section of the record.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#errors-and-exceptions","meta":"MAY · Stable"},{"type":"requirement","id":"Errors and Exceptions","text":"If included, they MUST follow the OpenTelemetry semantic conventions for exception-related attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#errors-and-exceptions","meta":"MUST · Stable"},{"type":"requirement","id":"Events","text":"All semantic conventions defined for logs SHOULD be formatted as Events.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#events","meta":"SHOULD · Stable"},{"type":"requirement","id":"Field: `Body`","text":"Body MUST support AnyValue to preserve the semantics of structured logs emitted by the applications.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#field-body","meta":"MUST · Stable"},{"type":"requirement","id":"Field: `EventName`","text":"This name SHOULD uniquely identify the event structure (both attributes and body).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#field-eventname","meta":"SHOULD · Stable"},{"type":"requirement","id":"Field: `ObservedTimestamp`","text":"This field SHOULD be set once the event is observed by OpenTelemetry.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#field-observedtimestamp","meta":"SHOULD · Stable"},{"type":"requirement","id":"Field: `Resource`","text":"SHOULD follow OpenTelemetry semantic conventions for Resources.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#field-resource","meta":"SHOULD · Stable"},{"type":"requirement","id":"Field: `SeverityNumber`","text":"SeverityNumber=0 MAY be used to represent an unspecified value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#field-severitynumber","meta":"MAY · Stable"},{"type":"requirement","id":"Field: `SpanId`","text":"If SpanId is present TraceId SHOULD be also present.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#field-spanid","meta":"SHOULD · Stable"},{"type":"requirement","id":"Mapping of `SeverityNumber`","text":"Source formats that do not define a concept of severity or log level MAY omit SeverityNumber and SeverityText fields.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/data-model.md#mapping-of-severitynumber","meta":"MAY · Stable"},{"type":"requirement","id":"Emit LogRecord","text":"The No-Op Logger MUST allow for emitting LogRecords.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#emit-logrecord","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"MUST always return false.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#enabled","meta":"MUST · Stable"},{"type":"requirement","id":"Logger Creation","text":"Therefore, LoggerProvider MUST allow for the creation of Loggers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#logger-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Logger Creation","text":"All Loggers created MUST be an instance of the No-Op Logger.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#logger-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Logger Creation","text":"Since all Loggers will hold the same empty state, a LoggerProvider MAY return the same Logger instances to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#logger-creation","meta":"MAY · Stable"},{"type":"requirement","id":"LoggerProvider","text":"The No-Op MUST allow the creation of multiple LoggerProviderss.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#loggerprovider","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerProvider","text":"Since all LoggerProviderss hold the same empty state, a No-Op MAY provide the same LoggerProvider instances to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#loggerprovider","meta":"MAY · Stable"},{"type":"requirement","id":"Logs API No-Op Implementation","text":"All language implementations of OpenTelemetry MUST provide a No-Op.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#logs-api-no-op-implementation","meta":"MUST · Stable"},{"type":"requirement","id":"Logs API No-Op Implementation","text":"All No-Op components MUST NOT hold configuration or operational state.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#logs-api-no-op-implementation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Logs API No-Op Implementation","text":"All No-op operations MUST accept all defined parameters, MUST NOT validate any arguments received, and MUST NOT return any non-empty error or log any message.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/noop.md#logs-api-no-op-implementation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Logs Exporter - Standard output","text":"Documentation SHOULD warn users about this.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk_exporters/stdout.md#logs-exporter---standard-output","meta":"SHOULD · Stable"},{"type":"requirement","id":"Logs Exporter - Standard output","text":"OpenTelemetry SDK authors MAY choose the best idiomatic name for their language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk_exporters/stdout.md#logs-exporter---standard-output","meta":"MAY · Stable"},{"type":"requirement","id":"Logs Exporter - Standard output","text":"If a language provides a mechanism to automatically configure a LogRecordProcessor to pair with the associated exporter (e.g., using the OTELLOGSEXPORTER environment variable), by default the standard output exporter SHOULD be paired with …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk_exporters/stdout.md#logs-exporter---standard-output","meta":"SHOULD · Stable"},{"type":"requirement","id":"Batching processor","text":"The processor MUST synchronize calls to LogRecordExporter's Export to make sure that they are not invoked concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#batching-processor","meta":"MUST · Stable"},{"type":"requirement","id":"Built-in processors","text":"The standard OpenTelemetry SDK MUST implement both simple and batch processors, as described below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#built-in-processors","meta":"MUST · Stable"},{"type":"requirement","id":"Built-in processors","text":"Other common processing scenarios SHOULD be first considered for implementation out-of-process in OpenTelemetry Collector.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#built-in-processors","meta":"SHOULD · Stable"},{"type":"requirement","id":"Built-in processors","text":"Additional processors defined in this document SHOULD be provided by SDK packages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#built-in-processors","meta":"SHOULD · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"LoggerProvider - Logger creation, ForceFlush and Shutdown MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Logger - all methods MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"LogRecordExporter - ForceFlush and Shutdown MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration","text":"Configuration ( i.e. LogRecordProcessors and (Development) LoggerConfigurator) MUST be owned by the LoggerProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#configuration","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration","text":"The configuration MAY be applied at the time of LoggerProvider creation if appropriate.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#configuration","meta":"MAY · Stable"},{"type":"requirement","id":"Configuration","text":"The LoggerProvider MAY provide methods to update the configuration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#configuration","meta":"MAY · Stable"},{"type":"requirement","id":"Configuration","text":"If configuration is updated (e.g., adding a LogRecordProcessor), the updated configuration MUST also apply to all already returned Loggers (i.e. it MUST NOT matter whether a Logger was obtained from the LoggerProvider before or after the c…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#configuration","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"If Observed Timestamp is unspecified, the implementation SHOULD set it equal to the current time.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#emit-a-logrecord","meta":"SHOULD · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"If an Exception is provided, the SDK MUST by default set attributes from the exception on the LogRecord with the conventions outlined in the exception semantic conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#emit-a-logrecord","meta":"MUST · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"User-provided attributes MUST take precedence and MUST NOT be overwritten by exception-derived attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#emit-a-logrecord","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"Note: For performance optimization, SDKs MAY take the configured attribute limits into consideration when generating large exception attributes (e.g., exception.stacktrace).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#emit-a-logrecord","meta":"MAY · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"Status: Development Before processing a log record, the implementation MUST apply the filtering rules defined by the LoggerConfig:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#emit-a-logrecord","meta":"MUST · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"Enabled: If the Logger is not enabled (i.e. LoggerConfig.enabled is false), the log record MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#emit-a-logrecord","meta":"MUST · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"Minimum severity: If the log record's SeverityNumber is specified (i.e. not 0) and is less than the configured minimum_severity, the log record MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#emit-a-logrecord","meta":"MUST · Stable"},{"type":"requirement","id":"Emit a LogRecord","text":"Trace-based: If trace_based is true, and if the log record has a SpanId and the TraceFlags SAMPLED flag is unset, the log record MUST be dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#emit-a-logrecord","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"Enabled MUST return false when either:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#enabled","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"Otherwise, it SHOULD return true.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enabled","text":"It MAY return false to support additional optimizations and features.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#enabled","meta":"MAY · Stable"},{"type":"requirement","id":"Enabled","text":"Enabled is an operation that a LogRecordProcessor MAY implement in order to support filtering via Logger.Enabled.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#enabled-1","meta":"MAY · Stable"},{"type":"requirement","id":"Enabled","text":"Any modifications to parameters inside Enabled MUST NOT be propagated to the caller.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#enabled-1","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Event to span event bridge","text":"This processor SHOULD be provided by SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#event-to-span-event-bridge","meta":"SHOULD · Stable"},{"type":"requirement","id":"Event to span event bridge","text":"The processor MUST bridge a LogRecord to a span event if and only if all of the following conditions are met:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#event-to-span-event-bridge","meta":"MUST · Stable"},{"type":"requirement","id":"Event to span event bridge","text":"If any of these conditions is not met, the processor MUST do nothing.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#event-to-span-event-bridge","meta":"MUST · Stable"},{"type":"requirement","id":"Event to span event bridge","text":"When a LogRecord is bridged, the processor MUST add exactly one span event with the following mapping:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#event-to-span-event-bridge","meta":"MUST · Stable"},{"type":"requirement","id":"Event to span event bridge","text":"the span event name MUST be the LogRecord's Event Name.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#event-to-span-event-bridge","meta":"MUST · Stable"},{"type":"requirement","id":"Event to span event bridge","text":"if the LogRecord has a Timestamp set, it MUST be used as the span event timestamp.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#event-to-span-event-bridge","meta":"MUST · Stable"},{"type":"requirement","id":"Event to span event bridge","text":"Otherwise, if the LogRecord has an ObservedTimestamp set, it MUST be used as the span event timestamp.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#event-to-span-event-bridge","meta":"MUST · Stable"},{"type":"requirement","id":"Event to span event bridge","text":"all LogRecord Attributes MUST be copied to the span event as span event attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#event-to-span-event-bridge","meta":"MUST · Stable"},{"type":"requirement","id":"Event to span event bridge","text":"Note that bridging a LogRecord to a span event MUST NOT prevent that LogRecord from continuing through the normal log processing pipeline.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#event-to-span-event-bridge","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Export","text":"Export MUST NOT block indefinitely, there MUST be a reasonable upper limit after which the call must time out with an error result (Failure).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#export","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Export","text":"The default SDK's LogRecordProcessors SHOULD NOT implement retry logic, as the required logic is likely to depend heavily on the specific protocol and backend the logs are being sent to.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#export","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD return some ERROR status if there is an error condition; and if there is no error condition, it SHOULD return some NO ERROR status, language implementations MAY decide how to model ERROR and NO ERROR.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush MAY be implemented as a blocking API or an asynchronous API which notifies the caller via a callback or an event.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush","meta":"MAY · Stable"},{"type":"requirement","id":"ForceFlush","text":"OpenTelemetry SDK authors MAY decide if they want to make the flush timeout configurable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush","meta":"MAY · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush MUST invoke ForceFlush on all registered LogRecordProcessors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush","meta":"MUST · Stable"},{"type":"requirement","id":"ForceFlush","text":"This is a hint to ensure that any tasks associated with LogRecords for which the LogRecordProcessor had already received events prior to the call to ForceFlush SHOULD be completed as soon as possible, preferably before returning from this …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"In particular, if any LogRecordProcessor has any associated exporter, it SHOULD try to call the exporter's Export with all LogRecords for which this was not already done and then invoke ForceFlush on it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"The built-in LogRecordProcessors MUST do so.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-1","meta":"MUST · Stable"},{"type":"requirement","id":"ForceFlush","text":"If a timeout is specified (see below), the LogRecordProcessor MUST prioritize honoring the timeout over finishing all calls.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-1","meta":"MUST · Stable"},{"type":"requirement","id":"ForceFlush","text":"It MAY skip or abort some or all Export or ForceFlush calls it has made to achieve this goal.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-1","meta":"MAY · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD only be called in cases where it is absolutely necessary, such as when using some FaaS providers that may suspend the process after an invocation, but before the LogRecordProcessor exports the emitted LogRecords.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"This is a hint to ensure that the export of any ReadableLogRecords the exporter has received prior to the call to ForceFlush SHOULD be completed as soon as possible, preferably before returning from this method.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD only be called in cases where it is absolutely necessary, such as when using some FaaS providers that may suspend the process after an invocation, but before the exporter exports the ReadlableLogRecords.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"OpenTelemetry SDK authors MAY decide if they want to make the flush timeout configurable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#forceflush-2","meta":"MAY · Stable"},{"type":"requirement","id":"Logger","text":"Status: Development - Logger MUST behave according to the LoggerConfig computed during logger creation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logger","meta":"MUST · Stable"},{"type":"requirement","id":"Logger","text":"If the LoggerProvider supports updating the LoggerConfigurator, then upon update the Logger MUST be updated to behave according to the new LoggerConfig.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logger","meta":"MUST · Stable"},{"type":"requirement","id":"Logger Creation","text":"It SHOULD only be possible to create Logger instances through a LoggerProvider (see API).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logger-creation","meta":"SHOULD · Stable"},{"type":"requirement","id":"Logger Creation","text":"The LoggerProvider MUST implement the Get a Logger API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logger-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Logger Creation","text":"The input provided by the user MUST be used to create an InstrumentationScope instance which is stored on the created Logger.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logger-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Logger Creation","text":"In the case where an invalid name (null or empty string) is specified, a working Logger MUST be returned as a fallback rather than returning null or throwing an exception, its name SHOULD keep the original invalid value, and a message repo…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logger-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Logger Creation","text":"Status: Development - The LoggerProvider MUST compute the relevant LoggerConfig using the configured LoggerConfigurator, and create a Logger whose behavior conforms to that LoggerConfig.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logger-creation","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerConfig","text":"If not explicitly set, the enabled parameter SHOULD default to true ( i.e. Loggers are enabled by default).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfig","meta":"SHOULD · Stable"},{"type":"requirement","id":"LoggerConfig","text":"If a Logger is disabled, it MUST behave equivalently to No-op Logger.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfig","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerConfig","text":"If not explicitly set, the minimum_severity parameter MUST default to 0.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfig","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerConfig","text":"If a log record's SeverityNumber is specified (i.e. not 0) and is less than the configured minimum_severity, the log record MUST be dropped by the Logger.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfig","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerConfig","text":"If not explicitly set, the trace_based parameter MUST default to false.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfig","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerConfig","text":"If trace_based is false, log records MUST NOT be affected because of this parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfig","meta":"MUST NOT · Stable"},{"type":"requirement","id":"LoggerConfig","text":"If trace_based is true, log records associated with unsampled traces MUST be dropped by the Logger.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfig","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerConfig","text":"However, the changes MUST be eventually visible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfig","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerConfigurator","text":"The function MUST accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfigurator","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerConfigurator","text":"The function MUST return the relevant LoggerConfig, or some signal indicating that the default LoggerConfig should be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfigurator","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerConfigurator","text":"This signal MAY be nil, null, empty, or an instance of the default LoggerConfig depending on what is idiomatic in the language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfigurator","meta":"MAY · Stable"},{"type":"requirement","id":"LoggerConfigurator","text":"However, implementations MAY provide shorthand or helper functions to accommodate common use cases:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerconfigurator","meta":"MAY · Stable"},{"type":"requirement","id":"LoggerProvider","text":"A LoggerProvider MUST provide a way to allow a Resource to be specified.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerprovider","meta":"MUST · Stable"},{"type":"requirement","id":"LoggerProvider","text":"If a Resource is specified, it SHOULD be associated with all the LogRecords produced by any Logger from the LoggerProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerprovider","meta":"SHOULD · Stable"},{"type":"requirement","id":"LoggerProvider Creation","text":"The SDK SHOULD allow the creation of multiple independent LoggerProviderss.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#loggerprovider-creation","meta":"SHOULD · Stable"},{"type":"requirement","id":"LogRecord Limits","text":"LogRecord attributes MUST adhere to the common rules of attribute limits.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logrecord-limits","meta":"MUST · Stable"},{"type":"requirement","id":"LogRecord Limits","text":"If the SDK implements attribute limits it MUST provide a way to change these limits, via a configuration to the LoggerProvider, by allowing users to configure individual limits like in the Java example below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logrecord-limits","meta":"MUST · Stable"},{"type":"requirement","id":"LogRecord Limits","text":"The options MAY be bundled in a class, which then SHOULD be called LogRecordLimits.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logrecord-limits","meta":"SHOULD · Stable"},{"type":"requirement","id":"LogRecord Limits","text":"There SHOULD be a message printed in the SDK's log to indicate to the user that an attribute was discarded due to such a limit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logrecord-limits","meta":"SHOULD · Stable"},{"type":"requirement","id":"LogRecord Limits","text":"To prevent excessive logging, the message MUST be printed at most once per LogRecord (i.e., not per discarded attribute).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logrecord-limits","meta":"MUST · Stable"},{"type":"requirement","id":"LogRecordExporter","text":"Each implementation MUST document the concurrency characteristics the SDK requires of the exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logrecordexporter","meta":"MUST · Stable"},{"type":"requirement","id":"LogRecordExporter operations","text":"A LogRecordExporter MUST support the following functions:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logrecordexporter-operations","meta":"MUST · Stable"},{"type":"requirement","id":"LogRecordProcessor","text":"The SDK MUST allow each pipeline to end with an individual exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logrecordprocessor","meta":"MUST · Stable"},{"type":"requirement","id":"LogRecordProcessor","text":"The SDK MUST allow users to implement and configure custom processors and decorate built-in processors for advanced scenarios such as enriching with attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logrecordprocessor","meta":"MUST · Stable"},{"type":"requirement","id":"Logs SDK","text":"All language implementations of OpenTelemetry MUST provide an SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#logs-sdk","meta":"MUST · Stable"},{"type":"requirement","id":"OnEmit","text":"This method is called synchronously on the thread that emitted the LogRecord, therefore it SHOULD NOT block or throw exceptions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#onemit","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"OnEmit","text":"For a LogRecordProcessor registered directly on SDK LoggerProvider, the logRecord mutations MUST be visible in next registered processors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#onemit","meta":"MUST · Stable"},{"type":"requirement","id":"OnEmit","text":"However, it is OPTIONAL for ReadWriteLogRecord to be concurrent-safe.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#onemit","meta":"OPTIONAL · Stable"},{"type":"requirement","id":"OnEmit","text":"To avoid such race conditions, implementations SHOULD recommended to users that a clone of logRecord be used for any concurrent processing, such as in a batching processor.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#onemit","meta":"SHOULD · Stable"},{"type":"requirement","id":"ReadableLogRecord","text":"A function receiving this as an argument MUST be able to access all the information added to the LogRecord.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#readablelogrecord","meta":"MUST · Stable"},{"type":"requirement","id":"ReadableLogRecord","text":"It MUST also be able to access the Instrumentation Scope and Resource information (implicitly) associated with the LogRecord.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#readablelogrecord","meta":"MUST · Stable"},{"type":"requirement","id":"ReadableLogRecord","text":"The trace context fields MUST be populated from the resolved Context (either the explicitly passed Context or the current Context) when emitted.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#readablelogrecord","meta":"MUST · Stable"},{"type":"requirement","id":"ReadableLogRecord","text":"Counts for attributes due to collection limits MUST be available for exporters to report as described in the transformation to non-OTLP formats specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#readablelogrecord","meta":"MUST · Stable"},{"type":"requirement","id":"ReadWriteLogRecord","text":"A function receiving this as an argument MUST additionally be able to modify the following information added to the LogRecord:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#readwritelogrecord","meta":"MUST · Stable"},{"type":"requirement","id":"ReadWriteLogRecord","text":"The SDK MAY provide an operation that makes a deep clone of a ReadWriteLogRecord.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#readwritelogrecord","meta":"MAY · Stable"},{"type":"requirement","id":"Self-observability","text":"The Logs SDK SHOULD support SDK self-observability.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#self-observability","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown MUST be called only once for each LoggerProvider instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown","meta":"MUST · Stable"},{"type":"requirement","id":"Shutdown","text":"SDKs SHOULD return a valid no-op Logger for these calls, if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown MAY be implemented as a blocking API or an asynchronous API which notifies the caller via a callback or an event.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown","meta":"MAY · Stable"},{"type":"requirement","id":"Shutdown","text":"OpenTelemetry SDK authors MAY decide if they want to make the shutdown timeout configurable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown","meta":"MAY · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown MUST be implemented by invoking Shutdown on all registered LogRecordProcessors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown","meta":"MUST · Stable"},{"type":"requirement","id":"ShutDown","text":"Shutdown SHOULD be called only once for each LogRecordProcessor instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ShutDown","text":"SDKs SHOULD ignore these calls gracefully, if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ShutDown","text":"Shutdown SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ShutDown","text":"Shutdown MUST include the effects of ForceFlush.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown-1","meta":"MUST · Stable"},{"type":"requirement","id":"ShutDown","text":"Shutdown SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD be called only once for each LogRecordExporter instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"After the call to Shutdown subsequent calls to Export are not allowed and SHOULD return a Failure result.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD NOT block indefinitely (e.g. if it attempts to flush the data and the destination is unavailable).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown-2","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Shutdown","text":"OpenTelemetry SDK authors MAY decide if they want to make the shutdown timeout configurable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#shutdown-2","meta":"MAY · Stable"},{"type":"requirement","id":"Simple processor","text":"The processor MUST synchronize calls to LogRecordExporter's Export to make sure that they are not invoked concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/logs/sdk.md#simple-processor","meta":"MUST · Stable"},{"type":"requirement","id":"Add","text":"This API SHOULD NOT return a value (it MAY return a dummy value if required by certain programming languages or systems, for example null, undefined).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Add","text":"This API MUST accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"MUST · Stable"},{"type":"requirement","id":"Add","text":"If possible, this API SHOULD be structured so a user is obligated to provide this parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"SHOULD · Stable"},{"type":"requirement","id":"Add","text":"If it is not possible to structurally enforce this obligation, this API MUST be documented in a way to communicate to users that this parameter is needed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"MUST · Stable"},{"type":"requirement","id":"Add","text":"This API SHOULD be documented in a way to communicate to users that this value is expected to be non-negative.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"SHOULD · Stable"},{"type":"requirement","id":"Add","text":"This API SHOULD NOT validate this value, that is left to implementations of the API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Add","text":"Therefore, this API MUST be structured to accept a variable number of attributes, including none.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"MUST · Stable"},{"type":"requirement","id":"Add","text":"The OpenTelemetry API authors MAY decide to allow flexible attributes to be passed in as arguments.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"MAY · Stable"},{"type":"requirement","id":"Add","text":"If the attribute names and types are provided during the counter creation, the OpenTelemetry API authors MAY allow attribute values to be passed in using a more efficient way (e.g. strong typed struct allocated on the callstack, tuple).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"MAY · Stable"},{"type":"requirement","id":"Add","text":"The API MUST allow callers to provide flexible attributes at invocation time rather than having to register all the possible attribute names during the instrument creation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add","meta":"MUST · Stable"},{"type":"requirement","id":"Add","text":"This API SHOULD NOT return a value (it MAY return a dummy value if required by certain programming languages or systems, for example null, undefined).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add-1","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Add","text":"This API MUST accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add-1","meta":"MUST · Stable"},{"type":"requirement","id":"Add","text":"If possible, this API SHOULD be structured so a user is obligated to provide this parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"Add","text":"If it is not possible to structurally enforce this obligation, this API MUST be documented in a way to communicate to users that this parameter is needed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add-1","meta":"MUST · Stable"},{"type":"requirement","id":"Add","text":"Therefore, this API MUST be structured to accept a variable number of attributes, including none.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add-1","meta":"MUST · Stable"},{"type":"requirement","id":"Add","text":"OpenTelemetry API authors MAY decide to allow flexible attributes to be passed in as individual arguments.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add-1","meta":"MAY · Stable"},{"type":"requirement","id":"Add","text":"OpenTelemetry API authors MAY allow attribute values to be passed in using a more efficient way (e.g. strong typed struct allocated on the callstack, tuple).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#add-1","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Counter creation","text":"There MUST NOT be any API for creating an Asynchronous Counter other than with a Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-counter-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Counter creation","text":"This MAY be called CreateObservableCounter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Counter creation","text":"If strong type is desired, OpenTelemetry API authors MAY decide the language idiomatic name(s), for example CreateUInt64ObservableCounter, CreateDoubleObservableCounter, CreateObservableCounter<UInt64>, CreateObservableCounter<double>.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Counter creation","text":"OpenTelemetry API authors MAY decide what is the idiomatic approach.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Counter creation","text":"If it happens, OpenTelemetry SDK authors MAY decide how to handle it in the SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Counter creation","text":"For example, during the callback invocation if two measurements value=1, attributes={pid:4, bitness:64} and value=2, attributes={pid:4, bitness:64} are reported, OpenTelemetry SDK authors MAY decide to simply let them pass through (so the …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Counter creation","text":"The API MUST treat observations from a single callback as logically taking place at a single instant, such that when recorded, observations from a single callback MUST be reported with identical timestamps.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-counter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Counter creation","text":"The API SHOULD provide some way to pass state to the callback.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-counter-creation","meta":"SHOULD · Stable"},{"type":"requirement","id":"Asynchronous Counter creation","text":"OpenTelemetry API authors MAY decide what is the idiomatic approach (e.g. it could be an additional parameter to the callback function, or captured by the lambda closure, or something else).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Gauge creation","text":"There MUST NOT be any API for creating an Asynchronous Gauge other than with a Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-gauge-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Gauge creation","text":"This MAY be called CreateObservableGauge.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-gauge-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Gauge creation","text":"If strong type is desired, OpenTelemetry API authors MAY decide the language idiomatic name(s), for example CreateUInt64ObservableGauge, CreateDoubleObservableGauge, CreateObservableGauge<UInt64>, CreateObservableGauge<double>.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-gauge-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"The API to construct asynchronous instruments MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"If possible, the API SHOULD be structured so a user is obligated to provide this parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"If it is not possible to structurally enforce this obligation, the API MUST be documented in a way to communicate to users that this parameter is needed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"The API SHOULD be documented in a way to communicate to users that the name parameter needs to conform to the instrument name syntax.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"The API SHOULD NOT validate the name, that is left to implementations of the API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Therefore, this API needs to be structured to accept a unit, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Meaning, the API MUST accept a case-sensitive string that supports ASCII character encoding and can hold at least 63 characters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"The API SHOULD NOT validate the unit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Therefore, this API needs to be structured to accept a description, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Meaning, the API MUST accept a string that supports at least BMP (Unicode Plane 0)#BasicMultilingualPlane) encoded characters and hold at least 1023 characters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Therefore, this API needs to be structured to accept advisory parameters, but MUST NOT obligate the user to provide it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"The API SHOULD NOT validate advisory parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Therefore, this API MUST be structured to accept a variable number of callback functions, including none.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"The API MUST support creation of asynchronous instruments by passing zero or more callback functions to be permanently registered to the newly created instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"The API SHOULD support registration of callback functions associated with asynchronous instruments after they are created.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Where the API supports registration of callback functions after asynchronous instrumentation creation, the user MUST be able to undo registration of the specific callback after its registration by some means.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Every currently registered Callback associated with a set of instruments MUST be evaluated exactly once during collection prior to reading data for that instrument set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Callback functions MUST be documented as follows for the end user:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Callback functions SHOULD be reentrant safe.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Callback functions SHOULD NOT take an indefinite amount of time.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Callback functions SHOULD NOT make duplicate observations (more than one Measurement with the same attributes) across all registered callbacks.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"OpenTelemetry API authors MAY decide what is the idiomatic approach for capturing measurements from callback functions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Callbacks registered at the time of instrument creation MUST apply to the single instruments which is under construction.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Callbacks registered after the time of instrument creation MAY be associated with multiple instruments.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Idiomatic APIs for multiple-instrument Callbacks MUST distinguish the instrument associated with each observed Measurement value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"Multiple-instrument Callbacks MUST be associated at the time of registration with a declared set of asynchronous instruments from the same Meter instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"The API MUST treat observations from a single Callback as logically taking place at a single instant, such that when recorded, observations from a single callback MUST be reported with identical timestamps.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"The API SHOULD provide some way to pass state to the callback.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"SHOULD · Stable"},{"type":"requirement","id":"Asynchronous Instrument API","text":"OpenTelemetry API authors MAY decide what is the idiomatic approach (e.g. it could be an additional parameter to the callback function, or captured by the lambda closure, or something else).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-instrument-api","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter creation","text":"There MUST NOT be any API for creating an Asynchronous UpDownCounter other than with a Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-updowncounter-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter creation","text":"This MAY be called CreateObservableUpDownCounter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-updowncounter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter creation","text":"If strong type is desired, OpenTelemetry API authors MAY decide the language idiomatic name(s), for example CreateUInt64ObservableUpDownCounter, CreateDoubleObservableUpDownCounter, CreateObservableUpDownCounter<UInt64>, CreateObservableUp…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#asynchronous-updowncounter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Bind","text":"This API MUST accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#bind","meta":"MUST · Stable"},{"type":"requirement","id":"Bind","text":"Therefore, this API MUST be structured to accept a variable number of attributes, including none.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#bind","meta":"MUST · Stable"},{"type":"requirement","id":"Bind","text":"This API MUST return a language-idiomatic type representing the instrument bound to those attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#bind","meta":"MUST · Stable"},{"type":"requirement","id":"Bind","text":"The returned bound instrument MUST support the instrument's core recording operation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#bind","meta":"MUST · Stable"},{"type":"requirement","id":"Bind","text":"This MAY be achieved by introducing a dedicated bound instrument type, or by reusing the existing instrument interface.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#bind","meta":"MAY · Stable"},{"type":"requirement","id":"Bind","text":"If the existing instrument interface is reused, the Bind API MUST be documented to communicate to users that invoking attribute-bearing recording operations on the returned bound instrument negates the performance benefits of binding.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#bind","meta":"MUST · Stable"},{"type":"requirement","id":"Compatibility requirements","text":"All the metrics components SHOULD allow new APIs to be added to existing components without introducing breaking changes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#compatibility-requirements","meta":"SHOULD · Stable"},{"type":"requirement","id":"Compatibility requirements","text":"All the metrics APIs SHOULD allow optional parameter(s) to be added to existing APIs without introducing breaking changes, if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#compatibility-requirements","meta":"SHOULD · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"MeterProvider - all methods MUST be documented that implementations need to be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Meter - all methods MUST be documented that implementations need to be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Instrument - all methods MUST be documented that implementations need to be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Counter creation","text":"There MUST NOT be any API for creating a Counter other than with a Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#counter-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Counter creation","text":"This MAY be called CreateCounter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Counter creation","text":"If strong type is desired, OpenTelemetry API authors MAY decide the language idiomatic name(s), for example CreateUInt64Counter, CreateDoubleCounter, CreateCounter<UInt64>, CreateCounter<double>.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Enabled","text":"To help users avoid performing computationally expensive operations when recording measurements, synchronous instruments SHOULD provide this Enabled API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enabled","text":"Parameters can be added in the future, therefore, the API MUST be structured in a way for parameters to be added.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#enabled","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"This API MUST return a language idiomatic boolean type.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#enabled","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"The API SHOULD be documented that instrumentation authors needs to call this API each time they record a measurement to ensure they have the most up-to-date response.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"Gauge creation","text":"There MUST NOT be any API for creating a Gauge other than with a Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#gauge-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Gauge creation","text":"This MAY be called CreateGauge.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#gauge-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Gauge creation","text":"If strong type is desired, OpenTelemetry API authors MAY decide the language idiomatic name(s), for example CreateUInt64Gauge, CreateDoubleGauge, CreateGauge<UInt64>, CreateGauge<double>.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#gauge-creation","meta":"MAY · Stable"},{"type":"requirement","id":"General operations","text":"All synchronous instruments SHOULD provide functions to:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#general-operations","meta":"SHOULD · Stable"},{"type":"requirement","id":"General operations","text":"All synchronous instruments MAY provide:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#general-operations","meta":"MAY · Stable"},{"type":"requirement","id":"Get a Meter","text":"This API MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#get-a-meter","meta":"MUST · Stable"},{"type":"requirement","id":"Get a Meter","text":"Therefore, this API needs to be structured to accept a version, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#get-a-meter","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Get a Meter","text":"Therefore, this API needs to be structured to accept a schemaurl, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#get-a-meter","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Get a Meter","text":"Therefore, this API MUST be structured to accept a variable number of attributes, including none.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#get-a-meter","meta":"MUST · Stable"},{"type":"requirement","id":"Histogram creation","text":"There MUST NOT be any API for creating a Histogram other than with a Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#histogram-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Histogram creation","text":"This MAY be called CreateHistogram.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#histogram-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Histogram creation","text":"If strong type is desired, OpenTelemetry API authors MAY decide the language idiomatic name(s), for example CreateUInt64Histogram, CreateDoubleHistogram, CreateHistogram<UInt64>, CreateHistogram<double>.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#histogram-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Instrument","text":"Language-level features such as the distinction between integer and floating point numbers SHOULD be considered as identifying.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument","meta":"SHOULD · Stable"},{"type":"requirement","id":"Instrument advisory parameters","text":"They differ from other parameters in that Implementations MAY ignore advisory parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument-advisory-parameters","meta":"MAY · Stable"},{"type":"requirement","id":"Instrument advisory parameters","text":"OpenTelemetry SDKs MUST handle advisory parameters as described here.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument-advisory-parameters","meta":"MUST · Stable"},{"type":"requirement","id":"Instrument description","text":"The API MUST treat it as an opaque string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument-description","meta":"MUST · Stable"},{"type":"requirement","id":"Instrument description","text":"It MUST support BMP (Unicode Plane 0)#BasicMultilingualPlane), which is basically only the first three bytes of UTF-8 (or utf8mb3).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument-description","meta":"MUST · Stable"},{"type":"requirement","id":"Instrument description","text":"OpenTelemetry API authors MAY decide if they want to support more Unicode Planes).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument-description","meta":"MAY · Stable"},{"type":"requirement","id":"Instrument description","text":"It MUST support at least 1023 characters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument-description","meta":"MUST · Stable"},{"type":"requirement","id":"Instrument description","text":"OpenTelemetry API authors MAY decide if they want to support more.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument-description","meta":"MAY · Stable"},{"type":"requirement","id":"Instrument unit","text":"The API SHOULD treat it as an opaque string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument-unit","meta":"SHOULD · Stable"},{"type":"requirement","id":"Instrument unit","text":"It MUST be case-sensitive (e.g. kb and kB are different units), ASCII string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#instrument-unit","meta":"MUST · Stable"},{"type":"requirement","id":"Meter","text":"Note: Meter SHOULD NOT be responsible for the configuration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#meter","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Meter operations","text":"The Meter MUST provide functions to create new Instruments:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#meter-operations","meta":"MUST · Stable"},{"type":"requirement","id":"MeterProvider","text":"Thus, the API SHOULD provide a way to set/register and access a global default MeterProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#meterprovider","meta":"SHOULD · Stable"},{"type":"requirement","id":"MeterProvider operations","text":"The MeterProvider MUST provide the following functions:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#meterprovider-operations","meta":"MUST · Stable"},{"type":"requirement","id":"Multiple-instrument callbacks","text":"The Metrics API MAY support an interface allowing the use of multiple instruments from a single registered Callback.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#multiple-instrument-callbacks","meta":"MAY · Stable"},{"type":"requirement","id":"Multiple-instrument callbacks","text":"The API to register a new Callback SHOULD accept:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#multiple-instrument-callbacks","meta":"SHOULD · Stable"},{"type":"requirement","id":"Multiple-instrument callbacks","text":"It is RECOMMENDED that the API authors use one of the following forms for the callback function:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#multiple-instrument-callbacks","meta":"RECOMMENDED · Stable"},{"type":"requirement","id":"Record","text":"This API SHOULD NOT return a value (it MAY return a dummy value if required by certain programming languages or systems, for example null, undefined).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Record","text":"This API MUST accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record","meta":"MUST · Stable"},{"type":"requirement","id":"Record","text":"If possible, this API SHOULD be structured so a user is obligated to provide this parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record","meta":"SHOULD · Stable"},{"type":"requirement","id":"Record","text":"If it is not possible to structurally enforce this obligation, this API MUST be documented in a way to communicate to users that this parameter is needed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record","meta":"MUST · Stable"},{"type":"requirement","id":"Record","text":"This API SHOULD be documented in a way to communicate to users that this value is expected to be non-negative.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record","meta":"SHOULD · Stable"},{"type":"requirement","id":"Record","text":"This API SHOULD NOT validate this value, that is left to implementations of the API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Record","text":"Therefore, this API MUST be structured to accept a variable number of attributes, including none.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record","meta":"MUST · Stable"},{"type":"requirement","id":"Record","text":"OpenTelemetry API authors MAY decide to allow flexible attributes to be passed in as individual arguments.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record","meta":"MAY · Stable"},{"type":"requirement","id":"Record","text":"OpenTelemetry API authors MAY allow attribute values to be passed in using a more efficient way (e.g. strong typed struct allocated on the callstack, tuple).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record","meta":"MAY · Stable"},{"type":"requirement","id":"Record","text":"This API SHOULD NOT return a value (it MAY return a dummy value if required by certain programming languages or systems, for example null, undefined).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record-1","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Record","text":"This API MUST accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record-1","meta":"MUST · Stable"},{"type":"requirement","id":"Record","text":"If possible, this API SHOULD be structured so a user is obligated to provide this parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"Record","text":"If it is not possible to structurally enforce this obligation, this API MUST be documented in a way to communicate to users that this parameter is needed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record-1","meta":"MUST · Stable"},{"type":"requirement","id":"Record","text":"Therefore, this API MUST be structured to accept a variable number of attributes, including none.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record-1","meta":"MUST · Stable"},{"type":"requirement","id":"Record","text":"The OpenTelemetry API authors MAY decide to allow flexible attributes to be passed in as arguments.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record-1","meta":"MAY · Stable"},{"type":"requirement","id":"Record","text":"If the attribute names and types are provided during the gauge creation, the OpenTelemetry API authors MAY allow attribute values to be passed in using a more efficient way (e.g. strong typed struct allocated on the callstack, tuple).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record-1","meta":"MAY · Stable"},{"type":"requirement","id":"Record","text":"The API MUST allow callers to provide flexible attributes at invocation time rather than having to register all the possible attribute names during the instrument creation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#record-1","meta":"MUST · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"The API to construct synchronous instruments MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"If possible, the API SHOULD be structured so a user is obligated to provide this parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"SHOULD · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"If it is not possible to structurally enforce this obligation, the API MUST be documented in a way to communicate to users that this parameter is needed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"The API SHOULD be documented in a way to communicate to users that the name parameter needs to conform to the instrument name syntax.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"SHOULD · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"The API SHOULD NOT validate the name; that is left to implementations of the API, like the SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"Therefore, this API needs to be structured to accept a unit, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"Meaning, the API MUST accept a case-sensitive string that supports ASCII character encoding and can hold at least 63 characters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"The API SHOULD NOT validate the unit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"Therefore, this API needs to be structured to accept a description, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"Meaning, the API MUST accept a string that supports at least BMP (Unicode Plane 0)#BasicMultilingualPlane) encoded characters and hold at least 1023 characters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"MUST · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"Therefore, this API needs to be structured to accept advisory parameters, but MUST NOT obligate the user to provide it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Synchronous Instrument API","text":"The API SHOULD NOT validate advisory parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#synchronous-instrument-api","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"UpDownCounter creation","text":"There MUST NOT be any API for creating an UpDownCounter other than with a Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#updowncounter-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"UpDownCounter creation","text":"This MAY be called CreateUpDownCounter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#updowncounter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"UpDownCounter creation","text":"If strong type is desired, OpenTelemetry API authors MAY decide the language idiomatic name(s), for example CreateInt64UpDownCounter, CreateDoubleUpDownCounter, CreateUpDownCounter<Int64>, CreateUpDownCounter<double>.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/api.md#updowncounter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"All Scales: Use the Logarithm Function","text":"The methods in this section MAY be used at all scales, although they are definitely useful for positive scales.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#all-scales-use-the-logarithm-function","meta":"MAY · Mixed"},{"type":"requirement","id":"All Scales: Use the Logarithm Function","text":"Since it is relatively simple to check for exact powers of two, implementations SHOULD apply such a special case:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#all-scales-use-the-logarithm-function","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ExponentialHistogram: Consumer Recommendations","text":"Consumers MAY round the unrepresentable boundary of a partially representable bucket index to the nearest representable value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#exponentialhistogram-consumer-recommendations","meta":"MAY · Mixed"},{"type":"requirement","id":"ExponentialHistogram: Consumer Recommendations","text":"Consumers SHOULD reject ExponentialHistogram data with scale and bucket indexes that overflow or underflow this representation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#exponentialhistogram-consumer-recommendations","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ExponentialHistogram: Consumer Recommendations","text":"Consumers that reject such data SHOULD warn the user through error logging that out-of-range data was received.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#exponentialhistogram-consumer-recommendations","meta":"SHOULD · Mixed"},{"type":"requirement","id":"No recorded value","text":"It serves as an indicator that a previously present timeseries was removed and that this timeseries SHOULD NOT be returned in queries after such an indicator was received.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#no-recorded-value","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"No recorded value","text":"If this flag is set, all other data point properties except attributes, time stamps, or time windows, SHOULD be ignored.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#no-recorded-value","meta":"SHOULD · Mixed"},{"type":"requirement","id":"OpenTelemetry Protocol data model: Consumer recommendations","text":"Consumers MAY reject OpenTelemetry Metrics data containing semantic errors (i.e., more than one Metric identity for a given name, Resource, and Scope).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#opentelemetry-protocol-data-model-consumer-recommendations","meta":"MAY · Mixed"},{"type":"requirement","id":"OpenTelemetry Protocol data model: Producer recommendations","text":"Producers SHOULD prevent the presence of multiple Metric identities for a given name with the same Resource and Scope attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#opentelemetry-protocol-data-model-producer-recommendations","meta":"SHOULD · Mixed"},{"type":"requirement","id":"OpenTelemetry Protocol data model: Producer recommendations","text":"Producers MAY be able to remediate the problem, depending on whether they are an SDK or a downstream processor:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#opentelemetry-protocol-data-model-producer-recommendations","meta":"MAY · Mixed"},{"type":"requirement","id":"OpenTelemetry Protocol data model: Producer recommendations","text":"If the potential conflict involves a non-identifying property (i.e., description), the producer SHOULD choose the longer string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#opentelemetry-protocol-data-model-producer-recommendations","meta":"SHOULD · Mixed"},{"type":"requirement","id":"OpenTelemetry Protocol data model: Producer recommendations","text":"If the potential conflict involves similar but disagreeing units (e.g., \"ms\" and \"s\"), an implementation MAY convert units to avoid semantic errors; otherwise an implementation SHOULD inform the user of a semantic error and pass through co…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#opentelemetry-protocol-data-model-producer-recommendations","meta":"SHOULD · Mixed"},{"type":"requirement","id":"OpenTelemetry Protocol data model: Producer recommendations","text":"If the potential conflict involves an AggregationTemporality property, an implementation MAY convert temporality using a Cumulative-to-Delta or a Delta-to-Cumulative transformation; otherwise, an implementation SHOULD inform the user of a …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#opentelemetry-protocol-data-model-producer-recommendations","meta":"SHOULD · Mixed"},{"type":"requirement","id":"OpenTelemetry Protocol data model: Producer recommendations","text":"Generally, for potential conflicts involving an identifying property (i.e., all properties except description), the producer SHOULD inform the user of a semantic error and pass through conflicting data.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#opentelemetry-protocol-data-model-producer-recommendations","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Overlap interpolation","text":"In this case, OpenTelemetry collectors SHOULD modify points at the change-over using interpolation for Sum data points, to reduce gaps to zero width in these cases, without any overlap.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#overlap-interpolation","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Overlap observability","text":"OpenTelemetry collectors SHOULD export telemetry when they observe overlapping points in data streams, so that the user can monitor for erroneous configurations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#overlap-observability","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Overlap resolution","text":"When there are overlapping points, receivers SHOULD eliminate points so that there are no overlaps.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#overlap-resolution","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Producer Expectations","text":"Producers MAY use an inexact mapping function because in the general case:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#producer-expectations","meta":"MAY · Mixed"},{"type":"requirement","id":"Producer Expectations","text":"Generally, producers SHOULD use a mapping function with an expected difference of at most 1 from the correct result for all inputs.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#producer-expectations","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Producer Expectations","text":"Regardless of scale, producers SHOULD ensure that the index of any encoded bucket falls within the range of a signed 32-bit integer.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#producer-expectations","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Single-Writer","text":"All metric data streams within OTLP MUST have one logical writer.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#single-writer","meta":"MUST · Mixed"},{"type":"requirement","id":"Single-Writer","text":"This means, conceptually, that any Timeseries created from the Protocol MUST have one originating source of truth.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#single-writer","meta":"MUST · Mixed"},{"type":"requirement","id":"Single-Writer","text":"All metric data streams produced by OTel SDKs SHOULD have globally unique identity at any given point in time.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#single-writer","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Single-Writer","text":"Aggregations of metric streams MUST only be written from a single logical source at any given point time.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#single-writer","meta":"MUST · Mixed"},{"type":"requirement","id":"Single-Writer","text":"Receivers SHOULD presume a single writer was intended and eliminate overlap / deduplicate.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#single-writer","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Summary (Legacy)","text":"This MUST be non-negative.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#summary-legacy","meta":"MUST · Mixed"},{"type":"requirement","id":"Sums","text":"For delta monotonic sums, this means the reader SHOULD expect non-negative values.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#sums","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Sums","text":"For cumulative monotonic sums, this means the reader SHOULD expect values that are not less than the previous value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/data-model.md#sums","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Asynchronous Counter","text":"Asynchronous Counters MUST NOT return a non-empty error or log any message for any operations they perform.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-counter","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Counter","text":"All operations an Asynchronous Counter provides MUST be safe to be run concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-counter","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Counter Creation","text":"The No-Op Meter MUST allow for the creation of an Asynchronous Counter instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-counter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Counter Creation","text":"Since all Asynchronous Counters hold the same empty state, a Meter MAY return the same Asynchronous Counter instance to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Counter Creation","text":"The Meter MUST accept these parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-counter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Counter Creation","text":"However, the Meter MUST NOT validate any argument it receives and it MUST NOT hold any reference to the passed callbacks.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-counter-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Counter Observations","text":"The No-Op Asynchronous Counter MUST NOT validate or retain any state about observations made for the instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-counter-observations","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Gauge","text":"Asynchronous Gauges MUST NOT return a non-empty error or log any message for any operations they perform.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-gauge","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Gauge","text":"All operations an Asynchronous Gauge provides MUST be safe to be run concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-gauge","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Gauge Creation","text":"The No-Op Meter MUST allow for the creation of an Asynchronous Gauge instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-gauge-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Gauge Creation","text":"Since all Asynchronous Gauges hold the same empty state, a Meter MAY return the same Asynchronous UpDownCounter instance to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-gauge-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous Gauge Creation","text":"The Meter MUST accept these parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-gauge-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous Gauge Creation","text":"However, the Meter MUST NOT validate any argument it receives and it MUST NOT hold any reference to the passed callbacks.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-gauge-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous Gauge Observations","text":"The No-Op Asynchronous Gauge MUST NOT validate or retain any state about observations made for the instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-gauge-observations","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter","text":"Asynchronous UpDownCounters MUST NOT return a non-empty error or log any message for any operations they perform.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-updowncounter","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter","text":"All operations an Asynchronous UpDownCounter provides MUST be safe to be run concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-updowncounter","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter Creation","text":"The No-Op Meter MUST allow for the creation of an Asynchronous UpDownCounter instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-updowncounter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter Creation","text":"Since all Asynchronous UpDownCounters hold the same empty state, a Meter MAY return the same Asynchronous UpDownCounter instance to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-updowncounter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter Creation","text":"The Meter MUST accept these parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-updowncounter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter Creation","text":"However, the Meter MUST NOT validate any argument it receives and it MUST NOT hold any reference to the passed callbacks.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-updowncounter-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Asynchronous UpDownCounter Observations","text":"The No-Op Asynchronous UpDownCounter MUST NOT validate or retain any state about observations made for the instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#asynchronous-updowncounter-observations","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Counter","text":"Counters MUST NOT return a non-empty error or log any message for any operations they perform.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#counter","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Counter","text":"All operations a Counter provides MUST be safe to be run concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#counter","meta":"MUST · Stable"},{"type":"requirement","id":"Counter Add","text":"The No-Op Counter MUST provide the user an interface to Add that implements the API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#counter-add","meta":"MUST · Stable"},{"type":"requirement","id":"Counter Add","text":"It MUST NOT validate or retain any state about the arguments it receives.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#counter-add","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Counter Creation","text":"The No-Op Meter MUST allow for the creation of a Counter instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#counter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Counter Creation","text":"Since all Counters hold the same empty state, a Meter MAY return the same Counter instance to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#counter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Counter Creation","text":"The Meter MUST accept these parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#counter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Counter Creation","text":"However, the Meter MUST NOT validate any argument it receives.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#counter-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Histogram","text":"Histograms MUST NOT return a non-empty error or log any message for any operations they perform.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#histogram","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Histogram","text":"All operations a Histogram provides MUST be safe to be run concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#histogram","meta":"MUST · Stable"},{"type":"requirement","id":"Histogram Creation","text":"The No-Op Meter MUST allow for the creation of a Histogram instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#histogram-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Histogram Creation","text":"Since all Histograms hold the same empty state, a Meter MAY return the same Histogram instance to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#histogram-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Histogram Creation","text":"The Meter MUST accept these parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#histogram-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Histogram Creation","text":"However, the Meter MUST NOT validate any argument it receives.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#histogram-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Histogram Record","text":"The No-Op Histogram MUST provide the user an interface to Record that implements the API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#histogram-record","meta":"MUST · Stable"},{"type":"requirement","id":"Histogram Record","text":"It MUST NOT validate or retain any state about the arguments it receives.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#histogram-record","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Instruments","text":"Because of this, all instruments the No-Op provides MUST NOT hold any configuration or operational state including the aggregation of telemetry.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#instruments","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Meter","text":"Therefore, all Meters created MUST NOT hold configuration or operational state.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meter","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Meter","text":"The Meter MUST NOT return a non-empty error or log any message for any operations it performs.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meter","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Meter","text":"All operations a Meter provides MUST be safe to be run concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meter","meta":"MUST · Stable"},{"type":"requirement","id":"Meter Creation","text":"Therefore, MeterProviders MUST allow for the creation of Meters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Meter Creation","text":"All Meters created MUST be an instance of the No-Op Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Meter Creation","text":"Since all Meters will hold the same empty state, a MeterProvider MAY return the same Meter instances to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Meter Creation","text":"The MeterProvider MUST accept these parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Meter Creation","text":"However, the MeterProvider MUST NOT validate any argument it receives.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meter-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"MeterProvider","text":"The No-Op MUST allow the creation of multiple MeterProviders.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meterprovider","meta":"MUST · Stable"},{"type":"requirement","id":"MeterProvider","text":"Therefore, all MeterProviders created MUST NOT hold configuration or operational state.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meterprovider","meta":"MUST NOT · Stable"},{"type":"requirement","id":"MeterProvider","text":"Since all MeterProviders hold the same empty state, a No-Op MAY provide the same MeterProvider instances to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meterprovider","meta":"MAY · Stable"},{"type":"requirement","id":"MeterProvider","text":"For this reason, the MeterProvider MUST NOT return a non-empty error or log any message for any operations it performs.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meterprovider","meta":"MUST NOT · Stable"},{"type":"requirement","id":"MeterProvider","text":"All operations a MeterProvider provides MUST be safe to be run concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#meterprovider","meta":"MUST · Stable"},{"type":"requirement","id":"Metrics No-Op API Implementation","text":"All language implementations of OpenTelemetry MUST provide a No-Op.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#metrics-no-op-api-implementation","meta":"MUST · Stable"},{"type":"requirement","id":"UpDownCounter","text":"UpDownCounters MUST NOT return a non-empty error or log any message for any operations they perform.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#updowncounter","meta":"MUST NOT · Stable"},{"type":"requirement","id":"UpDownCounter","text":"All operations an UpDownCounter provides MUST be safe to be run concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#updowncounter","meta":"MUST · Stable"},{"type":"requirement","id":"UpDownCounter Add","text":"The No-Op UpDownCounter MUST provide the user an interface to Add that implements the API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#updowncounter-add","meta":"MUST · Stable"},{"type":"requirement","id":"UpDownCounter Add","text":"It MUST NOT validate or retain any state about the arguments it receives.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#updowncounter-add","meta":"MUST NOT · Stable"},{"type":"requirement","id":"UpDownCounter Creation","text":"The No-Op Meter MUST allow for the creation of a UpDownCounter instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#updowncounter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"UpDownCounter Creation","text":"Since all UpDownCounters hold the same empty state, a Meter MAY return the same UpDownCounter instance to all creation requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#updowncounter-creation","meta":"MAY · Stable"},{"type":"requirement","id":"UpDownCounter Creation","text":"The Meter MUST accept these parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#updowncounter-creation","meta":"MUST · Stable"},{"type":"requirement","id":"UpDownCounter Creation","text":"However, the Meter MUST NOT validate any argument it receives.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/noop.md#updowncounter-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Metrics Exporter - In-memory","text":"In-memory Metrics Exporter MUST provide configuration to set the MetricReader output temporality as a function of instrument kind.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/in-memory.md#metrics-exporter---in-memory","meta":"MUST · Stable"},{"type":"requirement","id":"Metrics Exporter - In-memory","text":"This option MAY be named temporality, and MUST set temporality to Cumulative for all instrument kinds by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/in-memory.md#metrics-exporter---in-memory","meta":"MUST · Stable"},{"type":"requirement","id":"Metrics Exporter - In-memory","text":"In-memory Metrics Exporter MAY provide configuration to set the MetricReader default aggregation as a function of instrument kind.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/in-memory.md#metrics-exporter---in-memory","meta":"MAY · Stable"},{"type":"requirement","id":"Metrics Exporter - In-memory","text":"This option MAY be named default_aggregation, and MUST use the default aggregation by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/in-memory.md#metrics-exporter---in-memory","meta":"MUST · Stable"},{"type":"requirement","id":"Metrics Exporter - In-memory","text":"If a language provides a mechanism to automatically configure a MetricReader to pair with the associated exporter (e.g., using the OTELMETRICSEXPORTER environment variable), by default the exporter MUST be paired with a periodic exporting …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/in-memory.md#metrics-exporter---in-memory","meta":"MUST · Stable"},{"type":"requirement","id":"General","text":"OTLP Metrics Exporter MUST provide configuration to influence the MetricReader output temporality as a function of instrument kind.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/otlp.md#general","meta":"MUST · Stable"},{"type":"requirement","id":"General","text":"This option MAY be named temporality, and MUST set temporality preference to Cumulative for all instrument kinds by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/otlp.md#general","meta":"MUST · Stable"},{"type":"requirement","id":"General","text":"OTLP Metrics Exporter MUST provide configuration to influence the MetricReader default aggregation as a function of instrument kind.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/otlp.md#general","meta":"MUST · Stable"},{"type":"requirement","id":"General","text":"This option MAY be named default_aggregation, and MUST set the default aggregation for all instrument kinds by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/otlp.md#general","meta":"MUST · Stable"},{"type":"requirement","id":"General","text":"The exporter MUST provide configuration according to the OpenTelemetry Protocol Exporter specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/otlp.md#general","meta":"MUST · Stable"},{"type":"requirement","id":"General","text":"The exporter MUST be paired with a periodic exporting MetricReader.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/otlp.md#general","meta":"MUST · Stable"},{"type":"requirement","id":"General","text":"The exporter MUST configure the default aggregation temporality on the basis of instrument kind using the OTELEXPORTEROTLPMETRICSTEMPORALITY_PREFERENCE variable as described below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/otlp.md#general","meta":"MUST · Stable"},{"type":"requirement","id":"General","text":"The exporter MUST configure the default aggregation on the basis of instrument kind using the OTELEXPORTEROTLPMETRICSDEFAULTHISTOGRAMAGGREGATION variable as described below if it is implemented.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/otlp.md#general","meta":"MUST · Stable"},{"type":"requirement","id":"Client Libraries","text":"A Prometheus Exporter SHOULD use an official Prometheus client library when one exists for the implementation language and it is practical to do so (e.g., dependency concerns) for serving Prometheus metrics; it SHOULD NOT use an unofficial…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#client-libraries","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Client Libraries","text":"If a Prometheus client library is used, the OpenTelemetry Prometheus Exporter SHOULD be modeled as a custom Collector so it can be used in conjunction with existing Prometheus instrumentation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#client-libraries","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Content Negotiation","text":"A Prometheus Exporter MUST support content negotiation to allow clients to request metrics in different formats based on the Accept header in HTTP requests.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#content-negotiation","meta":"MUST · Mixed"},{"type":"requirement","id":"Content Negotiation","text":"Content negotiation MUST follow Prometheus Content Negotiation guidelines.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#content-negotiation","meta":"MUST · Mixed"},{"type":"requirement","id":"Default Aggregation","text":"A Prometheus Exporter SHOULD support a configuration option to set the MetricReader default aggregation as a function of instrument kind.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#default-aggregation","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Default Aggregation","text":"This option MAY be named default_aggregation, and MUST use the default aggregation by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#default-aggregation","meta":"MUST · Mixed"},{"type":"requirement","id":"Host","text":"A Prometheus Exporter SHOULD support a configuration option to set the host that metrics are served on.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#host","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Host","text":"The option MAY be named host, and MUST be localhost by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#host","meta":"MUST · Mixed"},{"type":"requirement","id":"Interaction with Translation Strategy","text":"Regardless of the configured translation_strategy, the final output format and character escaping MUST comply with the content negotiation's restrictions based on the Accept header.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#interaction-with-translation-strategy","meta":"MUST · Mixed"},{"type":"requirement","id":"Interaction with Translation Strategy","text":"First, translation_strategy MUST be applied to construct metric names.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#interaction-with-translation-strategy","meta":"MUST · Mixed"},{"type":"requirement","id":"Interaction with Translation Strategy","text":"Then, the Prometheus Exporter MUST apply content negotiation, which may include a second translation of metric names using the requested escaping scheme.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#interaction-with-translation-strategy","meta":"MUST · Mixed"},{"type":"requirement","id":"Metric Conversion","text":"OpenTelemetry metrics MUST be converted to Prometheus metrics according to the Prometheus Compatibility specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#metric-conversion","meta":"MUST · Mixed"},{"type":"requirement","id":"Port","text":"A Prometheus Exporter SHOULD support a configuration option to set the port that metrics are served on.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#port","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Port","text":"The option MAY be named port, and MUST be 9464 by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#port","meta":"MUST · Mixed"},{"type":"requirement","id":"Pull Metric Exporter","text":"A Prometheus Exporter MUST be a Pull Metric Exporter which responds to HTTP requests with Prometheus metrics in the appropriate format.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#pull-metric-exporter","meta":"MUST · Mixed"},{"type":"requirement","id":"Resource Attributes as Metric Labels","text":"A Prometheus Exporter MAY offer configuration to add resource attributes as metric labels.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#resource-attributes-as-metric-labels","meta":"MAY · Mixed"},{"type":"requirement","id":"Resource Attributes as Metric Labels","text":"By default, it MUST NOT add any resource attributes as metric labels.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#resource-attributes-as-metric-labels","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Resource Attributes as Metric Labels","text":"The configuration SHOULD allow the user to select resource attributes to include or exclude.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#resource-attributes-as-metric-labels","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Resource Attributes as Metric Labels","text":"Copied Resource attributes MUST NOT be excluded from the targetinfo metric.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#resource-attributes-as-metric-labels","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Resource Attributes as Metric Labels","text":"The option SHOULD be named resourceconstant_labels.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#resource-attributes-as-metric-labels","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Scope Info","text":"A Prometheus Exporter MAY support configuration to specify whether metrics include scope labels.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#scope-info","meta":"MAY · Mixed"},{"type":"requirement","id":"Scope Info","text":"The option MAY be named scopeinfoenabled, and MUST be true by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#scope-info","meta":"MUST · Mixed"},{"type":"requirement","id":"Target","text":"There MUST be at most one target info metric exposed by an SDK Prometheus exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#target","meta":"MUST · Mixed"},{"type":"requirement","id":"Target Info","text":"A Prometheus Exporter MAY support a configuration to specify whether to produce a target info metric.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#target-info","meta":"MAY · Mixed"},{"type":"requirement","id":"Target Info","text":"The option MAY be named targetinfoenabled, and MUST be true by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#target-info","meta":"MUST · Mixed"},{"type":"requirement","id":"Temporality","text":"A Prometheus Exporter MUST set the MetricReader temporality as a function of instrument kind to be cumulative for all instrument kinds.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#temporality","meta":"MUST · Mixed"},{"type":"requirement","id":"Translation Strategy","text":"A Prometheus Exporter MAY support a configuration option that controls the translation of metric names from OpenTelemetry Naming Conventions to Prometheus Naming conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#translation-strategy","meta":"MAY · Mixed"},{"type":"requirement","id":"Translation Strategy","text":"If the Prometheus exporter supports such configuration it MUST be named to something that resembles Prometheus configuration option translation_strategy, and the translation options MUST be:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#translation-strategy","meta":"MUST · Mixed"},{"type":"requirement","id":"Version and Format","text":"Regardless of whether a Prometheus client library is used, the Prometheus Exporter MUST support version 0.0.4 of the Text-based format.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#version-and-format","meta":"MUST · Mixed"},{"type":"requirement","id":"Version and Format","text":"A Prometheus Exporter MAY support Exemplars and Exponential Histograms, which are not currently supported by the Prometheus text format, by supporting other Protocols, but is not required to implement them.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#version-and-format","meta":"MAY · Mixed"},{"type":"requirement","id":"Version and Format","text":"A Prometheus Exporter for an OpenTelemetry metrics SDK MUST NOT use Prometheus Remote Write format or OpenMetrics protobuf format.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#version-and-format","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Version and Format","text":"A Prometheus Exporter for an OpenTelemetry metrics SDK SHOULD NOT add explicit timestamps on Metric points.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/prometheus.md#version-and-format","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Metrics Exporter - Standard output","text":"Documentation SHOULD warn users about this.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/stdout.md#metrics-exporter---standard-output","meta":"SHOULD · Stable"},{"type":"requirement","id":"Metrics Exporter - Standard output","text":"OpenTelemetry SDK authors MAY choose the best idiomatic name for their language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/stdout.md#metrics-exporter---standard-output","meta":"MAY · Stable"},{"type":"requirement","id":"Metrics Exporter - Standard output","text":"\"Standard output\" Metrics Exporter MUST provide configuration to set the MetricReader output temporality as a function of instrument kind.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/stdout.md#metrics-exporter---standard-output","meta":"MUST · Stable"},{"type":"requirement","id":"Metrics Exporter - Standard output","text":"This option MAY be named temporality, and MUST set temporality to Cumulative for all instrument kinds by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/stdout.md#metrics-exporter---standard-output","meta":"MUST · Stable"},{"type":"requirement","id":"Metrics Exporter - Standard output","text":"\"Standard output\" Metrics Exporter MAY provide configuration to set the MetricReader default aggregation as a function of instrument kind.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/stdout.md#metrics-exporter---standard-output","meta":"MAY · Stable"},{"type":"requirement","id":"Metrics Exporter - Standard output","text":"This option MAY be named default_aggregation, and MUST use the default aggregation by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/stdout.md#metrics-exporter---standard-output","meta":"MUST · Stable"},{"type":"requirement","id":"Metrics Exporter - Standard output","text":"If a language provides a mechanism to automatically configure a MetricReader to pair with the associated exporter (e.g., using the OTELMETRICSEXPORTER environment variable), by default the exporter MUST be paired with a periodic exporting …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk_exporters/stdout.md#metrics-exporter---standard-output","meta":"MUST · Stable"},{"type":"requirement","id":"Aggregation","text":"It is RECOMMENDED that implementors reserve the \"aggregator\" term for the future when the SDK allows custom aggregation implementations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#aggregation","meta":"RECOMMENDED · Mixed"},{"type":"requirement","id":"Aggregation","text":"Note: Implementors MAY choose the best idiomatic practice for their language to represent the semantic of an Aggregation and optional configuration parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#aggregation","meta":"MAY · Mixed"},{"type":"requirement","id":"Aggregation","text":"The SDK MUST provide the following Aggregation to support the Metric Points in the Metrics Data Model.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#aggregation","meta":"MUST · Mixed"},{"type":"requirement","id":"Aggregation","text":"The SDK SHOULD provide the following Aggregation:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#aggregation","meta":"SHOULD · Mixed"},{"type":"requirement","id":"AlignedHistogramBucketExemplarReservoir","text":"This Exemplar reservoir MUST take a configuration parameter that is the configuration of a Histogram.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#alignedhistogrambucketexemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"AlignedHistogramBucketExemplarReservoir","text":"This implementation MUST store at most one measurement that falls within a histogram bucket, and SHOULD use a uniformly-weighted sampling algorithm based on the number of measurements the bucket has seen so far to determine if the offered …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#alignedhistogrambucketexemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"AlignedHistogramBucketExemplarReservoir","text":"Alternatively, the implementation MAY instead keep the last seen measurement that falls within a histogram bucket.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#alignedhistogrambucketexemplarreservoir","meta":"MAY · Mixed"},{"type":"requirement","id":"AlignedHistogramBucketExemplarReservoir","text":"This Exemplar reservoir MAY take a configuration parameter for the bucket boundaries used by the reservoir.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#alignedhistogrambucketexemplarreservoir","meta":"MAY · Mixed"},{"type":"requirement","id":"AlignedHistogramBucketExemplarReservoir","text":"This configuration parameter SHOULD have the same format as specifying bucket boundaries to Explicit Bucket Histogram Aggregation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#alignedhistogrambucketexemplarreservoir","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Asynchronous instrument cardinality limits","text":"Aggregators of asynchronous instruments SHOULD prefer the first-observed attributes in the callback when limiting cardinality, regardless of temporality.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#asynchronous-instrument-cardinality-limits","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Cardinality limits","text":"SDKs SHOULD support being configured with a cardinality limit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#cardinality-limits","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Cardinality limits","text":"Cardinality limit enforcement SHOULD occur after attribute filtering, if any.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#cardinality-limits","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Collect","text":"Collect SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#collect","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Collect","text":"When the Collect operation fails or times out on some of the instruments, the SDK MAY return successfully collected results and a failed reasons list to the caller.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#collect","meta":"MAY · Mixed"},{"type":"requirement","id":"Collect","text":"Collect does not have any required parameters, however, OpenTelemetry SDK authors MAY choose to add parameters (e.g. callback, filter, timeout).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#collect","meta":"MAY · Mixed"},{"type":"requirement","id":"Collect","text":"OpenTelemetry SDK authors MAY choose the return value type, or do not return anything.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#collect","meta":"MAY · Mixed"},{"type":"requirement","id":"Collect","text":"Collect SHOULD invoke Produce on registered MetricProducers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#collect","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Collect","text":"If the batch of metric points from Produce includes Resource information, Collect MAY replace the Resource from the MetricProducer with the Resource provided when constructing the MeterProvider instead.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#collect","meta":"MAY · Mixed"},{"type":"requirement","id":"Collect","text":"Note: it is expected that the MetricReader.Collect implementations will be provided by the SDK, so it is RECOMMENDED to prevent the user from accidentally overriding it, if possible (e.g. final in C++ and Java, sealed in C#).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#collect","meta":"RECOMMENDED · Mixed"},{"type":"requirement","id":"Compatibility requirements","text":"All the metrics components SHOULD allow new methods to be added to existing components without introducing breaking changes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#compatibility-requirements","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Compatibility requirements","text":"All the metrics SDK methods SHOULD allow optional parameter(s) to be added to existing methods without introducing breaking changes, if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#compatibility-requirements","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Concurrency requirements","text":"MeterProvider - Meter creation, ForceFlush and Shutdown MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#concurrency-requirements","meta":"MUST · Mixed"},{"type":"requirement","id":"Concurrency requirements","text":"ExemplarReservoir - all methods MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#concurrency-requirements","meta":"MUST · Mixed"},{"type":"requirement","id":"Concurrency requirements","text":"MetricReader - Collect, ForceFlush (for periodic exporting MetricReader) and Shutdown MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#concurrency-requirements","meta":"MUST · Mixed"},{"type":"requirement","id":"Concurrency requirements","text":"MetricExporter - ForceFlush and Shutdown MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#concurrency-requirements","meta":"MUST · Mixed"},{"type":"requirement","id":"Configuration","text":"Configuration ( i.e. MetricExporters, MetricReaders, Views, and (Development) MeterConfigurator) MUST be owned by the MeterProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Configuration","text":"The configuration MAY be applied at the time of MeterProvider creation if appropriate.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#configuration","meta":"MAY · Mixed"},{"type":"requirement","id":"Configuration","text":"The MeterProvider MAY provide methods to update the configuration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#configuration","meta":"MAY · Mixed"},{"type":"requirement","id":"Configuration","text":"If configuration is updated (e.g., adding a MetricReader), the updated configuration MUST also apply to all already returned Meters (i.e. it MUST NOT matter whether a Meter was obtained from the MeterProvider before or after the configurat…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#configuration","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Configuration","text":"A view with criteria matching the instrument an aggregation is created for has an aggregationcardinalitylimit value defined for the stream, that value SHOULD be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#configuration-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Configuration","text":"If there is no matching view, but the MetricReader defines a default cardinality limit value based on the instrument an aggregation is created for, that value SHOULD be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#configuration-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Configuration","text":"If none of the previous values are defined, the default value of 2000 SHOULD be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#configuration-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Custom ExemplarReservoir","text":"The SDK MUST provide a mechanism for SDK users to provide their own ExemplarReservoir implementation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#custom-exemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"Custom ExemplarReservoir","text":"This extension MUST be configurable on a metric View, although individual reservoirs MUST still be instantiated per metric-timeseries (see Exemplar Reservoir - Paragraph 2).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#custom-exemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"Defaults and configuration","text":"The SDK MUST provide configuration according to the SDK environment variables specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#defaults-and-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Duplicate instrument registration","text":"This means that the Meter MUST return a functional instrument that can be expected to export data even if this will cause semantic error in the data model.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#duplicate-instrument-registration","meta":"MUST · Mixed"},{"type":"requirement","id":"Duplicate instrument registration","text":"Therefore, when a duplicate instrument registration occurs, and it is not corrected with a View, a warning SHOULD be emitted.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#duplicate-instrument-registration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Duplicate instrument registration","text":"The emitted warning SHOULD include information for the user on how to resolve the conflict, if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#duplicate-instrument-registration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Duplicate instrument registration","text":"If the potential conflict involves multiple description properties, setting the description through a configured View SHOULD avoid the warning.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#duplicate-instrument-registration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Duplicate instrument registration","text":"If the potential conflict involves instruments that can be distinguished by a supported View selector (e.g. name, instrument kind) a renaming View recipe SHOULD be included in the warning.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#duplicate-instrument-registration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Duplicate instrument registration","text":"Otherwise (e.g., use of multiple units), the SDK SHOULD pass through the data by reporting both Metric objects and emit a generic warning describing the duplicate instrument registration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#duplicate-instrument-registration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Duplicate instrument registration","text":"To accommodate the recommendations from the data model, the SDK MUST aggregate data from identical Instruments together in its export pipeline.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#duplicate-instrument-registration","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplar","text":"A Metric SDK MUST provide a mechanism to sample Exemplars from measurements via the ExemplarFilter and ExemplarReservoir hooks.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplar","text":"Exemplar sampling SHOULD be turned on by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Exemplar","text":"If Exemplar sampling is off, the SDK MUST NOT have overhead related to exemplar sampling.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Exemplar","text":"A Metric SDK MUST allow exemplar sampling to leverage the configuration of metric aggregation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplar","text":"A Metric SDK SHOULD provide configuration for Exemplar sampling, specifically:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Exemplar defaults","text":"The SDK MUST include two types of built-in exemplar reservoirs:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar-defaults","meta":"MUST · Mixed"},{"type":"requirement","id":"Exemplar defaults","text":"Explicit bucket histogram aggregation with more than 1 bucket SHOULD use AlignedHistogramBucketExemplarReservoir.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar-defaults","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Exemplar defaults","text":"Base2 Exponential Histogram Aggregation SHOULD use a SimpleFixedSizeExemplarReservoir with a reservoir equal to the smaller of the maximum number of buckets configured on the aggregation or twenty (e.g. min(20, max_buckets)).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar-defaults","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Exemplar defaults","text":"All other aggregations SHOULD use SimpleFixedSizeExemplarReservoir.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar-defaults","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Exemplar defaults","text":"Exemplar default reservoirs MAY change in a minor version bump.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplar-defaults","meta":"MAY · Mixed"},{"type":"requirement","id":"ExemplarFilter","text":"The ExemplarFilter configuration MUST allow users to select between one of the built-in ExemplarFilters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarfilter","meta":"MUST · Mixed"},{"type":"requirement","id":"ExemplarFilter","text":"The ExemplarFilter SHOULD be a configuration parameter of a MeterProvider for an SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarfilter","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ExemplarFilter","text":"The default value SHOULD be TraceBased.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarfilter","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ExemplarFilter","text":"The filter configuration SHOULD follow the environment variable specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarfilter","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ExemplarFilter","text":"An OpenTelemetry SDK MUST support the following filters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarfilter","meta":"MUST · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"The ExemplarReservoir interface MUST provide a method to offer measurements to the reservoir and another to collect accumulated Exemplars.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"A new ExemplarReservoir MUST be created for every known timeseries data point, as determined by aggregation and view configuration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"The \"offer\" method SHOULD accept measurements, including:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"The \"offer\" method SHOULD have the ability to pull associated trace and span information without needing to record full context.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"The \"offer\" method does not need to store all measurements it is given and MAY further sample beyond the ExemplarFilter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"MAY · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"The \"offer\" method MAY accept a filtered subset of Attributes which diverge from the timeseries the reservoir is associated with.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"MAY · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"This MUST be clearly documented in the API and the reservoir MUST be given the Attributes associated with its timeseries point either at construction so that additional sampling performed by the reservoir has access to all attributes from …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"The \"collect\" method MUST return accumulated Exemplars.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"In other words, Exemplars reported against a metric data point SHOULD have occurred within the start/stop timestamps of that point.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"Exemplars MUST retain any attributes available in the measurement that are not preserved by aggregation or view configuration for the associated timeseries.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"ExemplarReservoir","text":"The ExemplarReservoir SHOULD avoid allocations when sampling exemplars.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exemplarreservoir","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Explicit Bucket Histogram Aggregation","text":"SDKs SHOULD use the default value when boundaries are not explicitly provided, unless they have good reasons to use something different (e.g. for backward compatibility reasons in a stable SDK release). | | RecordMinMax | true, false | tru…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#explicit-bucket-histogram-aggregation","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Export(batch)","text":"The SDK MUST provide a way for the exporter to get the Meter information (e.g. name, version, etc.) associated with each Metric Point.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exportbatch","meta":"MUST · Mixed"},{"type":"requirement","id":"Export(batch)","text":"Export MUST NOT block indefinitely, there MUST be a reasonable upper limit after which the call must time out with an error result (Failure).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exportbatch","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Export(batch)","text":"The default SDK SHOULD NOT implement retry logic, as the required logic is likely to depend heavily on the specific protocol and backend the metrics are being sent to.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#exportbatch","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush MUST invoke ForceFlush on all registered MetricReader instances that implement ForceFlush.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush","meta":"MUST · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD return some ERROR status if there is an error condition; and if there is no error condition, it should return some NO ERROR status, language implementations MAY decide how to model ERROR and NO ERROR.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush MAY be implemented as a blocking API or an asynchronous API which notifies the caller via a callback or an event.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush","meta":"MAY · Mixed"},{"type":"requirement","id":"ForceFlush","text":"OpenTelemetry SDK authors MAY decide if they want to make the flush timeout configurable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush","meta":"MAY · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD collect metrics, split into batches if necessary, call Export(batch) on each batch and ForceFlush() on the configured Push Metric Exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush MAY skip Export(batch) calls if the timeout is already expired, but SHOULD still call ForceFlush() on the configured Push Metric Exporter even if the timeout has passed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD return some ERROR status if there is an error condition; and if there is no error condition, it should return some NO ERROR status, language implementations MAY decide how to model ERROR and NO ERROR.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush MAY be implemented as a blocking API or an asynchronous API which notifies the caller via a callback or an event.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-1","meta":"MAY · Mixed"},{"type":"requirement","id":"ForceFlush","text":"This is a hint to ensure that the export of any Metrics the exporter has received prior to the call to ForceFlush SHOULD be completed as soon as possible, preferably before returning from this method.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-2","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-2","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD only be called in cases where it is absolutely necessary, such as when using some FaaS providers that may suspend the process after an invocation, but before the exporter exports the completed metrics.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-2","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-2","meta":"SHOULD · Mixed"},{"type":"requirement","id":"ForceFlush","text":"OpenTelemetry SDK authors MAY decide if they want to make the flush timeout configurable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#forceflush-2","meta":"MAY · Mixed"},{"type":"requirement","id":"Handle all normal values","text":"Implementations are REQUIRED to accept the entire normal range of IEEE floating point values (i.e., all values except for +Inf, -Inf and NaN values).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#handle-all-normal-values","meta":"REQUIRED · Mixed"},{"type":"requirement","id":"Handle all normal values","text":"Implementations SHOULD NOT incorporate non-normal values (i.e., +Inf, -Inf, and NaNs) into the sum, min, and max fields, because these values do not map into a valid bucket.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#handle-all-normal-values","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Handle all normal values","text":"Implementations MAY round subnormal values away from zero to the nearest normal value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#handle-all-normal-values","meta":"MAY · Mixed"},{"type":"requirement","id":"Histogram Aggregations","text":"This SHOULD NOT be collected when used with instruments that record negative measurements (e.g. UpDownCounter or ObservableGauge).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#histogram-aggregations","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Instrument advisory parameter: `ExplicitBucketBoundaries`","text":"If no View matches, or if a matching View selects the default aggregation, the ExplicitBucketBoundaries advisory parameter MUST be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-advisory-parameter-explicitbucketboundaries","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument advisory parameters","text":"When a Meter creates an instrument, it SHOULD validate the instrument advisory parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-advisory-parameters","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Instrument advisory parameters","text":"If an advisory parameter is not valid, the Meter SHOULD emit an error notifying the user and proceed as if the parameter was not provided.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-advisory-parameters","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Instrument advisory parameters","text":"If multiple identical Instruments are created with different advisory parameters, the Meter MUST return an instrument using the first-seen advisory parameters and log an appropriate error as described in duplicate instrument registrations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-advisory-parameters","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument advisory parameters","text":"If both a View and advisory parameters specify the same aspect of the Stream configuration, the setting defined by the View MUST take precedence over the advisory parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-advisory-parameters","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument bind","text":"A bound instrument MUST behave identically to calling the equivalent unbound recording operation with the pre-bound Attributes on each measurement.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-bind","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument bind","text":"Attribute processing and cardinality limit evaluation MUST be performed at bind time.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-bind","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument bind","text":"Each call to Bind MUST be independently evaluated against the cardinality state at that moment.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-bind","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument bind","text":"The resolved aggregator MUST be fixed and not change across collection cycles.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-bind","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument bind","text":"Measurements recorded on a bound instrument MUST be candidates for Exemplar sampling.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-bind","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument bind","text":"The Context associated with each recording, whether implicit or explicit, MUST be used for exemplar TraceBased filtering and passed to the ExemplarReservoir offer method.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-bind","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument bind","text":"The SDK MUST ensure attribute-free recordings on a bound instrument bypass per-recording map lookup.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-bind","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument description","text":"When a Meter creates an instrument, it SHOULD NOT validate the instrument description.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-description","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Instrument description","text":"If a description is not provided or the description is null, the Meter MUST treat it the same as an empty description string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-description","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument enabled","text":"The synchronous instrument Enabled MUST return false when either:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-enabled","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument enabled","text":"Otherwise, it SHOULD return true.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-enabled","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Instrument enabled","text":"It MAY return false to support additional optimizations and features.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-enabled","meta":"MAY · Mixed"},{"type":"requirement","id":"Instrument name","text":"When a Meter creates an instrument, it SHOULD validate the instrument name conforms to the instrument name syntax","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-name","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Instrument name","text":"If the instrument name does not conform to this syntax, the Meter SHOULD emit an error notifying the user about the invalid name.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-name","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"Criteria SHOULD be treated as additive.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"The SDK MUST accept the following criteria:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"Additionally, the SDK MAY support wildcard pattern matching for the name criterion using the following characters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MAY · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"If the SDK does not support wildcards in general, it MUST still recognize the special single asterisk (*) character as matching all Instruments.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MUST · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"Therefore, the instrument selection criteria parameter needs to be structured to accept a name, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"Therefore, the instrument selection criteria parameter needs to be structured to accept a type, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"Therefore, the instrument selection criteria parameter needs to be structured to accept a unit, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"Therefore, the instrument selection criteria parameter needs to be structured to accept a metername, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"Therefore, the instrument selection criteria parameter needs to be structured to accept a meterversion, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"Therefore, the instrument selection criteria parameter needs to be structured to accept a meterschemaurl, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"The SDK MAY accept additional criteria.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MAY · Mixed"},{"type":"requirement","id":"Instrument selection criteria","text":"Therefore, the instrument selection criteria can be structured to accept the criteria, but MUST NOT obligate a user to provide them.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-selection-criteria","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Instrument unit","text":"When a Meter creates an instrument, it SHOULD NOT validate the instrument unit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-unit","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Instrument unit","text":"If a unit is not provided or the unit is null, the Meter MUST treat it the same as an empty unit string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#instrument-unit","meta":"MUST · Mixed"},{"type":"requirement","id":"Interface Definition","text":"A Push Metric Exporter MUST support the following functions:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#interface-definition","meta":"MUST · Mixed"},{"type":"requirement","id":"Interface Definition","text":"A MetricProducer MUST support the following functions:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#interface-definition-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Interface Definition","text":"A MetricFilter MUST support the following functions:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#interface-definition-2","meta":"MUST · Mixed"},{"type":"requirement","id":"Maintain the ideal scale","text":"Implementations SHOULD adjust the histogram scale as necessary to maintain the best resolution possible, within the constraint of maximum size (max number of buckets).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#maintain-the-ideal-scale","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Measurement processing","text":"The SDK SHOULD use the following logic to determine how to process Measurements made with an Instrument:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#measurement-processing","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Measurement processing","text":"Instrument advisory parameters, if any, MUST be honored.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#measurement-processing","meta":"MUST · Mixed"},{"type":"requirement","id":"Measurement processing","text":"If applying the View results in conflicting metric identities the implementation SHOULD apply the View and emit a warning.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#measurement-processing","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Measurement processing","text":"If it is not possible to apply the View without producing semantic errors (e.g. the View sets an asynchronous instrument to use the Explicit bucket histogram aggregation) the implementation SHOULD emit a warning and proceed as if the View …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#measurement-processing","meta":"MUST · Mixed"},{"type":"requirement","id":"Measurement processing","text":"If the Instrument could not match with any of the registered View(s), the SDK SHOULD enable the instrument using the default aggregation and temporality.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#measurement-processing","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Meter","text":"Distinct meters MUST be treated as separate namespaces for the purposes of detecting duplicate instrument registrations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meter","meta":"MUST · Mixed"},{"type":"requirement","id":"Meter","text":"Status: Development - Meter MUST behave according to the MeterConfig computed during Meter creation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meter","meta":"MUST · Mixed"},{"type":"requirement","id":"Meter","text":"If the MeterProvider supports updating the MeterConfigurator, then upon update the Meter MUST be updated to behave according to the new MeterConfig.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meter","meta":"MUST · Mixed"},{"type":"requirement","id":"Meter Creation","text":"It SHOULD only be possible to create Meter instances through a MeterProvider (see API).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meter-creation","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Meter Creation","text":"The MeterProvider MUST implement the Get a Meter API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meter-creation","meta":"MUST · Mixed"},{"type":"requirement","id":"Meter Creation","text":"The input provided by the user MUST be used to create an InstrumentationScope instance which is stored on the created Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meter-creation","meta":"MUST · Mixed"},{"type":"requirement","id":"Meter Creation","text":"In the case where an invalid name (null or empty string) is specified, a working Meter MUST be returned as a fallback rather than returning null or throwing an exception, its name SHOULD keep the original invalid value, and a message repor…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meter-creation","meta":"MUST · Mixed"},{"type":"requirement","id":"Meter Creation","text":"Status: Development - The MeterProvider MUST compute the relevant MeterConfig using the configured MeterConfigurator, and create a Meter whose behavior conforms to that MeterConfig.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meter-creation","meta":"MUST · Mixed"},{"type":"requirement","id":"MeterConfig","text":"If not explicitly set, the enabled parameter SHOULD default to true ( i.e. Meters are enabled by default).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterconfig","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MeterConfig","text":"If a Meter is disabled, it MUST behave equivalently to No-op Meter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterconfig","meta":"MUST · Mixed"},{"type":"requirement","id":"MeterConfig","text":"The value of enabled MUST be used to resolve whether an instrument is Enabled.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterconfig","meta":"MUST · Mixed"},{"type":"requirement","id":"MeterConfig","text":"However, the changes MUST be eventually visible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterconfig","meta":"MUST · Mixed"},{"type":"requirement","id":"MeterConfigurator","text":"The function MUST accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterconfigurator","meta":"MUST · Mixed"},{"type":"requirement","id":"MeterConfigurator","text":"The function MUST return the relevant MeterConfig, or some signal indicating that the default MeterConfig should be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterconfigurator","meta":"MUST · Mixed"},{"type":"requirement","id":"MeterConfigurator","text":"This signal MAY be nil, null, empty, or an instance of the default MeterConfig depending on what is idiomatic in the language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterconfigurator","meta":"MAY · Mixed"},{"type":"requirement","id":"MeterConfigurator","text":"However, implementations MAY provide shorthand or helper functions to accommodate common use cases:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterconfigurator","meta":"MAY · Mixed"},{"type":"requirement","id":"MeterProvider","text":"A MeterProvider MUST provide a way to allow a Resource to be specified.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterprovider","meta":"MUST · Mixed"},{"type":"requirement","id":"MeterProvider","text":"If a Resource is specified, it SHOULD be associated with all the metrics produced by any Meter from the MeterProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterprovider","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MeterProvider Creation","text":"The SDK SHOULD allow the creation of multiple independent MeterProviders.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#meterprovider-creation","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricExporter","text":"MetricExporter defines the interface that protocol-specific exporters MUST implement so that they can be plugged into OpenTelemetry SDK and support sending of telemetry data.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricexporter","meta":"MUST · Mixed"},{"type":"requirement","id":"MetricExporter","text":"OpenTelemetry language implementations MAY support automatically configuring the MetricReader to use for an Exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricexporter","meta":"MAY · Mixed"},{"type":"requirement","id":"MetricExporter","text":"Metric Exporters SHOULD report an error condition for data output by the MetricReader with unsupported Aggregation or Aggregation Temporality, as this condition can be corrected by a change of MetricReader configuration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricexporter","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricProducer","text":"MetricProducer defines the interface which bridges to third-party metric sources MUST implement, so they can be plugged into an OpenTelemetry MetricReader as a source of aggregated metric data.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricproducer","meta":"MUST · Mixed"},{"type":"requirement","id":"MetricProducer","text":"The SDK's in-memory state MAY implement the MetricProducer interface for convenience.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricproducer","meta":"MAY · Mixed"},{"type":"requirement","id":"MetricProducer","text":"MetricProducer implementations SHOULD accept configuration for the AggregationTemporality of produced metrics.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricproducer","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricProducer","text":"SDK authors MAY provide utility libraries to facilitate conversion between delta and cumulative temporalities.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricproducer","meta":"MAY · Mixed"},{"type":"requirement","id":"MetricReader","text":"To construct a MetricReader when setting up an SDK, at least the following SHOULD be provided:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricReader","text":"This function SHOULD be obtained from the exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricReader","text":"If not configured, the default aggregation SHOULD be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricReader","text":"If not configured, the Cumulative temporality SHOULD be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricReader","text":"If not configured, a default value of 2000 SHOULD be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricReader","text":"Status: Development - A MetricReader SHOULD provide the MetricFilter to the SDK or registered MetricProducer(s) when calling the Produce operation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricReader","text":"A common implementation of MetricReader, the periodic exporting MetricReader SHOULD be provided to be used typically with push-based metrics collection.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricReader","text":"The MetricReader MUST ensure that data points from OpenTelemetry instruments are output in the configured aggregation temporality for each instrument kind.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"MetricReader","text":"For synchronous instruments with Cumulative aggregation temporality, MetricReader.Collect MUST receive data points exposed in previous collections regardless of whether new measurements have been recorded.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"MetricReader","text":"For synchronous instruments with Delta aggregation temporality, MetricReader.Collect MUST only receive data points with measurements recorded since the previous collection.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"MetricReader","text":"For asynchronous instruments with Delta or Cumulative aggregation temporality, MetricReader.Collect MUST only receive data points with measurements recorded since the previous collection.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"MetricReader","text":"For instruments with Cumulative aggregation temporality, successive data points received by successive calls to MetricReader.Collect MUST repeat the same starting timestamps (e.g. (T0, T1], (T0, T2], (T0, T3]).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"MetricReader","text":"For instruments with Delta aggregation temporality, successive data points received by successive calls to MetricReader.Collect MUST advance the starting timestamp ( e.g. (T0, T1], (T1, T2], (T2, T3]).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"MetricReader","text":"The ending timestamp (i.e. TimeUnixNano) MUST always be equal to time the metric data point took effect, which is equal to when MetricReader.Collect was invoked.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"MetricReader","text":"The SDK MUST support multiple MetricReader instances to be registered on the same MeterProvider, and the MetricReader.Collect invocation on one MetricReader instance SHOULD NOT introduce side-effects to other MetricReader instances.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"MetricReader","text":"The SDK MUST NOT allow a MetricReader instance to be registered on more than one MeterProvider instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"MetricReader","text":"The SDK SHOULD provide a way to allow MetricReader to respond to MeterProvider.ForceFlush and MeterProvider.Shutdown.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"SHOULD · Mixed"},{"type":"requirement","id":"MetricReader","text":"OpenTelemetry SDK authors MAY decide the language idiomatic approach, for example, as OnForceFlush and OnShutdown callback functions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metricreader","meta":"MAY · Mixed"},{"type":"requirement","id":"Metrics SDK","text":"All language implementations of OpenTelemetry MUST provide an SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#metrics-sdk","meta":"MUST · Mixed"},{"type":"requirement","id":"Name conflict","text":"When this happens, the Meter MUST return an instrument using the first-seen instrument name and log an appropriate error as described above.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#name-conflict","meta":"MUST · Mixed"},{"type":"requirement","id":"Numerical limits handling","text":"The SDK MUST handle numerical limits in a graceful way according to Error handling in OpenTelemetry.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#numerical-limits-handling","meta":"MUST · Mixed"},{"type":"requirement","id":"Numerical limits handling","text":"If the SDK receives float/double values from Instruments, it MUST handle all the possible values.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#numerical-limits-handling","meta":"MUST · Mixed"},{"type":"requirement","id":"Numerical limits handling","text":"The SDK authors MAY leverage/follow the language runtime behavior for better performance, rather than perform a check on each value coming from the API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#numerical-limits-handling","meta":"MAY · Mixed"},{"type":"requirement","id":"Numerical limits handling","text":"The SDK authors MAY rely on the language runtime behavior as long as errors/exceptions are taken care of.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#numerical-limits-handling","meta":"MAY · Mixed"},{"type":"requirement","id":"Observations inside asynchronous callbacks","text":"Callback functions MUST be invoked for the specific MetricReader performing collection, such that observations made or produced by executing callbacks only apply to the intended MetricReader during collection.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#observations-inside-asynchronous-callbacks","meta":"MUST · Mixed"},{"type":"requirement","id":"Observations inside asynchronous callbacks","text":"The implementation SHOULD disregard the use of asynchronous instrument APIs outside of registered callbacks.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#observations-inside-asynchronous-callbacks","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Observations inside asynchronous callbacks","text":"The implementation SHOULD use a timeout to prevent indefinite callback execution.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#observations-inside-asynchronous-callbacks","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Observations inside asynchronous callbacks","text":"The implementation MUST complete the execution of all callbacks for a given instrument before starting a subsequent round of collection.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#observations-inside-asynchronous-callbacks","meta":"MUST · Mixed"},{"type":"requirement","id":"Observations inside asynchronous callbacks","text":"The implementation SHOULD NOT produce aggregated metric data for a previously-observed attribute set which is not observed during a successful callback.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#observations-inside-asynchronous-callbacks","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Overflow attribute","text":"The SDK MUST create an Aggregator with the overflow attribute set prior to reaching the cardinality limit and use it to aggregate Measurements for which the correct Aggregator could not be created.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#overflow-attribute","meta":"MUST · Mixed"},{"type":"requirement","id":"Overflow attribute","text":"The SDK MUST provide the guarantee that overflow would not happen if the maximum number of distinct, non-overflow attribute sets is less than or equal to the limit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#overflow-attribute","meta":"MUST · Mixed"},{"type":"requirement","id":"Periodic exporting MetricReader","text":"Status: Development - When maxExportBatchSize is configured, the reader MUST ensure no batch provided to Export exceeds the maxExportBatchSize by splitting the batch of metric data points into smaller batches.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#periodic-exporting-metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"Periodic exporting MetricReader","text":"The initial batch of metric data MUST be split into as many \"full\" batches of size maxExportBatchSize as possible -- even if this splits up data points that belong to the same metric into different batches.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#periodic-exporting-metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"Periodic exporting MetricReader","text":"The reader MUST ensure all metric data points from a single Collect() are provided to Export before metric data points from a subsequent Collect() so that metric points are sent in-order.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#periodic-exporting-metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"Periodic exporting MetricReader","text":"The reader MUST NOT combine metrics from different Collect() calls into the same batch provided to Export.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#periodic-exporting-metricreader","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Periodic exporting MetricReader","text":"The reader MUST synchronize calls to MetricExporter's Export to make sure that they are not invoked concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#periodic-exporting-metricreader","meta":"MUST · Mixed"},{"type":"requirement","id":"Produce batch","text":"Produce MUST return a batch of Metric Points, filtered by the optional metricFilter parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#produce-batch","meta":"MUST · Mixed"},{"type":"requirement","id":"Produce batch","text":"Implementation SHOULD use the filter as early as possible to gain as much performance gain possible (memory allocation, internal metric fetching, etc).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#produce-batch","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Produce batch","text":"If the batch of Metric Points includes resource information, Produce SHOULD require a resource as a parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#produce-batch","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Produce batch","text":"Produce does not have any other required parameters, however, OpenTelemetry SDK authors MAY choose to add required or optional parameters (e.g. timeout).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#produce-batch","meta":"MAY · Mixed"},{"type":"requirement","id":"Produce batch","text":"Produce SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#produce-batch","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Produce batch","text":"When the Produce operation fails, the MetricProducer MAY return successfully collected results and a failed reasons list to the caller.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#produce-batch","meta":"MAY · Mixed"},{"type":"requirement","id":"Produce batch","text":"If a batch of Metric Points can include InstrumentationScope information, Produce SHOULD include a single InstrumentationScope which identifies the MetricProducer.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#produce-batch","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Pull Metric Exporter","text":"Implementors MAY choose the best idiomatic design for their language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#pull-metric-exporter","meta":"MAY · Mixed"},{"type":"requirement","id":"Pull Metric Exporter","text":"If the pull exporter is modeled as MetricReader, implementors MAY name the MetricExporter interface as PushMetricExporter to prevent naming confusion.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#pull-metric-exporter","meta":"MAY · Mixed"},{"type":"requirement","id":"Push Metric Exporter","text":"This MAY be accomplished by pairing the exporter with a periodic exporting MetricReader.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#push-metric-exporter","meta":"MAY · Mixed"},{"type":"requirement","id":"Self-observability","text":"The Metrics SDK SHOULD support SDK self-observability.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#self-observability","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown MUST be called only once for each MeterProvider instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown","meta":"MUST · Mixed"},{"type":"requirement","id":"Shutdown","text":"SDKs SHOULD return a valid no-op Meter for these calls, if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown MAY be implemented as a blocking API or an asynchronous API which notifies the caller via a callback or an event.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown","meta":"MAY · Mixed"},{"type":"requirement","id":"Shutdown","text":"OpenTelemetry SDK authors MAY decide if they want to make the shutdown timeout configurable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown","meta":"MAY · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown MUST be implemented at least by invoking Shutdown on all registered MetricReader and MetricExporter instances.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown","meta":"MUST · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown MUST be called only once for each MetricReader instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown-1","meta":"MUST · Mixed"},{"type":"requirement","id":"Shutdown","text":"SDKs SHOULD return some failure for these calls, if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown-1","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown MAY be implemented as a blocking API or an asynchronous API which notifies the caller via a callback or an event.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown-1","meta":"MAY · Mixed"},{"type":"requirement","id":"Shutdown","text":"OpenTelemetry SDK authors MAY decide if they want to make the shutdown timeout configurable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown-1","meta":"MAY · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD be called only once for each MetricExporter instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown-2","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD NOT block indefinitely (e.g. if it attempts to flush the data and the destination is unavailable).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown-2","meta":"SHOULD NOT · Mixed"},{"type":"requirement","id":"Shutdown","text":"OpenTelemetry SDK authors MAY decide if they want to make the shutdown timeout configurable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#shutdown-2","meta":"MAY · Mixed"},{"type":"requirement","id":"SimpleFixedSizeExemplarReservoir","text":"This reservoir MUST use a uniformly-weighted sampling algorithm based on the number of samples the reservoir has seen so far to determine if the offered measurements should be sampled.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#simplefixedsizeexemplarreservoir","meta":"MUST · Mixed"},{"type":"requirement","id":"SimpleFixedSizeExemplarReservoir","text":"Any stateful portion of sampling computation SHOULD be reset every collection cycle.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#simplefixedsizeexemplarreservoir","meta":"SHOULD · Mixed"},{"type":"requirement","id":"SimpleFixedSizeExemplarReservoir","text":"This Exemplar reservoir MAY take a configuration parameter for the size of the reservoir.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#simplefixedsizeexemplarreservoir","meta":"MAY · Mixed"},{"type":"requirement","id":"SimpleFixedSizeExemplarReservoir","text":"If no size configuration is provided, the default size MAY be the number of possible concurrent threads (e.g., number of CPUs) to help reduce contention.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#simplefixedsizeexemplarreservoir","meta":"MAY · Mixed"},{"type":"requirement","id":"SimpleFixedSizeExemplarReservoir","text":"Otherwise, a default size of 1 SHOULD be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#simplefixedsizeexemplarreservoir","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Start timestamps","text":"For delta aggregations, the start timestamp MUST equal the previous collection interval's timestamp, or the creation time of the instrument if this is the first collection interval for the instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#start-timestamps","meta":"MUST · Mixed"},{"type":"requirement","id":"Start timestamps","text":"This implies that all data points with delta temporality aggregation for an instrument MUST share the same start timestamp.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#start-timestamps","meta":"MUST · Mixed"},{"type":"requirement","id":"Start timestamps","text":"Cumulative timeseries MUST use a consistent start timestamp for all collection intervals.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#start-timestamps","meta":"MUST · Mixed"},{"type":"requirement","id":"Start timestamps","text":"For synchronous instruments, the start timestamp SHOULD be the time of the first measurement for the series.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#start-timestamps","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Start timestamps","text":"For asynchronous instrument, the start timestamp SHOULD be:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#start-timestamps","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Stream configuration","text":"The SDK MUST accept the following stream configuration parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Stream configuration","text":"name: The metric stream name that SHOULD be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Stream configuration","text":"In order to avoid conflicts, if a name is provided the View SHOULD have an instrument selector that selects at most one instrument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Stream configuration","text":"If the Instrument selection criteria for a View with a stream configuration name parameter can select more than one instrument (i.e. wildcards) the SDK MAY fail fast in accordance with initialization error handling principles.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MAY · Mixed"},{"type":"requirement","id":"Stream configuration","text":"Therefore, the stream configuration parameter needs to be structured to accept a name, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Stream configuration","text":"If the user does not provide a name value, name from the Instrument the View matches MUST be used by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Stream configuration","text":"The name provided via stream configuration is NOT REQUIRED to conform to the instrument name syntax, and the SDK MUST NOT validate it against that syntax.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Stream configuration","text":"description: The metric stream description that SHOULD be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Stream configuration","text":"Therefore, the stream configuration parameter needs to be structured to accept a description, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Stream configuration","text":"If the user does not provide a description value, the description from the Instrument a View matches MUST be used by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Stream configuration","text":"The allow-list contains attribute keys that identify the attributes that MUST be kept, and all other attributes MUST be ignored.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Stream configuration","text":"Implementations MAY accept additional attribute filtering functionality for this parameter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MAY · Mixed"},{"type":"requirement","id":"Stream configuration","text":"Therefore, the stream configuration parameter needs to be structured to accept attributekeys, but MUST NOT obligate a user to provide them.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Stream configuration","text":"If the user does not provide any value, the SDK SHOULD use the Attributes advisory parameter configured on the instrument instead.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Stream configuration","text":"If the Attributes advisory parameter is absent, all attributes MUST be kept.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Stream configuration","text":"Additionally, implementations SHOULD support configuring an exclude-list of attribute keys.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Stream configuration","text":"The exclude-list contains attribute keys that identify the attributes that MUST be excluded, all other attributes MUST be kept.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Stream configuration","text":"If an attribute key is both included and excluded, the SDK MAY fail fast in accordance with initialization error handling principles.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MAY · Mixed"},{"type":"requirement","id":"Stream configuration","text":"SDK documentation SHOULD inform users that attributes excluded from a metric stream by View configuration may still be exported on Exemplars as filtered attributes, and describe how to disable or otherwise configure Exemplar sampling.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"SHOULD · Mixed"},{"type":"requirement","id":"Stream configuration","text":"Therefore, the stream configuration parameter needs to be structured to accept an aggregation, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Stream configuration","text":"If the user does not provide an aggregation value, the MeterProvider MUST apply a default aggregation configurable on the basis of instrument type according to the MetricReader instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Stream configuration","text":"Therefore, the stream configuration parameter needs to be structured to accept an exemplarreservoir, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Stream configuration","text":"If the user does not provide an exemplar_reservoir value, the MeterProvider MUST apply a default exemplar reservoir.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Stream configuration","text":"Therefore, the stream configuration parameter needs to be structured to accept an aggregationcardinalitylimit, but MUST NOT obligate a user to provide one.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Stream configuration","text":"If the user does not provide an aggregationcardinalitylimit value, the MeterProvider MUST apply the default aggregation cardinality limit the MetricReader is configured with.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#stream-configuration","meta":"MUST · Mixed"},{"type":"requirement","id":"Support a minimum and maximum scale","text":"The implementation MUST maintain reasonable minimum and maximum scale parameters that the automatic scale parameter will not exceed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#support-a-minimum-and-maximum-scale","meta":"MUST · Mixed"},{"type":"requirement","id":"Synchronous instrument cardinality limits","text":"Aggregators for synchronous instruments with cumulative temporality MUST continue to export all attribute sets that were observed prior to the beginning of overflow.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#synchronous-instrument-cardinality-limits","meta":"MUST · Mixed"},{"type":"requirement","id":"Synchronous instrument cardinality limits","text":"Aggregators of synchronous instruments with delta aggregation temporality MAY choose an arbitrary subset of attribute sets to output to maintain the stated cardinality limit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#synchronous-instrument-cardinality-limits","meta":"MAY · Mixed"},{"type":"requirement","id":"Synchronous instrument cardinality limits","text":"Regardless of aggregation temporality, the SDK MUST ensure that every Measurement is reflected in exactly one Aggregator, which is either an Aggregator associated with the correct attribute set or an aggregator associated with the overflow…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#synchronous-instrument-cardinality-limits","meta":"MUST · Mixed"},{"type":"requirement","id":"Synchronous instrument cardinality limits","text":"Measurements MUST NOT be double-counted or dropped during an overflow.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#synchronous-instrument-cardinality-limits","meta":"MUST NOT · Mixed"},{"type":"requirement","id":"Use the maximum scale for single measurements","text":"When the histogram contains not more than one value in either of the positive or negative ranges, the implementation SHOULD use the maximum scale.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#use-the-maximum-scale-for-single-measurements","meta":"SHOULD · Mixed"},{"type":"requirement","id":"View","text":"The SDK MUST provide functionality for a user to create Views for a MeterProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#view","meta":"MUST · Mixed"},{"type":"requirement","id":"View","text":"This functionality MUST accept as inputs the Instrument selection criteria and the resulting stream configuration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#view","meta":"MUST · Mixed"},{"type":"requirement","id":"View","text":"The SDK MUST provide the means to register Views with a MeterProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/metrics/sdk.md#view","meta":"MUST · Mixed"},{"type":"requirement","id":"SDK","text":"Instrumentation authors MUST NOT directly reference any SDK package of any kind, only the API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/overview.md#sdk","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Semantic Conventions","text":"Both the collector and the client libraries SHOULD autogenerate semantic convention keys and enum values into constants (or language idiomatic equivalent).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/overview.md#semantic-conventions","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Semantic Conventions","text":"The YAML files MUST be used as the source of truth for generation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/overview.md#semantic-conventions","meta":"MUST · Unspecified"},{"type":"requirement","id":"Semantic Conventions","text":"Each language implementation SHOULD provide language-specific support to the code generator.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/overview.md#semantic-conventions","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"SpanContext","text":"Represents all the information that identifies Span in the Trace and MUST be propagated to child Spans and across process boundaries.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/overview.md#spancontext","meta":"MUST · Unspecified"},{"type":"requirement","id":"Attributes","text":"A message representing a Mapping MUST have at least one of the following process attributes:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/profiles/mappings.md#attributes","meta":"MUST · Alpha"},{"type":"requirement","id":"Attributes","text":"If possible all the above listed attributes SHOULD be present in a Mapping.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/profiles/mappings.md#attributes","meta":"SHOULD · Alpha"},{"type":"requirement","id":"Attributes","text":"To promote interoperability, it is RECOMMENDED for process.executable.buildid.htlhash to be present in every Mapping.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/profiles/mappings.md#attributes","meta":"RECOMMENDED · Alpha"},{"type":"requirement","id":"Data Format","text":"Span context references: Samples MAY include a Link (span ID and trace ID), enabling direct linking between a profile sample and the trace/span during which it was captured.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/profiles/README.md#data-format","meta":"MAY · Alpha"},{"type":"requirement","id":"Design goals","text":"Correlation with other signals: Profiles MUST be linkable to logs, metrics and traces through shared resource context and, where applicable, direct trace/span references.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/profiles/README.md#design-goals","meta":"MUST · Alpha"},{"type":"requirement","id":"Configuration Options","text":"The following configuration options MUST be available to configure the OTLP exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration Options","text":"Each configuration option MUST be overridable by a signal specific option.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration Options","text":"The implementation MUST honor the following URL components:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration Options","text":"The implementation MAY ignore all other URL components.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"MAY · Stable"},{"type":"requirement","id":"Configuration Options","text":"When using OTELEXPORTEROTLP_ENDPOINT, exporters MUST construct per-signal URLs as described below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration Options","text":"The option SHOULD accept any form allowed by the underlying gRPC client implementation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"SHOULD · Stable"},{"type":"requirement","id":"Configuration Options","text":"Additionally, the option MUST accept a URL with a scheme of either http or https.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration Options","text":"If the gRPC client implementation does not support an endpoint with a scheme of http or https then the endpoint SHOULD be transformed to the most sensible format for that implementation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"SHOULD · Stable"},{"type":"requirement","id":"Configuration Options","text":"Implementations MAY choose to not implement the insecure option if it is not required or supported by the underlying gRPC client implementation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"MAY · Stable"},{"type":"requirement","id":"Configuration Options","text":"Options MUST be one of: grpc, http/protobuf, http/json.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration Options","text":"[1]: SDKs SHOULD default endpoint variables to use http scheme unless they have good reasons to choose https scheme for the default (e.g., for backward compatibility reasons in a stable SDK release).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"SHOULD · Stable"},{"type":"requirement","id":"Configuration Options","text":"However, if they are already implemented, they SHOULD continue to be supported as they were part of a stable release of the specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"SHOULD · Stable"},{"type":"requirement","id":"Configuration Options","text":"[4]: The default protocol SHOULD be http/protobuf, unless there are strong reasons for SDKs to select grpc as the default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#configuration-options","meta":"SHOULD · Stable"},{"type":"requirement","id":"Endpoint URLs for OTLP/HTTP","text":"Based on the environment variables above, the OTLP/HTTP exporter MUST construct URLs for each signal as follow:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#endpoint-urls-for-otlphttp","meta":"MUST · Stable"},{"type":"requirement","id":"Endpoint URLs for OTLP/HTTP","text":"For the per-signal variables (OTELEXPORTEROTLP<signal>ENDPOINT), the URL MUST be used as-is without any modification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#endpoint-urls-for-otlphttp","meta":"MUST · Stable"},{"type":"requirement","id":"Endpoint URLs for OTLP/HTTP","text":"The only exception is that if an URL contains no path part, the root path / MUST be used (see Example 2).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#endpoint-urls-for-otlphttp","meta":"MUST · Stable"},{"type":"requirement","id":"Endpoint URLs for OTLP/HTTP","text":"An SDK MUST NOT modify the URL in ways other than specified above.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#endpoint-urls-for-otlphttp","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Retry","text":"Transient errors MUST be handled with a retry strategy.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#retry","meta":"MUST · Stable"},{"type":"requirement","id":"Retry","text":"This retry strategy MUST implement an exponential back-off with jitter to avoid overwhelming the destination until the network is restored or the destination has recovered.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#retry","meta":"MUST · Stable"},{"type":"requirement","id":"Specify Protocol","text":"SDKs SHOULD support both grpc and http/protobuf transports and MUST support at least one of them.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#specify-protocol","meta":"MUST · Stable"},{"type":"requirement","id":"Specify Protocol","text":"If they support only one, it SHOULD be http/protobuf.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#specify-protocol","meta":"SHOULD · Stable"},{"type":"requirement","id":"Specify Protocol","text":"They also MAY support http/json.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#specify-protocol","meta":"MAY · Stable"},{"type":"requirement","id":"Specify Protocol","text":"If no configuration is provided the default transport SHOULD be http/protobuf unless SDKs have good reasons to choose grpc as the default (e.g. for backward compatibility reasons when grpc was already the default in a stable SDK release).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#specify-protocol","meta":"SHOULD · Stable"},{"type":"requirement","id":"Specifying headers via environment variables","text":"All attribute values MUST be considered strings.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#specifying-headers-via-environment-variables","meta":"MUST · Stable"},{"type":"requirement","id":"User Agent","text":"OpenTelemetry protocol exporters SHOULD emit a User-Agent header to at a minimum identify the exporter, the language of its implementation, and the version of the exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#user-agent","meta":"SHOULD · Stable"},{"type":"requirement","id":"User Agent","text":"The format of the header SHOULD follow [RFC 7231][rfc-7231].","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#user-agent","meta":"SHOULD · Stable"},{"type":"requirement","id":"User Agent","text":"Exporters MAY expose a configuration option to add a product identifier to the User-Agent header.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#user-agent","meta":"MAY · Stable"},{"type":"requirement","id":"User Agent","text":"The resulting User-Agent SHOULD include the exporter's default User-Agent string.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/exporter.md#user-agent","meta":"SHOULD · Stable"},{"type":"requirement","id":"Exporter configuration","text":"The metric exporter MUST support the environment variables defined in the OTLP Exporter specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/file-exporter.md#exporter-configuration","meta":"MUST · Development"},{"type":"requirement","id":"Exporter configuration","text":"If a language provides a mechanism to automatically configure a span or logs processor to pair with the associated exporter (e.g., using the OTELTRACESEXPORTER environment variable), by default the OpenTelemetry Protocol File Exporter SHOU…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/file-exporter.md#exporter-configuration","meta":"SHOULD · Development"},{"type":"requirement","id":"Programmatic configuration","text":"| Requirement | Name | Description | Default | |-------------|----------------------------|--------------------------------------------------------------------------------------------------------|---------| | MUST | output stream (or simil…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/file-exporter.md#programmatic-configuration","meta":"MUST · Development"},{"type":"requirement","id":"Programmatic configuration","text":"This SHOULD include the possibility to configure the output stream to a file. | stdout |","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/protocol/file-exporter.md#programmatic-configuration","meta":"SHOULD · Development"},{"type":"requirement","id":"Notation Conventions and Compliance","text":"The keywords \"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"NOT RECOMMENDED\", \"MAY\", and \"OPTIONAL\" in the [specification][] are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, the…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/README.md#notation-conventions-and-compliance","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Notation Conventions and Compliance","text":"An implementation of the [specification][] is not compliant if it fails to satisfy one or more of the \"MUST\", \"MUST NOT\", \"REQUIRED\", requirements defined in the [specification][].","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/README.md#notation-conventions-and-compliance","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Notation Conventions and Compliance","text":"Conversely, an implementation of the [specification][] is compliant if it satisfies all the \"MUST\", \"MUST NOT\", \"REQUIRED\", requirements defined in the [specification][].","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/README.md#notation-conventions-and-compliance","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Project Naming","text":"The official acronym used by the OpenTelemetry project is \"OTel\". \"OT\" MAY be used only as a part of a longer acronym, such as OTCA (OpenTelemetry Certified Associate).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/README.md#project-naming","meta":"MAY · Unspecified"},{"type":"requirement","id":"Merging Resources","text":"SDKs SHOULD NOT update their merge algorithm until full Entity SDK support is provided.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/data-model.md#merging-resources","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Merging Resources","text":"As such, a merge SHOULD preserve any identity that already existed on a Resource while adding in new identifying information or descriptive attributes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/data-model.md#merging-resources","meta":"SHOULD · Development"},{"type":"requirement","id":"Resource Data Model","text":"| Field | Type | Description | | ----- | ---- | ----------- | | Entities | set\\<Entity\\> | Defines the set of Entities associated with this resource.<p>Entity is defined here | | Attributes | map\\<string, attribute value\\> | Additional Att…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/data-model.md#resource-data-model","meta":"MUST · Development"},{"type":"requirement","id":"Navigation","text":"> [!TIP] > Observability signals SHOULD be actionable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/README.md#navigation","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Overview","text":"It MUST identify the observed entity for which telemetry is being produced.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/README.md#overview","meta":"MUST · Unspecified"},{"type":"requirement","id":"Overview","text":"It SHOULD allow users to determine where that entity resides within their infrastructure.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/README.md#overview","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Create","text":"The interface MUST provide a way to create a new resource.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#create","meta":"MUST · Stable"},{"type":"requirement","id":"Create","text":"When both Entities and Attributes are provided in the create method, the system MUST behave as if a Resource is created with just Attributes and then merges with another Resource created with just Entities.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#create","meta":"MUST · Stable"},{"type":"requirement","id":"Detecting resource information from the environment","text":"Custom resource detectors related to generic platforms (e.g. Docker, Kubernetes) or vendor specific environments (e.g. EKS, AKS, GKE) MUST be implemented as packages separate from the SDK.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#detecting-resource-information-from-the-environment","meta":"MUST · Stable"},{"type":"requirement","id":"Detecting resource information from the environment","text":"Resource detector packages MUST provide a method that returns a resource.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#detecting-resource-information-from-the-environment","meta":"MUST · Stable"},{"type":"requirement","id":"Detecting resource information from the environment","text":"Resource detector packages MAY detect resource information from multiple possible sources and merge the result using the Merge operation described above.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#detecting-resource-information-from-the-environment","meta":"MAY · Stable"},{"type":"requirement","id":"Detecting resource information from the environment","text":"Note the failure to detect any resource information MUST NOT be considered an error, whereas an error that occurs during an attempt to detect resource information SHOULD be considered an error.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#detecting-resource-information-from-the-environment","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Detecting resource information from the environment","text":"Resource detectors that populate resource attributes according to OpenTelemetry semantic conventions MUST ensure that the resource has a Schema URL set to a value that matches the semantic conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#detecting-resource-information-from-the-environment","meta":"MUST · Stable"},{"type":"requirement","id":"Detecting resource information from the environment","text":"Empty Schema URL SHOULD be used if the detector does not populate the resource with any known attributes that have a semantic convention or if the detector does not know what attributes it will populate (e.g. the detector that reads the at…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#detecting-resource-information-from-the-environment","meta":"SHOULD · Stable"},{"type":"requirement","id":"Detecting resource information from the environment","text":"If multiple detectors are combined and the detectors use different non-empty Schema URL it MUST be an error since it is impossible to merge such resources.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#detecting-resource-information-from-the-environment","meta":"MUST · Stable"},{"type":"requirement","id":"Merge","text":"The interface MUST provide a way for an old resource and an updating resource to be merged into a new resource.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#merge","meta":"MUST · Stable"},{"type":"requirement","id":"Merge","text":"If either resource contains Entities then merge behavior with Entiites MUST be used, otherwise merge behavior without Entities MUST be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#merge","meta":"MUST · Stable"},{"type":"requirement","id":"Merge behavior with entities","text":"When either Resource contains entities, the merge operation MUST follow the resource data model's merge algorithm.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#merge-behavior-with-entities","meta":"MUST · Stable"},{"type":"requirement","id":"Merge behavior with entities","text":"The resulting SchemaURL MUST match the behavior defined in the merge algorithm.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#merge-behavior-with-entities","meta":"MUST · Stable"},{"type":"requirement","id":"Merge behavior without Entities","text":"The resulting resource MUST have all attributes that are on any of the two input resources.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#merge-behavior-without-entities","meta":"MUST · Stable"},{"type":"requirement","id":"Merge behavior without Entities","text":"If a key exists on both the old and updating resource, the value of the updating resource MUST be picked (even if the updated value is empty).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#merge-behavior-without-entities","meta":"MUST · Stable"},{"type":"requirement","id":"Resource detector name","text":"Resource detectors SHOULD have a unique name for reference in configuration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#resource-detector-name","meta":"SHOULD · Stable"},{"type":"requirement","id":"Resource detector name","text":"Names SHOULD be snake case and consist of lowercase alphanumeric and _ characters, which ensures they conform to declarative configuration property name requirements.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#resource-detector-name","meta":"SHOULD · Stable"},{"type":"requirement","id":"Resource detector name","text":"Resource detector names SHOULD reflect the root namespace of attributes they populate.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#resource-detector-name","meta":"SHOULD · Stable"},{"type":"requirement","id":"Resource detector name","text":"Resource detectors which populate attributes from multiple root namespaces SHOULD choose a name which appropriately conveys their purpose.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#resource-detector-name","meta":"SHOULD · Stable"},{"type":"requirement","id":"Resource detector name","text":"An SDK which identifies multiple resource detectors with the same name SHOULD report an error.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#resource-detector-name","meta":"SHOULD · Stable"},{"type":"requirement","id":"Resource detector name","text":"In order to limit collisions, resource detectors SHOULD document their name in a manner which is easily discoverable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#resource-detector-name","meta":"SHOULD · Stable"},{"type":"requirement","id":"Resource SDK","text":"The SDK MUST allow for creation of Resources and for associating them with telemetry.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#resource-sdk","meta":"MUST · Stable"},{"type":"requirement","id":"Resource SDK","text":"When associated with a TracerProvider, all Spans produced by any Tracer from the provider MUST be associated with this Resource.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#resource-sdk","meta":"MUST · Stable"},{"type":"requirement","id":"Retrieve attributes","text":"When entities are enabled and present for the Resource, this list MUST include all attributes, including those associated with entities.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#retrieve-attributes","meta":"MUST · Stable"},{"type":"requirement","id":"Retrieve entities","text":"The SDK SHOULD provide a way to retrieve the entities associated with a resource.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#retrieve-entities","meta":"SHOULD · Stable"},{"type":"requirement","id":"Retrieve unassociated attributes","text":"The SDK SHOULD provide a way to retrieve attributes which are NOT associated with an entity in the resource.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#retrieve-unassociated-attributes","meta":"SHOULD · Stable"},{"type":"requirement","id":"SDK-provided resource attributes","text":"The SDK MUST provide access to a Resource with at least the attributes listed at Semantic Attributes with SDK-provided Default Value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#sdk-provided-resource-attributes","meta":"MUST · Stable"},{"type":"requirement","id":"SDK-provided resource attributes","text":"This resource MUST be associated with a TracerProvider, MeterProvider, or LoggerProvider if another resource was not explicitly specified.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#sdk-provided-resource-attributes","meta":"MUST · Stable"},{"type":"requirement","id":"Specifying resource information via an environment variable","text":"The SDK MUST extract information from the OTELRESOURCEATTRIBUTES environment variable and merge this, as the secondary resource, with any resource information provided by the user, i.e. the user provided resource information has higher pri…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#specifying-resource-information-via-an-environment-variable","meta":"MUST · Stable"},{"type":"requirement","id":"Specifying resource information via an environment variable","text":"All attribute values MUST be considered strings.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#specifying-resource-information-via-an-environment-variable","meta":"MUST · Stable"},{"type":"requirement","id":"Specifying resource information via an environment variable","text":"The , and = characters in keys and values MUST be percent encoded.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#specifying-resource-information-via-an-environment-variable","meta":"MUST · Stable"},{"type":"requirement","id":"Specifying resource information via an environment variable","text":"Other characters MAY be percent-encoded, e.g. values outside the ANSI characters set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#specifying-resource-information-via-an-environment-variable","meta":"MAY · Stable"},{"type":"requirement","id":"Specifying resource information via an environment variable","text":"In case of any error, e.g. failure during the decoding process, the entire environment variable value SHOULD be discarded and an error SHOULD be reported following the Error Handling principles.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/resource/sdk.md#specifying-resource-information-via-an-environment-variable","meta":"SHOULD · Stable"},{"type":"requirement","id":"all Section","text":"In this case the MAJOR version number of the schema SHOULD be increased in the new version.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#all-section","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Any change to this number MUST follow the OTEP process and be published in the specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#schema-file-format-number","meta":"MUST · Development"},{"type":"requirement","id":"Schema File Format Number","text":"As the schema file format evolves over time the format version number SHOULD change according to the following rules:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#schema-file-format-number","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"PATCH number SHOULD be increased when the file format changes in a way that does not affect the existing consumers of the file.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#schema-file-format-number","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"MINOR number SHOULD be increased if a new setting is added to the file format in a backward compatible manner. \"Backward compatible\" in this context means that consumers that are aware of the new MINOR number can consume the file of a part…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#schema-file-format-number","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Consumers which support reading up to a particular MINOR version number SHOULD NOT attempt to consume files with higher MINOR version numbers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#schema-file-format-number","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Schema File Format Number","text":"MAJOR number SHOULD be increased if the file format is changed in an incompatible way.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#schema-file-format-number","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Consumers of the schema file SHOULD NOT attempt to interpret the schema file if the MAJOR version number is different (higher or lower) than what the consumer supports.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#schema-file-format-number","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Consumers of the schema file SHOULD NOT attempt to interpret the schema file if the MINOR version number is higher than what the consumer supports.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#schema-file-format-number","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Consumers MAY ignore the PATCH number.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.0.0.md#schema-file-format-number","meta":"MAY · Development"},{"type":"requirement","id":"all Section","text":"In this case the MAJOR version number of the schema SHOULD be increased in the new version.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#all-section","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Any change to this number MUST be published in the specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#schema-file-format-number","meta":"MUST · Development"},{"type":"requirement","id":"Schema File Format Number","text":"As the schema file format evolves over time the format version number SHOULD change according to the following rules:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#schema-file-format-number","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"PATCH number SHOULD be increased when the file format changes in a way that does not affect the existing consumers of the file.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#schema-file-format-number","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"MINOR number SHOULD be increased if a new setting is added to the file format in a backward compatible manner. \"Backward compatible\" in this context means that consumers that are aware of the new MINOR number can consume the file of a part…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#schema-file-format-number","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Consumers which support reading up to a particular MINOR version number SHOULD NOT attempt to consume files with higher MINOR version numbers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#schema-file-format-number","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Schema File Format Number","text":"MAJOR number SHOULD be increased if the file format is changed in an incompatible way.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#schema-file-format-number","meta":"SHOULD · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Consumers of the schema file SHOULD NOT attempt to interpret the schema file if the MAJOR version number is different (higher or lower) than what the consumer supports.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#schema-file-format-number","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Consumers of the schema file SHOULD NOT attempt to interpret the schema file if the MINOR version number is higher than what the consumer supports.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#schema-file-format-number","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Schema File Format Number","text":"Consumers MAY ignore the PATCH number.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/file_format_v1.1.0.md#schema-file-format-number","meta":"MAY · Development"},{"type":"requirement","id":"OpenTelemetry Schema","text":"Every time a new semantic-conventions version is released a corresponding new schema MUST be released simultaneously.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/README.md#opentelemetry-schema","meta":"MUST · Stable"},{"type":"requirement","id":"Schema URL","text":"The fetcher MUST follow the HTTP standard and honour the redirect response and fetch the file from the redirected URL.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/README.md#schema-url","meta":"MUST · Stable"},{"type":"requirement","id":"Schema URL","text":"The schema file that corresponds to the new version MUST be retrievable at a new URL.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/README.md#schema-url","meta":"MUST · Stable"},{"type":"requirement","id":"What is Out of Scope","text":"Any new transformation types MUST be proposed and added in the future to the schema file format when there is an evidence that they are necessary for the evolution of OpenTelemetry.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/schemas/README.md#what-is-out-of-scope","meta":"MUST · Stable"},{"type":"requirement","id":"SDK Self-Observability Metrics","text":"SDKs that implement self-observability metrics SHOULD follow these conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/self-observability.md#sdk-self-observability-metrics","meta":"SHOULD · Development"},{"type":"requirement","id":"Self-Observability","text":"OpenTelemetry SDKs SHOULD emit self-observability (\"internal\") telemetry about their own behavior (for example, metrics, logs, and other signals describing the state of processors, exporters, and metric readers) to help operators monitor t…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/self-observability.md#self-observability","meta":"SHOULD · Development"},{"type":"requirement","id":"In-development Reserved Attributes","text":"Semantic conventions MUST provide the following attributes:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/semantic-conventions.md#in-development-reserved-attributes","meta":"MUST · Development"},{"type":"requirement","id":"Reserved Attributes","text":"Semantic conventions MUST provide the following attributes:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/semantic-conventions.md#reserved-attributes","meta":"MUST · Development"},{"type":"requirement","id":"Reserved Attributes","text":"Semantic conventions MUST provide the following events:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/semantic-conventions.md#reserved-attributes","meta":"MUST · Development"},{"type":"requirement","id":"Stable Instrumentations","text":"Stable telemetry-producing instrumentations (stable instrumentations for short) SHOULD be clearly labeled so by any means the instrumentations authors consider idiomatic for their language, e.g. via version numbers, artifact names, documen…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/telemetry-stability.md#stable-instrumentations","meta":"SHOULD · Development"},{"type":"requirement","id":"Stable Instrumentations","text":"Stable instrumentations authored by OpenTelemetry SHOULD NOT produce telemetry that is not described by OpenTelemetry semantic conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/telemetry-stability.md#stable-instrumentations","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Stable Instrumentations","text":"If, however, this rule is broken the instrumentations MUST NOT change such telemetry, regardless of whether they are fixed-schema producers or schema-file driven producers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/telemetry-stability.md#stable-instrumentations","meta":"MUST NOT · Development"},{"type":"requirement","id":"Unstable Instrumentations","text":"Unstable telemetry-producing instrumentations (unstable instrumentations for short) SHOULD be clearly labeled so by any means the instrumentations authors consider idiomatic for their language, e.g. via version numbers, artifact names, doc…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/telemetry-stability.md#unstable-instrumentations","meta":"SHOULD · Development"},{"type":"requirement","id":"Unstable Instrumentations","text":"The produced telemetry MAY specify a Schema URL if the telemetry data conforms to a particular Schema.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/telemetry-stability.md#unstable-instrumentations","meta":"MAY · Development"},{"type":"requirement","id":"Unstable Instrumentations","text":"Unstable instrumentations authored by OpenTelemetry MAY produce additional telemetry that is not described by OpenTelemetry semantic conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/telemetry-stability.md#unstable-instrumentations","meta":"MAY · Development"},{"type":"requirement","id":"Add Events","text":"A Span MUST have the ability to add events.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#add-events","meta":"MUST · Stable"},{"type":"requirement","id":"Add Events","text":"The Span interface MUST provide:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#add-events","meta":"MUST · Stable"},{"type":"requirement","id":"Add Events","text":"This MAY be called AddEvent.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#add-events","meta":"MAY · Stable"},{"type":"requirement","id":"Add Events","text":"Events SHOULD preserve the order in which they are recorded.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#add-events","meta":"SHOULD · Stable"},{"type":"requirement","id":"Add Link","text":"A Span MUST have the ability to add Links associated with it after its creation - see Links.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#add-link","meta":"MUST · Stable"},{"type":"requirement","id":"Behavior of the API in the absence of an installed SDK","text":"However, there is one important exception to this general rule, and that is related to propagation of a SpanContext: The API MUST return a non-recording Span with the SpanContext in the parent Context (whether explicitly given or implicit …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#behavior-of-the-api-in-the-absence-of-an-installed-sdk","meta":"MUST · Stable"},{"type":"requirement","id":"Behavior of the API in the absence of an installed SDK","text":"If the Span in the parent Context is already non-recording, it SHOULD be returned directly without instantiating a new Span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#behavior-of-the-api-in-the-absence-of-an-installed-sdk","meta":"SHOULD · Stable"},{"type":"requirement","id":"Behavior of the API in the absence of an installed SDK","text":"If the parent Context contains no Span, an empty non-recording Span MUST be returned instead (i.e., having a SpanContext with all-zero Span and Trace IDs, empty Tracestate, and unsampled TraceFlags).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#behavior-of-the-api-in-the-absence-of-an-installed-sdk","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"TracerProvider - all methods MUST be documented that implementations need to be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Tracer - all methods MUST be documented that implementations need to be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Span - all methods MUST be documented that implementations need to be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Event - Events are immutable and MUST be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Link - Links are immutable and SHOULD be safe for concurrent use by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#concurrency-requirements","meta":"SHOULD · Stable"},{"type":"requirement","id":"Context Interaction","text":"The API MUST provide the following functionality to interact with a Context instance:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#context-interaction","meta":"MUST · Stable"},{"type":"requirement","id":"Context Interaction","text":"The functionality listed above is necessary because API users SHOULD NOT have access to the Context Key used by the Tracing API implementation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#context-interaction","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Context Interaction","text":"If the language has support for implicitly propagated Context (see here), the API SHOULD also provide the following functionality:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#context-interaction","meta":"SHOULD · Stable"},{"type":"requirement","id":"Context Interaction","text":"All the above functionalities operate solely on the context API, and they MAY be exposed as either static methods on the trace module, or as static methods on a class inside the trace module.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#context-interaction","meta":"MAY · Stable"},{"type":"requirement","id":"Context Interaction","text":"This functionality SHOULD be fully implemented in the API when possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#context-interaction","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enabled","text":"To help users avoid performing computationally expensive operations when creating Spans, a Tracer SHOULD provide this Enabled API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enabled","text":"Parameters can be added in the future, therefore, the API MUST be structured in a way for parameters to be added.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#enabled","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"This API MUST return a language idiomatic boolean type.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#enabled","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"The API SHOULD be documented that instrumentation authors needs to call this API each time they create a new Span to ensure they have the most up-to-date response.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"End","text":"Implementations SHOULD ignore all subsequent calls to End and any other Span methods, i.e. the Span becomes non-recording by being ended (there might be exceptions when Tracer is streaming events and has no mutable state associated with th…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"SHOULD · Stable"},{"type":"requirement","id":"End","text":"Language SIGs MAY provide methods other than End in the API that also end the span to support language-specific features like with statements in Python.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"MAY · Stable"},{"type":"requirement","id":"End","text":"However, all API implementations of such methods MUST internally call the End method and be documented to do so.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"MUST · Stable"},{"type":"requirement","id":"End","text":"End MUST NOT have any effects on child spans.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"MUST NOT · Stable"},{"type":"requirement","id":"End","text":"End MUST NOT inactivate the Span in any Context it is active in.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"MUST NOT · Stable"},{"type":"requirement","id":"End","text":"It MUST still be possible to use an ended span as parent via a Context it is contained in.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"MUST · Stable"},{"type":"requirement","id":"End","text":"Also, any mechanisms for putting the Span into a Context MUST still work after the Span was ended.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"MUST · Stable"},{"type":"requirement","id":"End","text":"If omitted, this MUST be treated equivalent to passing the current time.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"MUST · Stable"},{"type":"requirement","id":"End","text":"This operation itself MUST NOT perform blocking I/O on the calling thread.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"MUST NOT · Stable"},{"type":"requirement","id":"End","text":"Any locking used needs be minimized and SHOULD be removed entirely if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#end","meta":"SHOULD · Stable"},{"type":"requirement","id":"Get a Tracer","text":"This API MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#get-a-tracer","meta":"MUST · Stable"},{"type":"requirement","id":"Get a Tracer","text":"name (required): This name SHOULD uniquely identify the instrumentation scope, such as the instrumentation library (e.g. io.opentelemetry.contrib.mongodb), package, module or class name.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#get-a-tracer","meta":"SHOULD · Stable"},{"type":"requirement","id":"Get a Tracer","text":"In case an invalid name (null or empty string) is specified, a working Tracer implementation MUST be returned as a fallback rather than returning null or throwing an exception, its name property SHOULD be set to an empty string, and a mess…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#get-a-tracer","meta":"MUST · Stable"},{"type":"requirement","id":"Get a Tracer","text":"Implementations MUST NOT require users to repeatedly obtain a Tracer again with the same identity to pick up configuration changes.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#get-a-tracer","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Get Context","text":"The Span interface MUST provide:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#get-context","meta":"MUST · Stable"},{"type":"requirement","id":"Get Context","text":"The returned value MUST be the same for the entire Span lifetime.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#get-context","meta":"MUST · Stable"},{"type":"requirement","id":"Get Context","text":"This MAY be called GetContext.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#get-context","meta":"MAY · Stable"},{"type":"requirement","id":"IsRecording","text":"After a Span is ended, it SHOULD become non-recording and IsRecording SHOULD always return false.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#isrecording","meta":"SHOULD · Stable"},{"type":"requirement","id":"IsRecording","text":"IsRecording SHOULD NOT take any parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#isrecording","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"IsRecording","text":"This flag SHOULD be used to avoid expensive computations of a Span attributes or events in case when a Span is definitely not recorded.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#isrecording","meta":"SHOULD · Stable"},{"type":"requirement","id":"IsRemote","text":"An API called IsRemote, that returns a boolean value, which is true if the SpanContext was propagated from a remote parent, MUST be provided.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#isremote","meta":"MUST · Stable"},{"type":"requirement","id":"IsRemote","text":"When extracting a SpanContext through the Propagators API, IsRemote MUST return true, whereas for the SpanContext of any child spans it MUST return false.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#isremote","meta":"MUST · Stable"},{"type":"requirement","id":"IsValid","text":"An API called IsValid, that returns a boolean value, which is true if the SpanContext has a non-zero TraceID and a non-zero SpanID, MUST be provided.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#isvalid","meta":"MUST · Stable"},{"type":"requirement","id":"Link","text":"A user MUST have the ability to record links to other SpanContexts.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#link","meta":"MUST · Stable"},{"type":"requirement","id":"Link","text":"The API MUST provide:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#link","meta":"MUST · Stable"},{"type":"requirement","id":"Link","text":"This MAY be called AddLink.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#link","meta":"MAY · Stable"},{"type":"requirement","id":"Link","text":"Implementations SHOULD record links containing SpanContext with empty TraceId or SpanId (all zeros) as long as either the attribute set or TraceState is non-empty.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#link","meta":"SHOULD · Stable"},{"type":"requirement","id":"Link","text":"The Span interface MAY provide:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#link","meta":"MAY · Stable"},{"type":"requirement","id":"Link","text":"Span SHOULD preserve the order in which Links are set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#link","meta":"SHOULD · Stable"},{"type":"requirement","id":"Link","text":"The API documentation MUST state that adding links at span creation is preferred to calling AddLink later, for contexts that are available during span creation, because head sampling decisions can only consider information present during s…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#link","meta":"MUST · Stable"},{"type":"requirement","id":"Record Exception","text":"To facilitate recording an exception languages SHOULD provide a RecordException method if the language uses exceptions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#record-exception","meta":"SHOULD · Stable"},{"type":"requirement","id":"Record Exception","text":"The method MUST record an exception as an Event with the conventions outlined in the exceptions document.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#record-exception","meta":"MUST · Stable"},{"type":"requirement","id":"Record Exception","text":"The minimum required argument SHOULD be no more than only an exception object.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#record-exception","meta":"SHOULD · Stable"},{"type":"requirement","id":"Record Exception","text":"If RecordException is provided, the method MUST accept an optional parameter to provide any additional event attributes (this SHOULD be done in the same way as for the AddEvent method).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#record-exception","meta":"MUST · Stable"},{"type":"requirement","id":"Retrieving the TraceId and SpanId","text":"The API MUST allow retrieving the TraceId and SpanId in the following forms:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#retrieving-the-traceid-and-spanid","meta":"MUST · Stable"},{"type":"requirement","id":"Retrieving the TraceId and SpanId","text":"Hex - returns the lowercase hex encoded TraceId (result MUST be a 32-hex-character lowercase string) or SpanId (result MUST be a 16-hex-character lowercase string).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#retrieving-the-traceid-and-spanid","meta":"MUST · Stable"},{"type":"requirement","id":"Retrieving the TraceId and SpanId","text":"Binary - returns the binary representation of the TraceId (result MUST be a 16-byte array) or SpanId (result MUST be an 8-byte array).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#retrieving-the-traceid-and-spanid","meta":"MUST · Stable"},{"type":"requirement","id":"Retrieving the TraceId and SpanId","text":"The API SHOULD NOT expose details about how they are internally stored.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#retrieving-the-traceid-and-spanid","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Set Attributes","text":"A Span MUST have the ability to set Attributes associated with it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-attributes","meta":"MUST · Stable"},{"type":"requirement","id":"Set Attributes","text":"The Span interface MUST provide:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-attributes","meta":"MUST · Stable"},{"type":"requirement","id":"Set Attributes","text":"This MAY be called SetAttribute.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-attributes","meta":"MAY · Stable"},{"type":"requirement","id":"Set Attributes","text":"The Span interface MAY provide:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-attributes","meta":"MAY · Stable"},{"type":"requirement","id":"Set Attributes","text":"Setting an attribute with the same key as an existing attribute SHOULD overwrite the existing attribute's value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-attributes","meta":"SHOULD · Stable"},{"type":"requirement","id":"Set Status","text":"Description MUST only be used with the Error StatusCode value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"MUST · Stable"},{"type":"requirement","id":"Set Status","text":"The Span interface MUST provide:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"MUST · Stable"},{"type":"requirement","id":"Set Status","text":"This SHOULD be called SetStatus.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"SHOULD · Stable"},{"type":"requirement","id":"Set Status","text":"Description MUST be IGNORED for StatusCode Ok & Unset values.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"MUST · Stable"},{"type":"requirement","id":"Set Status","text":"The status code SHOULD remain unset, except for the following circumstances:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"SHOULD · Stable"},{"type":"requirement","id":"Set Status","text":"An attempt to set value Unset SHOULD be ignored.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"SHOULD · Stable"},{"type":"requirement","id":"Set Status","text":"When the status is set to Error by Instrumentation Libraries, the Description SHOULD be documented and predictable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"SHOULD · Stable"},{"type":"requirement","id":"Set Status","text":"For operations not covered by the semantic conventions, Instrumentation Libraries SHOULD publish their own conventions, including possible values of Description and what they mean.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"SHOULD · Stable"},{"type":"requirement","id":"Set Status","text":"Generally, Instrumentation Libraries SHOULD NOT set the status code to Ok, unless explicitly configured to do so.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Set Status","text":"Instrumentation Libraries SHOULD leave the status code as Unset unless there is an error, as described above.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"SHOULD · Stable"},{"type":"requirement","id":"Set Status","text":"When span status is set to Ok it SHOULD be considered final and any further attempts to change it SHOULD be ignored.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"SHOULD · Stable"},{"type":"requirement","id":"Set Status","text":"Analysis tools SHOULD respond to an Ok status by suppressing any errors they would otherwise generate.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#set-status","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span","text":"The span name SHOULD be the most general string that identifies a (statistically) interesting class of Spans, rather than individual Span instances while still being human-readable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span","text":"Generality SHOULD be prioritized over human-readability.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span","text":"A Span's start time SHOULD be set to the current time on span creation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span","text":"After the Span is created, it SHOULD be possible to change its name, set its Attributes, add Events, and set the Status.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span","text":"These MUST NOT be changed after the Span's end time has been set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Span","text":"To prevent misuse, implementations SHOULD NOT provide access to a Span's attributes besides its SpanContext.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Span","text":"However, alternative implementations MUST NOT allow callers to create Spans directly.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Span","text":"All Spans MUST be created via a Tracer.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span","meta":"MUST · Stable"},{"type":"requirement","id":"Span Creation","text":"There MUST NOT be any API for creating a Span other than with a Tracer.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Span Creation","text":"In languages with implicit Context propagation, Span creation MUST NOT set the newly created Span as the active Span in the current Context by default, but this functionality MAY be offered additionally as a separate operation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Span Creation","text":"The API MUST accept the following parameters:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Span Creation","text":"The API MAY also have an option for implicitly using the current Context as parent as a default behavior.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Span Creation","text":"This API MUST NOT accept a Span or SpanContext as parent, only a full Context.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Span Creation","text":"The semantic parent of the Span MUST be determined according to the rules described in Determining the Parent Span from a Context.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Span Creation","text":"The API documentation MUST state that adding attributes at span creation is preferred to calling SetAttribute later, as samplers can only consider information already present during span creation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Span Creation","text":"This argument SHOULD only be set when span creation time has already passed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span Creation","text":"If API is called at a moment of a Span logical start, API user MUST NOT explicitly set this argument.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Span Creation","text":"Implementations MUST provide an option to create a Span as a root span, and MUST generate a new TraceId for each root span created.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Span Creation","text":"For a Span with a parent, the TraceId MUST be the same as the parent.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Span Creation","text":"Also, the child span MUST inherit all TraceState values of its parent by default.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Span Creation","text":"Any span that is created MUST also be ended.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Span Creation","text":"API implementations MAY leak memory or other resources (including, for example, CPU time for periodic work that iterates all spans) if the user forgot to end the span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Span lifetime","text":"Start and end time as well as Event's timestamps MUST be recorded at a time of a calling of corresponding API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#span-lifetime","meta":"MUST · Stable"},{"type":"requirement","id":"SpanContext","text":"The API MUST implement methods to create a SpanContext.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#spancontext","meta":"MUST · Stable"},{"type":"requirement","id":"SpanContext","text":"These methods SHOULD be the only way to create a SpanContext.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#spancontext","meta":"SHOULD · Stable"},{"type":"requirement","id":"SpanContext","text":"This functionality MUST be fully implemented in the API, and SHOULD NOT be overridable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#spancontext","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"SpanKind","text":"In order for SpanKind to be meaningful, callers SHOULD arrange that a single Span does not serve more than one purpose.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#spankind","meta":"SHOULD · Stable"},{"type":"requirement","id":"SpanKind","text":"For example, a server-side span SHOULD NOT be used to describe outgoing remote procedure call.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#spankind","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Specifying links","text":"During Span creation, a user MUST have the ability to record links to other Spans.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#specifying-links","meta":"MUST · Stable"},{"type":"requirement","id":"Tracer operations","text":"The Tracer MUST provide functions to:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracer-operations","meta":"MUST · Stable"},{"type":"requirement","id":"Tracer operations","text":"The Tracer SHOULD provide functions to:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracer-operations","meta":"SHOULD · Stable"},{"type":"requirement","id":"TracerProvider","text":"Thus, the API SHOULD provide a way to set/register and access a global default TracerProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracerprovider","meta":"SHOULD · Stable"},{"type":"requirement","id":"TracerProvider","text":"Thus, implementations of TracerProvider SHOULD allow creating an arbitrary number of TracerProvider instances.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracerprovider","meta":"SHOULD · Stable"},{"type":"requirement","id":"TracerProvider operations","text":"The TracerProvider MUST provide the following functions:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracerprovider-operations","meta":"MUST · Stable"},{"type":"requirement","id":"TraceState","text":"Tracing API MUST provide at least the following operations on TraceState:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracestate","meta":"MUST · Stable"},{"type":"requirement","id":"TraceState","text":"These operations MUST follow the rules described in the W3C Trace Context specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracestate","meta":"MUST · Stable"},{"type":"requirement","id":"TraceState","text":"All mutating operations MUST return a new TraceState with the modifications applied.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracestate","meta":"MUST · Stable"},{"type":"requirement","id":"TraceState","text":"TraceState MUST at all times be valid according to rules specified in W3C Trace Context specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracestate","meta":"MUST · Stable"},{"type":"requirement","id":"TraceState","text":"Every mutating operations MUST validate input parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracestate","meta":"MUST · Stable"},{"type":"requirement","id":"TraceState","text":"If invalid value is passed the operation MUST NOT return TraceState containing invalid data and MUST follow the general error handling guidelines.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#tracestate","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Wrapping a SpanContext in a Span","text":"The API MUST provide an operation for wrapping a SpanContext with an object implementing the Span interface.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#wrapping-a-spancontext-in-a-span","meta":"MUST · Stable"},{"type":"requirement","id":"Wrapping a SpanContext in a Span","text":"If a new type is required for supporting this operation, it SHOULD NOT be exposed publicly if possible (e.g. by only exposing a function that returns something with the Span interface type).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#wrapping-a-spancontext-in-a-span","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Wrapping a SpanContext in a Span","text":"If a new type is required to be publicly exposed, it SHOULD be named NonRecordingSpan.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#wrapping-a-spancontext-in-a-span","meta":"SHOULD · Stable"},{"type":"requirement","id":"Wrapping a SpanContext in a Span","text":"GetContext MUST return the wrapped SpanContext.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#wrapping-a-spancontext-in-a-span","meta":"MUST · Stable"},{"type":"requirement","id":"Wrapping a SpanContext in a Span","text":"IsRecording MUST return false to signal that events, attributes and other elements are not being recorded, i.e. they are being dropped.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#wrapping-a-spancontext-in-a-span","meta":"MUST · Stable"},{"type":"requirement","id":"Wrapping a SpanContext in a Span","text":"The remaining functionality of Span MUST be defined as no-op operations.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#wrapping-a-spancontext-in-a-span","meta":"MUST · Stable"},{"type":"requirement","id":"Wrapping a SpanContext in a Span","text":"This functionality MUST be fully implemented in the API, and SHOULD NOT be overridable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/api.md#wrapping-a-spancontext-in-a-span","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Attributes","text":"An event representing an exception MUST have an event name exception.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/exceptions.md#attributes","meta":"MUST · Stable"},{"type":"requirement","id":"Attributes","text":"Additionally, the following attributes SHOULD be filled out:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/exceptions.md#attributes","meta":"SHOULD · Stable"},{"type":"requirement","id":"Recording an Exception","text":"An exception SHOULD be recorded as an Event on the span during which it occurred if and only if it remains unhandled when the span ends and causes the span status to be set to ERROR.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/exceptions.md#recording-an-exception","meta":"SHOULD · Stable"},{"type":"requirement","id":"Recording an Exception","text":"The name of the event MUST be \"exception\".","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/exceptions.md#recording-an-exception","meta":"MUST · Stable"},{"type":"requirement","id":"Span Exporter - Standard output","text":"Documentation SHOULD warn users about this.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/stdout.md#span-exporter---standard-output","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span Exporter - Standard output","text":"OpenTelemetry SDK authors MAY choose the best idiomatic name for their language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/stdout.md#span-exporter---standard-output","meta":"MAY · Stable"},{"type":"requirement","id":"Span Exporter - Standard output","text":"If a language provides a mechanism to automatically configure a Span processor to pair with the associated exporter (e.g., using the OTELTRACESEXPORTER environment variable), by default the standard output exporter SHOULD be paired with a …","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/stdout.md#span-exporter---standard-output","meta":"SHOULD · Stable"},{"type":"requirement","id":"Attribute","text":"OpenTelemetry Span Attribute(s) MUST be reported as tags to Zipkin.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#attribute","meta":"MUST · Deprecated"},{"type":"requirement","id":"Attribute","text":"Primitive types MUST be converted to string using en-US culture settings.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#attribute","meta":"MUST · Deprecated"},{"type":"requirement","id":"Attribute","text":"Boolean values MUST use lower case strings \"true\" and \"false\".","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#attribute","meta":"MUST · Deprecated"},{"type":"requirement","id":"Attribute","text":"Array values MUST be serialized to string like a JSON list as mentioned in semantic conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#attribute","meta":"MUST · Deprecated"},{"type":"requirement","id":"Events","text":"Events MUST be converted to the Annotations with the names which will include attribute values like this:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#events","meta":"MUST · Deprecated"},{"type":"requirement","id":"OpenTelemetry to Zipkin Transformation","text":"Existing stable Zipkin exporters MUST > continue to be supported for at least one year after the artifact is deprecated, > following the SDK stability guarantees. > Implementing a Zipkin exporter is not required for new SDKs. > > Users may…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#opentelemetry-to-zipkin-transformation","meta":"MUST · Deprecated"},{"type":"requirement","id":"OpenTelemetry to Zipkin Transformation","text":"If a particular generic transformation rule and the rule in this document contradict then the rule in this document MUST be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#opentelemetry-to-zipkin-transformation","meta":"MUST · Deprecated"},{"type":"requirement","id":"OTLP -> Zipkin","text":"If Zipkin SpanKind resolves to either SpanKind.CLIENT or SpanKind.PRODUCER then the service SHOULD specify remote endpoint otherwise Zipkin won't treat the Span as a dependency.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#otlp---zipkin","meta":"SHOULD · Deprecated"},{"type":"requirement","id":"Request Payload","text":"For performance considerations, Zipkin fields that can be absent SHOULD be omitted from the payload when they are empty in the OpenTelemetry Span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#request-payload","meta":"SHOULD · Deprecated"},{"type":"requirement","id":"Service name","text":"Zipkin service name MUST be set to the value of the resource attribute: service.name.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#service-name","meta":"MUST · Deprecated"},{"type":"requirement","id":"Service name","text":"If no service.name is contained in a Span's Resource, it MUST be populated from the default Resource.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#service-name","meta":"MUST · Deprecated"},{"type":"requirement","id":"Service name","text":"Note that the attribute service.namespace MUST NOT be used for the Zipkin service name and should be sent as a Zipkin tag.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#service-name","meta":"MUST NOT · Deprecated"},{"type":"requirement","id":"Status","text":"Span Status MUST be reported as a key-value pair in tags to Zipkin, unless it is UNSET.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#status","meta":"MUST · Deprecated"},{"type":"requirement","id":"Status","text":"In the latter case it MUST NOT be reported.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#status","meta":"MUST NOT · Deprecated"},{"type":"requirement","id":"Status","text":"MUST NOT be set if the code is UNSET. | | Description | error | Description of the Status.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#status","meta":"MUST NOT · Deprecated"},{"type":"requirement","id":"Status","text":"MUST be set if the code is ERROR, use an empty string if Description has no value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#status","meta":"MUST · Deprecated"},{"type":"requirement","id":"Status","text":"MUST NOT be set for OK and UNSET codes. |","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#status","meta":"MUST NOT · Deprecated"},{"type":"requirement","id":"Status","text":"If a boolean version ({\"error\":false} or {\"error\":\"false\"}) is present, it SHOULD be removed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#status","meta":"SHOULD · Deprecated"},{"type":"requirement","id":"Unit of Time","text":"Zipkin times like timestamp, duration and annotation.timestamp MUST be reported in microseconds as whole numbers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk_exporters/zipkin.md#unit-of-time","meta":"MUST · Deprecated"},{"type":"requirement","id":"Additional Span Interfaces","text":"Readable span: A function receiving this as argument MUST be able to access all information that was added to the span, as listed in the API spec for Span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#additional-span-interfaces","meta":"MUST · Stable"},{"type":"requirement","id":"Additional Span Interfaces","text":"A function receiving this as argument MUST be able to access the InstrumentationScope [since 1.10.0] and Resource information (implicitly) associated with the span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#additional-span-interfaces","meta":"MUST · Stable"},{"type":"requirement","id":"Additional Span Interfaces","text":"For backwards compatibility it MUST also be able to access the InstrumentationLibrary [deprecated since 1.10.0] having the same name and version values as the InstrumentationScope.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#additional-span-interfaces","meta":"MUST · Stable"},{"type":"requirement","id":"Additional Span Interfaces","text":"A function receiving this as argument MUST be able to reliably determine whether the Span has ended (some languages might implement this by having an end timestamp of null, others might have an explicit hasEnded boolean).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#additional-span-interfaces","meta":"MUST · Stable"},{"type":"requirement","id":"Additional Span Interfaces","text":"Counts for attributes, events and links dropped due to collection limits MUST be available for exporters to report as described in the exporters specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#additional-span-interfaces","meta":"MUST · Stable"},{"type":"requirement","id":"Additional Span Interfaces","text":"As an exception to the authoritative set of span properties defined in the API spec, implementations MAY choose not to expose (and store) the full parent Context of the Span but they MUST expose at least the full parent SpanContext.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#additional-span-interfaces","meta":"MUST · Stable"},{"type":"requirement","id":"Additional Span Interfaces","text":"It MUST be possible for functions being called with this to somehow obtain the same Span instance and type that the span creation API returned (or will return) to the user (for example, the Span could be one of the parameters passed to suc…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#additional-span-interfaces","meta":"MUST · Stable"},{"type":"requirement","id":"AlwaysOff","text":"Description MUST be AlwaysOffSampler.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#alwaysoff","meta":"MUST · Stable"},{"type":"requirement","id":"AlwaysOn","text":"Description MUST be AlwaysOnSampler.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#alwayson","meta":"MUST · Stable"},{"type":"requirement","id":"AlwaysRecord","text":"Based on the decision from the wrapped root sampler, AlwaysRecord MUST behave as follows:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#alwaysrecord","meta":"MUST · Stable"},{"type":"requirement","id":"Batching processor","text":"The processor MUST synchronize calls to Span Exporter's Export to make sure that they are not invoked concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#batching-processor","meta":"MUST · Stable"},{"type":"requirement","id":"Batching processor","text":"The processor SHOULD export a batch when any of the following happens AND the previous export call has returned:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#batching-processor","meta":"SHOULD · Stable"},{"type":"requirement","id":"Batching processor","text":"If the queue is empty when an export is triggered, the processor MAY export an empty batch OR skip the export and consider it to be completed immediately.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#batching-processor","meta":"MAY · Stable"},{"type":"requirement","id":"Built-in span processors","text":"The standard OpenTelemetry SDK MUST implement both simple and batch processors, as described below.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#built-in-span-processors","meta":"MUST · Stable"},{"type":"requirement","id":"Compatibility warnings for `ProbabilitySampler`","text":"When a ProbabilitySampler Sampler makes a decision for a non-root Span using TraceID randomness when the Trace random flag was not set, the SDK SHOULD issue a warning statement in its log with a compatibility warning.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#compatibility-warnings-for-probabilitysampler","meta":"SHOULD · Stable"},{"type":"requirement","id":"Compatibility warnings for `TraceIdRatioBased` sampler","text":"When this sampler observes a non-empty parent span context, meaning when it is used not as a root sampler, the SDK SHOULD emit a warning such as:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#compatibility-warnings-for-traceidratiobased-sampler","meta":"SHOULD · Stable"},{"type":"requirement","id":"Compatibility warnings for `TraceIdRatioBased` sampler","text":"In such a scenario, this sampler can also detect the use of a ProbabilitySampler by inspecting Tracestate for OpenTelemetry tracestate (ot=...) with th or rv subkeys, in which case the warning MAY be more direct:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#compatibility-warnings-for-traceidratiobased-sampler","meta":"MAY · Stable"},{"type":"requirement","id":"ComposableProbability","text":"For the zero case a ComposableAlwaysOff instance SHOULD be returned instead.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#composableprobability","meta":"SHOULD · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Tracer Provider - Tracer creation, ForceFlush and Shutdown MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Sampler - ShouldSample and GetDescription MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Span processor - all methods MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Concurrency requirements","text":"Span Exporter - ForceFlush and Shutdown MUST be safe to be called concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#concurrency-requirements","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration","text":"Configuration ( i.e., SpanProcessors, IdGenerator, SpanLimits, Sampler, and (Development) TracerConfigurator) MUST be owned by the TracerProvider.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#configuration","meta":"MUST · Stable"},{"type":"requirement","id":"Configuration","text":"The configuration MAY be applied at the time of TracerProvider creation if appropriate.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#configuration","meta":"MAY · Stable"},{"type":"requirement","id":"Configuration","text":"The TracerProvider MAY provide methods to update the configuration.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#configuration","meta":"MAY · Stable"},{"type":"requirement","id":"Configuration","text":"If configuration is updated (e.g., adding a SpanProcessor), the updated configuration MUST also apply to all already returned Tracers (i.e. it MUST NOT matter whether a Tracer was obtained from the TracerProvider before or after the config…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#configuration","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Do not overwrite explicit randomness","text":"SDKs and Samplers MUST NOT overwrite explicit randomness in an OpenTelemetry TraceState value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#do-not-overwrite-explicit-randomness","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Enabled","text":"Enabled MUST return false when either:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#enabled","meta":"MUST · Stable"},{"type":"requirement","id":"Enabled","text":"Otherwise, it SHOULD return true.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#enabled","meta":"SHOULD · Stable"},{"type":"requirement","id":"Enabled","text":"It MAY return false to support additional optimizations and features.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#enabled","meta":"MAY · Stable"},{"type":"requirement","id":"`Export(batch)`","text":"Export() MUST NOT block indefinitely, there MUST be a reasonable upper limit after which the call must time out with an error result (Failure).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#exportbatch","meta":"MUST NOT · Stable"},{"type":"requirement","id":"`Export(batch)`","text":"The default SDK's Span Processors SHOULD NOT implement retry logic, as the required logic is likely to depend heavily on the specific protocol and backend the spans are being sent to.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#exportbatch","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush","text":"ForceFlush MUST invoke ForceFlush on all registered SpanProcessors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush","meta":"MUST · Stable"},{"type":"requirement","id":"ForceFlush()","text":"This is a hint to ensure that any tasks associated with Spans for which the SpanProcessor had already received events prior to the call to ForceFlush SHOULD be completed as soon as possible, preferably before returning from this method.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush()","text":"In particular, if any SpanProcessor has any associated exporter, it SHOULD try to call the exporter's Export with all spans for which this was not already done and then invoke ForceFlush on it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush()","text":"The built-in SpanProcessors MUST do so.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-1","meta":"MUST · Stable"},{"type":"requirement","id":"ForceFlush()","text":"If a timeout is specified (see below), the SpanProcessor MUST prioritize honoring the timeout over finishing all calls.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-1","meta":"MUST · Stable"},{"type":"requirement","id":"ForceFlush()","text":"It MAY skip or abort some or all Export or ForceFlush calls it has made to achieve this goal.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-1","meta":"MAY · Stable"},{"type":"requirement","id":"ForceFlush()","text":"ForceFlush SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush()","text":"ForceFlush SHOULD only be called in cases where it is absolutely necessary, such as when using some FaaS providers that may suspend the process after an invocation, but before the SpanProcessor exports the completed spans.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"ForceFlush()","text":"ForceFlush SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"`ForceFlush()`","text":"This is a hint to ensure that the export of any Spans the exporter has received prior to the call to ForceFlush SHOULD be completed as soon as possible, preferably before returning from this method.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"`ForceFlush()`","text":"ForceFlush SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"`ForceFlush()`","text":"ForceFlush SHOULD only be called in cases where it is absolutely necessary, such as when using some FaaS providers that may suspend the process after an invocation, but before the exporter exports the completed spans.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"`ForceFlush()`","text":"ForceFlush SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#forceflush-2","meta":"SHOULD · Stable"},{"type":"requirement","id":"GetDescription","text":"Description MAY change over time, for example, if the sampler supports dynamic configuration or otherwise adjusts its parameters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#getdescription","meta":"MAY · Stable"},{"type":"requirement","id":"GetDescription","text":"Callers SHOULD NOT cache the returned value.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#getdescription","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"GetSamplingIntent","text":"Parent context, threshold, incoming trace state, and trace flag information MAY be precomputed so that ComposableSamplers do not repeatedly probe the Context for this information.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#getsamplingintent","meta":"MAY · Stable"},{"type":"requirement","id":"GetSamplingIntent","text":"Note: ComposableSamplers MUST NOT modify the parameters passed to delegate GetSamplingIntent methods, as they are considered read-only state.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#getsamplingintent","meta":"MUST NOT · Stable"},{"type":"requirement","id":"GetSamplingIntent","text":"ComposableSamplers MUST NOT modify the OpenTelemetry TraceState (i.e., the ot sub-key of TraceState).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#getsamplingintent","meta":"MUST NOT · Stable"},{"type":"requirement","id":"GetSamplingIntent","text":"The calling CompositeSampler SHOULD update the threshold of the outgoing TraceState, as described above.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#getsamplingintent","meta":"SHOULD · Stable"},{"type":"requirement","id":"GetSamplingIntent","text":"The explicit randomness values MUST not be modified.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#getsamplingintent","meta":"MUST · Stable"},{"type":"requirement","id":"ID Generators","text":"The SDK MUST by default randomly generate both the TraceId and the SpanId.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#id-generators","meta":"MUST · Stable"},{"type":"requirement","id":"ID Generators","text":"The SDK MUST provide a mechanism for customizing the way IDs are generated for both the TraceId and the SpanId.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#id-generators","meta":"MUST · Stable"},{"type":"requirement","id":"ID Generators","text":"The SDK MAY provide this functionality by allowing custom implementations of an interface like the Java example below (name of the interface MAY be IdGenerator, name of the methods MUST be consistent with SpanContext), which provides exten…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#id-generators","meta":"MUST · Stable"},{"type":"requirement","id":"ID Generators","text":"Additional IdGenerator implementing vendor-specific protocols such as AWS X-Ray trace ID generator MUST NOT be maintained or distributed as part of the OpenTelemetry Core packages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#id-generators","meta":"MUST NOT · Stable"},{"type":"requirement","id":"IdGenerator randomness","text":"If the SDK uses an IdGenerator extension point, the SDK SHOULD allow the extension to determine whether the Random flag is set when new IDs are generated.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#idgenerator-randomness","meta":"SHOULD · Stable"},{"type":"requirement","id":"IdGenerator randomness","text":"Custom implementations of the IdGenerator SHOULD identify themselves appropriately when all generated TraceID values meet the [W3C Trace Context Level 2 randomness requirements][W3CCONTEXTTRACEID], so that the Trace random flag will be set…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#idgenerator-randomness-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"Interface definition","text":"The SpanProcessor interface MUST declare the following methods:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#interface-definition","meta":"MUST · Stable"},{"type":"requirement","id":"Interface definition","text":"The SpanProcessor interface SHOULD declare the following methods:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#interface-definition","meta":"SHOULD · Stable"},{"type":"requirement","id":"Interface Definition","text":"The exporter MUST support three functions: Export, Shutdown, and ForceFlush.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#interface-definition-1","meta":"MUST · Stable"},{"type":"requirement","id":"OnEnding","text":"The end timestamp MUST have been computed (the OnEnding method duration is not included in the span duration).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#onending","meta":"MUST · Stable"},{"type":"requirement","id":"OnEnding","text":"The Span object MUST still be mutable (i.e., SetAttribute, AddLink, AddEvent can be called) while OnEnding is called.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#onending","meta":"MUST · Stable"},{"type":"requirement","id":"OnEnding","text":"This method MUST be called synchronously within the Span.End() API, therefore it should not block or throw an exception.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#onending","meta":"MUST · Stable"},{"type":"requirement","id":"OnEnding","text":"The SDK MUST guarantee that the span can no longer be modified by any other thread before invoking OnEnding of the first SpanProcessor.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#onending","meta":"MUST · Stable"},{"type":"requirement","id":"OnEnd(Span)","text":"This method MUST be called synchronously within the Span.End() API, therefore it should not block or throw an exception.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#onendspan","meta":"MUST · Stable"},{"type":"requirement","id":"OnStart","text":"It SHOULD be possible to keep a reference to this span object and updates to the span SHOULD be reflected in it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#onstart","meta":"SHOULD · Stable"},{"type":"requirement","id":"Presumption of TraceID randomness","text":"For all span contexts, OpenTelemetry samplers SHOULD presume that TraceIDs meet the W3C Trace Context Level 2 randomness requirements, unless an explicit randomness value is present in the [rv sub-key of the OpenTelemetry TraceState][OTELR…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#presumption-of-traceid-randomness","meta":"SHOULD · Stable"},{"type":"requirement","id":"ProbabilitySampler","text":"The ProbabilitySampler sampler MUST ignore the parent SampledFlag.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#probabilitysampler","meta":"MUST · Stable"},{"type":"requirement","id":"`ProbabilitySampler` sampler algorithm","text":"When (R >= T), the OpenTelemetry TraceState SHOULD be modified to include the key-value th:T for rejection threshold value (T), as specified for the [OpenTelemetry TraceState th sub-key][TRACESTATEHANDLING].","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#probabilitysampler-sampler-algorithm","meta":"SHOULD · Stable"},{"type":"requirement","id":"Random trace flag","text":"For root span contexts, the SDK SHOULD set the Random flag in the trace flags when it generates TraceIDs that meet the [W3C Trace Context Level 2 randomness requirements][W3CCONTEXTTRACEID].","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#random-trace-flag","meta":"SHOULD · Stable"},{"type":"requirement","id":"Requirements for `TraceIdRatioBased` sampler algorithm","text":"The sampling algorithm MUST be deterministic.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#requirements-for-traceidratiobased-sampler-algorithm","meta":"MUST · Stable"},{"type":"requirement","id":"Requirements for `TraceIdRatioBased` sampler algorithm","text":"A trace identified by a given TraceId is sampled or not independent of language, time, etc. To achieve this, implementations MUST use a deterministic hash of the TraceId when computing the sampling decision.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#requirements-for-traceidratiobased-sampler-algorithm","meta":"MUST · Stable"},{"type":"requirement","id":"Requirements for `TraceIdRatioBased` sampler algorithm","text":"A TraceIdRatioBased sampler with a given sampling probability MUST also sample all traces that any TraceIdRatioBased sampler with a lower sampling probability would sample.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#requirements-for-traceidratiobased-sampler-algorithm","meta":"MUST · Stable"},{"type":"requirement","id":"Root samplers set explicit randomness for non-random TraceIDs","text":"Root Samplers MAY insert an explicit randomness value into the OpenTelemetry TraceState value in cases where an explicit randomness value is not already set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#root-samplers-set-explicit-randomness-for-non-random-traceids","meta":"MAY · Stable"},{"type":"requirement","id":"Sampling","text":"Span Processor MUST receive only those spans which have this field set to true.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#sampling","meta":"MUST · Stable"},{"type":"requirement","id":"Sampling","text":"However, Span Exporter SHOULD NOT receive them unless the Sampled flag was also set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#sampling","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Sampling","text":"Span Exporters MUST receive those spans which have Sampled flag set to true and they SHOULD NOT receive the ones that do not.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#sampling","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Sampling","text":"The flag combination SampledFlag == true and IsRecording == false could cause gaps in the distributed trace, and because of this the OpenTelemetry SDK MUST NOT allow this combination.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#sampling","meta":"MUST NOT · Stable"},{"type":"requirement","id":"SDK Span creation","text":"When asked to create a Span, the SDK MUST act as if doing the following in order:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#sdk-span-creation","meta":"MUST · Stable"},{"type":"requirement","id":"SDK Span creation","text":"A non-recording span MAY be implemented using the same mechanism as when a Span is created without an SDK installed or as described in wrapping a SpanContext in a Span.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#sdk-span-creation","meta":"MAY · Stable"},{"type":"requirement","id":"Self-observability","text":"The Tracing SDK SHOULD support SDK self-observability.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#self-observability","meta":"SHOULD · Stable"},{"type":"requirement","id":"ShouldSample","text":"If the parent SpanContext contains a valid TraceId, they MUST always match.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shouldsample","meta":"MUST · Stable"},{"type":"requirement","id":"ShouldSample","text":"RECORD_ONLY - IsRecording will be true, but the Sampled flag MUST NOT be set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shouldsample","meta":"MUST NOT · Stable"},{"type":"requirement","id":"ShouldSample","text":"RECORDANDSAMPLE - IsRecording will be true and the Sampled flag MUST be set.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shouldsample","meta":"MUST · Stable"},{"type":"requirement","id":"ShouldSample","text":"If the sampler returns an empty Tracestate here, the Tracestate will be cleared, so samplers SHOULD normally return the passed-in Tracestate if they do not intend to change it.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shouldsample","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown MUST be called only once for each TracerProvider instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown","meta":"MUST · Stable"},{"type":"requirement","id":"Shutdown","text":"SDKs SHOULD return a valid no-op Tracer for these calls, if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown","text":"Shutdown MUST be implemented at least by invoking Shutdown within all internal processors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown","meta":"MUST · Stable"},{"type":"requirement","id":"Shutdown()","text":"Shutdown SHOULD be called only once for each SpanProcessor instance.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown()","text":"SDKs SHOULD ignore these calls gracefully, if possible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown()","text":"Shutdown SHOULD provide a way to let the caller know whether it succeeded, failed or timed out.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"Shutdown()","text":"Shutdown MUST include the effects of ForceFlush.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown-1","meta":"MUST · Stable"},{"type":"requirement","id":"Shutdown()","text":"Shutdown SHOULD complete or abort within some timeout.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#shutdown-1","meta":"SHOULD · Stable"},{"type":"requirement","id":"Simple processor","text":"The processor MUST synchronize calls to Span Exporter's Export to make sure that they are not invoked concurrently.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#simple-processor","meta":"MUST · Stable"},{"type":"requirement","id":"Span Exporter","text":"Each implementation MUST document the concurrency characteristics the SDK requires of the exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-exporter","meta":"MUST · Stable"},{"type":"requirement","id":"Span Limits","text":"Span attributes MUST adhere to the common rules of attribute limits.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-limits","meta":"MUST · Stable"},{"type":"requirement","id":"Span Limits","text":"SDK Spans MAY also discard links and events that would increase the number of elements of each collection beyond the configured limit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-limits","meta":"MAY · Stable"},{"type":"requirement","id":"Span Limits","text":"If the SDK implements the limits above it MUST provide a way to change these limits, via a configuration to the TracerProvider, by allowing users to configure individual limits like in the Java example bellow.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-limits","meta":"MUST · Stable"},{"type":"requirement","id":"Span Limits","text":"The name of the configuration options SHOULD be EventCountLimit and LinkCountLimit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-limits","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span Limits","text":"The options MAY be bundled in a class, which then SHOULD be called SpanLimits.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-limits","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span Limits","text":"Implementations MAY provide additional configuration such as AttributePerEventCountLimit and AttributePerLinkCountLimit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-limits","meta":"MAY · Stable"},{"type":"requirement","id":"Span Limits","text":"There SHOULD be a message printed in the SDK's log to indicate to the user that an attribute, event, or link was discarded due to such a limit.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-limits","meta":"SHOULD · Stable"},{"type":"requirement","id":"Span Limits","text":"To prevent excessive logging, the message MUST be printed at most once per span (i.e., not per discarded attribute, event, or link).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-limits","meta":"MUST · Stable"},{"type":"requirement","id":"Span processor","text":"SDK MUST allow to end each pipeline with individual exporter.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-processor","meta":"MUST · Stable"},{"type":"requirement","id":"Span processor","text":"SDK MUST allow users to implement and configure custom processors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#span-processor","meta":"MUST · Stable"},{"type":"requirement","id":"TraceID randomness","text":"For root span contexts, the SDK SHOULD implement the TraceID randomness requirements of the [W3C Trace Context Level 2][W3CCONTEXTTRACEID] Candidate Recommendation when generating TraceID values.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#traceid-randomness","meta":"SHOULD · Stable"},{"type":"requirement","id":"TraceIdRatioBased","text":"OpenTelemetry SDK implementors SHALL NOT remove or modify the behavior of the original TraceIdRatioBased sampler until at least January 1,","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#traceidratiobased","meta":"SHALL NOT · Stable"},{"type":"requirement","id":"TraceIdRatioBased","text":"The TraceIdRatioBased MUST ignore the parent SampledFlag.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#traceidratiobased","meta":"MUST · Stable"},{"type":"requirement","id":"TraceIdRatioBased","text":"Description MUST return a string of the form \"TraceIdRatioBased{RATIO}\" with RATIO replaced with the Sampler instance's trace sampling ratio represented as a decimal number.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#traceidratiobased","meta":"MUST · Stable"},{"type":"requirement","id":"TraceIdRatioBased","text":"The precision of the number SHOULD follow implementation language standards and SHOULD be high enough to identify when Samplers have different ratios.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#traceidratiobased","meta":"SHOULD · Stable"},{"type":"requirement","id":"Tracer","text":"Status: Development - Tracer MUST behave according to the TracerConfig computed during Tracer creation.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracer","meta":"MUST · Stable"},{"type":"requirement","id":"Tracer","text":"If the TracerProvider supports updating the TracerConfigurator, then upon update the Tracer MUST be updated to behave according to the new TracerConfig.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracer","meta":"MUST · Stable"},{"type":"requirement","id":"Tracer Creation","text":"It SHOULD only be possible to create Tracer instances through a TracerProvider (see API).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracer-creation","meta":"SHOULD · Stable"},{"type":"requirement","id":"Tracer Creation","text":"The TracerProvider MUST implement the Get a Tracer API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracer-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Tracer Creation","text":"The input provided by the user MUST be used to create an InstrumentationScope instance which is stored on the created Tracer.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracer-creation","meta":"MUST · Stable"},{"type":"requirement","id":"Tracer Creation","text":"Status: Development - The TracerProvider MUST compute the relevant TracerConfig using the configured TracerConfigurator, and create a Tracer whose behavior conforms to that TracerConfig.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracer-creation","meta":"MUST · Stable"},{"type":"requirement","id":"TracerConfig","text":"If not explicitly set, the enabled parameter SHOULD default to true ( i.e. Tracers are enabled by default).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracerconfig","meta":"SHOULD · Stable"},{"type":"requirement","id":"TracerConfig","text":"If a Tracer is disabled, it MUST behave equivalently to a No-op Tracer.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracerconfig","meta":"MUST · Stable"},{"type":"requirement","id":"TracerConfig","text":"The value of enabled MUST be used to resolve whether a Tracer is Enabled.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracerconfig","meta":"MUST · Stable"},{"type":"requirement","id":"TracerConfig","text":"However, the changes MUST be eventually visible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracerconfig","meta":"MUST · Stable"},{"type":"requirement","id":"TracerConfigurator","text":"The function MUST accept the following parameter:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracerconfigurator","meta":"MUST · Stable"},{"type":"requirement","id":"TracerConfigurator","text":"The function MUST return the relevant TracerConfig, or some signal indicating that the default TracerConfig should be used.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracerconfigurator","meta":"MUST · Stable"},{"type":"requirement","id":"TracerConfigurator","text":"This signal MAY be nil, null, empty, or an instance of the default TracerConfig depending on what is idiomatic in the language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracerconfigurator","meta":"MAY · Stable"},{"type":"requirement","id":"TracerConfigurator","text":"However, implementations MAY provide shorthand or helper functions to accommodate common use cases:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/sdk.md#tracerconfigurator","meta":"MAY · Stable"},{"type":"requirement","id":"Explicit randomness value `rv`","text":"Values of rv MUST be exactly 14 lower-case hexadecimal digits:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-handling.md#explicit-randomness-value-rv","meta":"MUST · Development"},{"type":"requirement","id":"Explicit randomness value `rv`","text":"Explicit randomness values SHOULD NOT be erased from the OpenTelemetry TraceState or modified once associated with a new TraceID, so that sampling decisions made using the explicit randomness value are consistent across signals.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-handling.md#explicit-randomness-value-rv","meta":"SHOULD NOT · Development"},{"type":"requirement","id":"Key","text":"Specific keys used by OTel concerns MUST be defined as part of the Specification, and hence it is forbidden to use any key that has not been defined in the Specification itself.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-handling.md#key","meta":"MUST · Development"},{"type":"requirement","id":"Setting values","text":"Set values MUST be either updated or added to the ot entry in TraceState, in order to preserve existing values belonging to other OTel concerns.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-handling.md#setting-values","meta":"MUST · Development"},{"type":"requirement","id":"TraceState Handling","text":"When setting TraceState values that are part of the OTel ecosystem, they MUST all be contained in a single entry using the ot key, with the value being a semicolon separated list of key-value pairs such as:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-handling.md#tracestate-handling","meta":"MUST · Development"},{"type":"requirement","id":"TraceState Handling","text":"The complete list length MUST NOT exceed 256 characters, as defined by the TraceState value section, and the used keys MUST be unique.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-handling.md#tracestate-handling","meta":"MUST NOT · Development"},{"type":"requirement","id":"TraceState Handling","text":"Instrumentation libraries and clients MUST NOT use this entry, and they MUST instead use their own entry.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-handling.md#tracestate-handling","meta":"MUST NOT · Development"},{"type":"requirement","id":"Value","text":"Although it has no maximum allowed length, it is recommended to use short values, as the entire list of key-values MUST NOT exceed 256 characters.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-handling.md#value","meta":"MUST NOT · Development"},{"type":"requirement","id":"Decision algorithm","text":"For this, two values MUST be present:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-probability-sampling.md#decision-algorithm","meta":"MUST · Development"},{"type":"requirement","id":"Migration to consistent probability samplers","text":"To avoid inconsistency during this transition, users SHOULD follow this guidance until all Trace SDKs in a system have been upgraded to modern Trace randomness requirements based on W3C Trace Context Level 2.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/trace/tracestate-probability-sampling.md#migration-to-consistent-probability-samplers","meta":"SHOULD · Development"},{"type":"requirement","id":"SDK Implementors","text":"Maintainers of the official OpenTelemetry SDKs as well as maintainers of alternative SDKs MUST keep their implementations up to date and compatible with the latest version of the OpenTelemetry API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/upgrading.md#sdk-implementors","meta":"MUST · Unspecified"},{"type":"requirement","id":"API Stability","text":"Backward-incompatible changes to API packages MUST NOT be made unless the major version number is incremented.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#api-stability","meta":"MUST NOT · Stable"},{"type":"requirement","id":"API Stability","text":"All existing API calls MUST continue to compile and function against all future minor versions of the same major version.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#api-stability","meta":"MUST · Stable"},{"type":"requirement","id":"API Stability","text":"Languages which ship binary artifacts SHOULD offer ABI compatibility for API packages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#api-stability","meta":"SHOULD · Stable"},{"type":"requirement","id":"API support","text":"Major versions of the API MUST be supported for a minimum of three years after the release of the next major API version.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#api-support","meta":"MUST · Stable"},{"type":"requirement","id":"API support","text":"API stability, as defined above, MUST be maintained.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#api-support","meta":"MUST · Stable"},{"type":"requirement","id":"API support","text":"Bug and security fixes MUST be backported.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#api-support","meta":"MUST · Stable"},{"type":"requirement","id":"API support","text":"Additional feature development is NOT RECOMMENDED.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#api-support","meta":"NOT RECOMMENDED · Stable"},{"type":"requirement","id":"API support","text":"Contrib packages available when the API is versioned MUST continue to be maintained for the duration of LTS.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#api-support","meta":"MUST · Stable"},{"type":"requirement","id":"Contrib Stability","text":"Plugins, instrumentation, and other contrib packages SHOULD be kept up to date and compatible with the latest versions of the API, SDK, and Semantic Conventions.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#contrib-stability","meta":"SHOULD · Stable"},{"type":"requirement","id":"Contrib Stability","text":"If a release of the API, SDK, or Semantic Conventions contains changes which are relevant to a contrib package, that package SHOULD be updated and released in a timely fashion.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#contrib-stability","meta":"SHOULD · Stable"},{"type":"requirement","id":"Contrib Stability","text":"Public portions of contrib packages (constructors, configuration, interfaces) SHOULD remain backward compatible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#contrib-stability","meta":"SHOULD · Stable"},{"type":"requirement","id":"Contrib Stability","text":"Languages which ship binary artifacts SHOULD offer ABI compatibility for contrib packages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#contrib-stability","meta":"SHOULD · Stable"},{"type":"requirement","id":"Contrib Stability","text":"Exception: Contrib packages MAY break stability when a required downstream dependency breaks stability.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#contrib-stability","meta":"MAY · Stable"},{"type":"requirement","id":"Contrib Stability","text":"However, it is strongly RECOMMENDED that older contrib packages remain stable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#contrib-stability","meta":"RECOMMENDED · Stable"},{"type":"requirement","id":"Contrib Stability","text":"A new, incompatible version of an integration SHOULD be released as a separate contrib package, rather than break the existing contrib package.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#contrib-stability","meta":"SHOULD · Stable"},{"type":"requirement","id":"Deprecated","text":"Signals MAY eventually be replaced.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#deprecated","meta":"MAY · Stable"},{"type":"requirement","id":"Deprecated","text":"Signals MUST NOT be marked as deprecated unless the replacement is stable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#deprecated","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Deprecated","text":"Deprecated code MUST abide by the same support guarantees as stable code.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#deprecated","meta":"MUST · Stable"},{"type":"requirement","id":"Design goals","text":"It MUST always be possible to upgrade to the latest minor version of the OpenTelemetry SDK, without creating compilation or runtime errors.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#design-goals","meta":"MUST · Stable"},{"type":"requirement","id":"Design goals","text":"Code written against older versions of the API MUST work with all newer versions of the API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#design-goals","meta":"MUST · Stable"},{"type":"requirement","id":"Design goals","text":"This means that an implementation wishing to release stable tracing today MUST ensure that in-development metrics are factored out in such a way that breaking changes to metrics API do not destabilize the trace API packages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#design-goals","meta":"MUST · Stable"},{"type":"requirement","id":"Development","text":"While signals are in development, breaking changes and performance issues MAY occur.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#development","meta":"MAY · Stable"},{"type":"requirement","id":"Development","text":"Components SHOULD NOT be expected to be feature-complete.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#development","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Development","text":"In some cases, the signal in Development MAY be discarded and removed entirely.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#development","meta":"MAY · Stable"},{"type":"requirement","id":"Development","text":"Long-term dependencies SHOULD NOT be taken against signals in Development.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#development","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"Development","text":"OpenTelemetry clients MUST be designed in a manner that allows signals in Development to be created without breaking the stability guarantees of existing signals.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#development","meta":"MUST · Stable"},{"type":"requirement","id":"Development","text":"OpenTelemetry clients MUST NOT be designed in a manner that breaks existing users when a signal transitions from Development to Stable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#development","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Development","text":"Terms which denote stability, such as \"development\", MUST NOT be used as part of a directory or import name.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#development","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Development","text":"Package version numbers MAY include a suffix, such as -alpha, -beta, -rc, or -development, to differentiate packages in different statuses.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#development","meta":"MAY · Stable"},{"type":"requirement","id":"Extending API/SDK abstractions","text":"An existing API/SDK call MAY be extended without incrementing the major version number if the particular language allows to do it in a backward-compatible manner.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#extending-apisdk-abstractions","meta":"MAY · Stable"},{"type":"requirement","id":"Extending API/SDK abstractions","text":"Similarly, existing SDK plugin interfaces MAY be extended with new methods without incrementing the major version number if the particular language allows to do it in a backward-compatible manner (e.g. by providing default implementations).","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#extending-apisdk-abstractions","meta":"MAY · Stable"},{"type":"requirement","id":"Extending API/SDK abstractions","text":"Hereby, backwards-compatible means that end user's code that implements the plugin interfaces MUST continue to be possible to use with newer versions of the SDK without making changes to the end user's code.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#extending-apisdk-abstractions","meta":"MUST · Stable"},{"type":"requirement","id":"Extending API/SDK abstractions","text":"For languages that commonly share code via binary artifacts, e.g. Java, backwards-compatible means that end user's code that implements plugin interfaces MUST continue to be possible to use with newer minor or patch versions without recomp…","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#extending-apisdk-abstractions","meta":"MUST · Stable"},{"type":"requirement","id":"Extending API/SDK abstractions","text":"If this backward compatible addition of methods to interfaces is not possible for a language, the language maintainers SHOULD still implement the addition using backwards-compatible workarounds without incrementing the major version.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#extending-apisdk-abstractions","meta":"SHOULD · Stable"},{"type":"requirement","id":"Extending API/SDK abstractions","text":"Additionally, a Stable signal's API/SDK MAY be extended by adding new methods to existing Stable APIs.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#extending-apisdk-abstractions","meta":"MAY · Stable"},{"type":"requirement","id":"Extending API/SDK abstractions","text":"Language implementations SHOULD have a mechanism to do so, such that:","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#extending-apisdk-abstractions","meta":"SHOULD · Stable"},{"type":"requirement","id":"Extending API/SDK abstractions","text":"New in Development methods SHOULD require opt-in, so that the user is made aware of the risk associated with using the development API.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#extending-apisdk-abstractions","meta":"SHOULD · Stable"},{"type":"requirement","id":"Extending API/SDK abstractions","text":"Language maintainers SHOULD choose the idiomatic way for their language.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#extending-apisdk-abstractions","meta":"SHOULD · Stable"},{"type":"requirement","id":"Language version support","text":"Each language implementation SHOULD define how the removal of a supported language/runtime version affects its versioning.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#language-version-support","meta":"SHOULD · Stable"},{"type":"requirement","id":"Language version support","text":"As a rule of thumb, it SHOULD follow the conventions in the given ecosystem.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#language-version-support","meta":"SHOULD · Stable"},{"type":"requirement","id":"Major version bump","text":"Major version bumps MUST occur when there is a breaking change to a stable interface or a deprecated signal is removed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#major-version-bump","meta":"MUST · Stable"},{"type":"requirement","id":"Major version bump","text":"Major version bumps SHOULD NOT occur for changes which do not result in a drop in support of some form.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#major-version-bump","meta":"SHOULD NOT · Stable"},{"type":"requirement","id":"OpenTelemetry GA","text":"A stable version of both tracing and metrics MUST be released in at least four languages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#opentelemetry-ga","meta":"MUST · Stable"},{"type":"requirement","id":"OpenTelemetry GA","text":"CI/CD, performance, and integration tests MUST be implemented for these languages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#opentelemetry-ga","meta":"MUST · Stable"},{"type":"requirement","id":"Patch version bump","text":"Security and bug fixes MAY only be applied to the latest minor version.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#patch-version-bump","meta":"MAY · Stable"},{"type":"requirement","id":"Removed","text":"The release MUST make a major version bump when this happens.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#removed","meta":"MUST · Stable"},{"type":"requirement","id":"SDK Stability","text":"Public portions of SDK packages MUST remain backward compatible.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#sdk-stability","meta":"MUST · Stable"},{"type":"requirement","id":"SDK Stability","text":"Languages which ship binary artifacts SHOULD offer ABI compatibility for SDK packages.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#sdk-stability","meta":"SHOULD · Stable"},{"type":"requirement","id":"Semantic Conventions Stability","text":"Changes to telemetry produced by OpenTelemetry instrumentation SHOULD avoid breaking analysis tools, such as dashboards and alerts.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#semantic-conventions-stability","meta":"SHOULD · Stable"},{"type":"requirement","id":"Semantic Conventions Stability","text":"The list of telemetry fields which are covered by stability guarantees MAY be extended.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#semantic-conventions-stability","meta":"MAY · Stable"},{"type":"requirement","id":"Semantic Conventions Stability","text":"All such changes MUST be described in the OpenTelemetry Schema File Format and published in this repository.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#semantic-conventions-stability","meta":"MUST · Stable"},{"type":"requirement","id":"Semantic Conventions Stability","text":"These resource attributes MUST NOT be ever changed.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#semantic-conventions-stability","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Semantic Conventions Stability","text":"Other types of changes MAY be introduced in the future versions of this specification.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#semantic-conventions-stability","meta":"MAY · Stable"},{"type":"requirement","id":"Stable","text":"Once a signal in Development has gone through rigorous testing, it MAY transition to Stable.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#stable","meta":"MAY · Stable"},{"type":"requirement","id":"Stable","text":"Long-term dependencies MAY now be taken against this signal.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#stable","meta":"MAY · Stable"},{"type":"requirement","id":"Stable","text":"All signal components MAY become stable together, or MAY transition to stability component-by-component.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#stable","meta":"MAY · Stable"},{"type":"requirement","id":"Stable","text":"The API MUST become stable before the other components.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#stable","meta":"MUST · Stable"},{"type":"requirement","id":"Stable","text":"Once a signal component is marked as stable, the following rules MUST apply until the end of that signal’s existence.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#stable","meta":"MUST · Stable"},{"type":"requirement","id":"Version numbers","text":"OpenTelemetry clients MUST follow Semantic Versioning 2.0.0, with the following clarifications.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MUST · Stable"},{"type":"requirement","id":"Version numbers","text":"For the purposes of versioning, all code within a component MUST treated as if it were part of a single package, and versioned with the same version number, except for Contrib, which may be a collection of packages versioned separately.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MUST · Stable"},{"type":"requirement","id":"Version numbers","text":"All stable API packages MUST version together, across all signals.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MUST · Stable"},{"type":"requirement","id":"Version numbers","text":"Stable signals MUST NOT have separate version numbers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Version numbers","text":"SDK packages for all signals MUST version together, across all signals.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MUST · Stable"},{"type":"requirement","id":"Version numbers","text":"Signals MUST NOT have separate version numbers.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MUST NOT · Stable"},{"type":"requirement","id":"Version numbers","text":"Each contrib package MAY have its own version number.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MAY · Stable"},{"type":"requirement","id":"Version numbers","text":"For example, the latest version of opentelemetry-python-api MAY be at v1.2.3 while the latest version of opentelemetry-python-sdk is at v2.3.1.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MAY · Stable"},{"type":"requirement","id":"Version numbers","text":"In these cases, signals in Development MAY version independently from stable signals, in order to retain a 0.X version number.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MAY · Stable"},{"type":"requirement","id":"Version numbers","text":"When a signal becomes stable, the version MUST be bumped to match the other stable signals in the release.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#version-numbers","meta":"MUST · Stable"},{"type":"requirement","id":"Versioning and stability for OpenTelemetry clients","text":"Each language implementation MUST take these versioning and stability requirements, and produce a language-specific document which details how these requirements will be met.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#versioning-and-stability-for-opentelemetry-clients","meta":"MUST · Stable"},{"type":"requirement","id":"Versioning and stability for OpenTelemetry clients","text":"This document MUST be placed in the root of each repository and named VERSIONING or VERSIONING.md.","url":"https://github.com/open-telemetry/opentelemetry-specification/blob/v1.60.0/specification/versioning-and-stability.md#versioning-and-stability-for-opentelemetry-clients","meta":"MUST · Stable"},{"type":"requirement","id":"All Other Responses","text":"If the server disconnects without returning a response, the client SHOULD retry and send the same request.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#all-other-responses","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"All Other Responses","text":"The client SHOULD implement an exponential backoff strategy between retries to avoid overwhelming the server.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#all-other-responses","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Bad Data","text":"If the processing of the request fails because the request contains data that cannot be decoded or is otherwise invalid and such failure is permanent, then the server MUST respond with HTTP 400 Bad Request.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#bad-data","meta":"MUST · Unspecified"},{"type":"requirement","id":"Bad Data","text":"The Status.details field in the response SHOULD contain a BadRequest that describes the bad data.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#bad-data","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Bad Data","text":"The client MUST NOT retry the request when it receives HTTP 400 Bad Request response.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#bad-data","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Binary Protobuf Encoding","text":"The client and the server MUST set \"Content-Type: application/x-protobuf\" request and response headers when sending binary Protobuf encoded payload.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#binary-protobuf-encoding","meta":"MUST · Unspecified"},{"type":"requirement","id":"Empty Telemetry Envelopes","text":"Given that, senders SHOULD NOT create empty envelopes (OTLP payloads that contain zero spans, zero metric points or zero log records), receivers MAY ignore empty envelopes, and implementations that receive and send (forward) OTLP payloads …","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#empty-telemetry-envelopes","meta":"SHOULD NOT · Unspecified"},{"type":"requirement","id":"Failures","text":"Retryable errors indicate that telemetry data processing failed, and the client SHOULD record the error and may retry exporting the same data.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Failures","text":"Non-retryable errors indicate that telemetry data processing failed, and the client MUST NOT retry sending the same telemetry data.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Failures","text":"The client MUST drop the telemetry data.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"MUST · Unspecified"},{"type":"requirement","id":"Failures","text":"The client SHOULD maintain a counter of such dropped data.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Failures","text":"The server SHOULD indicate retryable errors using code Unavailable and MAY supply additional details via status using RetryInfo.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Failures","text":"To indicate non-retryable errors, the server is recommended to use code InvalidArgument and MAY supply additional details via status using BadRequest.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"MAY · Unspecified"},{"type":"requirement","id":"Failures","text":"The server MAY use other gRPC codes to indicate retryable and non-retryable errors if those other gRPC codes are more appropriate for a particular erroneous situation.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"MAY · Unspecified"},{"type":"requirement","id":"Failures","text":"The client SHOULD interpret gRPC status codes as retryable or non-retryable according to the following table:","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Failures","text":"When retrying, the client SHOULD implement an exponential backoff strategy.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Failures","text":"The client SHOULD interpret RESOURCEEXHAUSTED code as retryable only if the server signals that the recovery from resource exhaustion is possible.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Failures","text":"If no such status is returned, then the RESOURCEEXHAUSTED code SHOULD be treated as non-retryable.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Failures","text":"If the processing of the request fails, the server MUST respond with appropriate HTTP 4xx or HTTP 5xx status code.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures-1","meta":"MUST · Unspecified"},{"type":"requirement","id":"Failures","text":"The response body for all HTTP 4xx and HTTP 5xx responses MUST be a Protobuf-encoded Status message that describes the problem.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures-1","meta":"MUST · Unspecified"},{"type":"requirement","id":"Failures","text":"This specification does not use Status.code field and the server MAY omit Status.code field.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures-1","meta":"MAY · Unspecified"},{"type":"requirement","id":"Failures","text":"The clients are not expected to alter their behavior based on Status.code field but MAY record it for troubleshooting purposes.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures-1","meta":"MAY · Unspecified"},{"type":"requirement","id":"Failures","text":"The Status.message field SHOULD contain a developer-facing error message as defined in Status message schema.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures-1","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Failures","text":"The server MAY include Status.details field with additional details.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures-1","meta":"MAY · Unspecified"},{"type":"requirement","id":"Failures","text":"The server SHOULD use HTTP response status codes to indicate retryable and non-retryable errors for a particular erroneous situation.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures-1","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Failures","text":"The client SHOULD honour HTTP response status codes as retryable or non-retryable.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#failures-1","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Full Success","text":"If the server receives an empty request (a request that does not carry any telemetry data) the server SHOULD respond with success.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#full-success","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Full Success","text":"On success, the server response MUST be a Export\\<signal>ServiceResponse message (ExportTraceServiceResponse for traces, ExportMetricsServiceResponse for metrics, ExportLogsServiceResponse for logs and ExportProfilesServiceResponse for pro…","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#full-success","meta":"MUST · Unspecified"},{"type":"requirement","id":"Full Success","text":"The server MUST leave the partial_success field unset in case of a successful response.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#full-success","meta":"MUST · Unspecified"},{"type":"requirement","id":"Full Success","text":"If the server receives an empty request (a request that does not carry any telemetry data) the server SHOULD respond with success.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#full-success-1","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Full Success","text":"On success, the server MUST respond with HTTP 200 OK.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#full-success-1","meta":"MUST · Unspecified"},{"type":"requirement","id":"Full Success","text":"The response body MUST be a Protobuf-encoded Export\\<signal>ServiceResponse message (ExportTraceServiceResponse for traces, ExportMetricsServiceResponse for metrics, ExportLogsServiceResponse for logs and ExportProfilesServiceResponse for …","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#full-success-1","meta":"MUST · Unspecified"},{"type":"requirement","id":"Full Success","text":"The server MUST leave the partial_success field unset in case of a successful response.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#full-success-1","meta":"MUST · Unspecified"},{"type":"requirement","id":"Future Versions and Interoperability","text":"When possible, the interoperability MUST be ensured between all versions of OTLP that are not declared obsolete.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#future-versions-and-interoperability","meta":"MUST · Unspecified"},{"type":"requirement","id":"Future Versions and Interoperability","text":"Such capabilities SHOULD be discovered by client and server implementations after establishing the underlying transport.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#future-versions-and-interoperability","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Future Versions and Interoperability","text":"The exact discovery mechanism SHOULD be described in future OTEPs, which define the new capabilities and typically can be implemented by making a discovery request/response message exchange from the client to server.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#future-versions-and-interoperability","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Future Versions and Interoperability","text":"The implementation which supports a new, optional capability MUST adjust its behavior to match the expectation of a peer that does not support a particular capability.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#future-versions-and-interoperability","meta":"MUST · Unspecified"},{"type":"requirement","id":"JSON Protobuf Encoding","text":"Values of enum fields MUST be encoded as integer values.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#json-protobuf-encoding","meta":"MUST · Unspecified"},{"type":"requirement","id":"JSON Protobuf Encoding","text":"Unlike the standard Protobuf JSON Mapping, which allows values of enum fields to be encoded as either integer values or as enum name strings, only integer enum values are allowed in OTLP JSON Protobuf Encoding; the enum name strings MUST N…","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#json-protobuf-encoding","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"JSON Protobuf Encoding","text":"OTLP/JSON receivers MUST ignore message fields with unknown names and MUST unmarshal the message as if the unknown field was not present in the payload.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#json-protobuf-encoding","meta":"MUST · Unspecified"},{"type":"requirement","id":"JSON Protobuf Encoding","text":"The client and the server MUST set \"Content-Type: application/json\" request and response headers when sending JSON Protobuf encoded payload.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#json-protobuf-encoding","meta":"MUST · Unspecified"},{"type":"requirement","id":"Multi-Destination Exporting","text":"In such a situation, the client SHOULD implement queuing, acknowledgment handling, and retrying logic per destination.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#multi-destination-exporting","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Multi-Destination Exporting","text":"The queues SHOULD reference shared, immutable data to be sent, thus minimizing the memory overhead caused by having multiple queues.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#multi-destination-exporting","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Concurrent Requests","text":"After sending the request the client MAY wait until the response is received from the server.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-concurrent-requests","meta":"MAY · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Concurrent Requests","text":"The implementations that need to achieve high throughput SHOULD support concurrent Unary calls to achieve higher throughput.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-concurrent-requests","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Concurrent Requests","text":"The client SHOULD send new requests without waiting for the response to the earlier sent requests, essentially creating a pipeline of requests that are currently in flight that are not acknowledged.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-concurrent-requests","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Concurrent Requests","text":"The number of concurrent requests SHOULD be configurable.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-concurrent-requests","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Concurrent Requests","text":"The client implementation SHOULD expose an option to turn on and off the waiting during a shutdown.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-concurrent-requests","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Concurrent Requests","text":"If the client is unable to deliver a certain request (e.g. a timer expired while waiting for acknowledgements) the client SHOULD record the fact that the data was not delivered.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-concurrent-requests","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Request","text":"The server MUST enforce a message size limit when receiving the request, including after decompression, to mitigate possible excessive memory usage caused by a misconfigured or malicious client sending an oversized request.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-request","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Request","text":"However, it is RECOMMENDED to use 64 MiB as the default limit.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-request","meta":"RECOMMENDED · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Request","text":"Implementations SHOULD allow this limit to be configured.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-request","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Request","text":"If the limit is exceeded, the gRPC server implementations MUST report a RESOURCE_EXHAUSTED code as a non-retryable error.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-request","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Request","text":"The client SHOULD limit the size of the request message, including before compression, to avoid overwhelming the server.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-request","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Request","text":"It is RECOMMENDED to use 64 MiB as the default limit.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-request","meta":"RECOMMENDED · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Request","text":"If the limit is exceeded, the client MUST NOT make the request and SHOULD record the fact that the request was discarded.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-request","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Response","text":"The response MUST be the appropriate message (see below for the specific message to use in the Full Success, Partial Success and Failure cases).","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Response","text":"The client MUST enforce a message size limit when receiving the response, including after decompression, to mitigate possible excessive memory usage caused by a misconfigured or malicious server. gRPC client implementations typically enfor…","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Response","text":"Implementations SHOULD allow this limit to be configured.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-response","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Response","text":"If the limit is exceeded, the client MUST treat the response as a non-retryable error.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Response","text":"The server MUST limit the size of the response message, including before compression, to avoid overwhelming the client.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Response","text":"It is RECOMMENDED to use 4 MiB as the default limit.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-response","meta":"RECOMMENDED · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Response","text":"For a Partial Success response that would otherwise exceed the limit, the server SHOULD reduce the response size without changing response semantics if it is possible and practical.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-response","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Response","text":"To do so, the server MAY decrease the verbosity of optional diagnostic fields, such as partialsuccess.errormessage, or omit optional diagnostic fields.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-response","meta":"MAY · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Response","text":"If the response still cannot fit within the limit, the server MUST fail the request with the RESOURCE_EXHAUSTED code as a non-retryable error.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Throttling","text":"If the server is unable to keep up with the pace of data it receives from the client then it SHOULD signal that fact to the client.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-throttling","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Throttling","text":"The client MUST then throttle itself to avoid overwhelming the server.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-throttling","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Throttling","text":"To signal backpressure when using gRPC transport, the server SHOULD return an error with code Unavailable and MAY supply additional details via status using RetryInfo.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-throttling","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Throttling","text":"When the client receives this signal, it SHOULD follow the recommendations outlined in documentation for RetryInfo:","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-throttling","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/gRPC Throttling","text":"The server SHOULD choose a retrydelay value that is big enough to give the server time to recover yet is not too big to cause the client to drop data while being throttled.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlpgrpc-throttling","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP","text":"Implementations MAY use HTTP/1.1 or HTTP/2 transports.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp","meta":"MAY · Unspecified"},{"type":"requirement","id":"OTLP/HTTP","text":"Implementations that use HTTP/2 transport SHOULD fallback to HTTP/1.1 transport if HTTP/2 connection cannot be established.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Concurrent Requests","text":"To achieve higher total throughput, the client MAY send requests using several parallel HTTP connections.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-concurrent-requests","meta":"MAY · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Concurrent Requests","text":"In that case, the maximum number of parallel connections SHOULD be configurable.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-concurrent-requests","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Connection","text":"If the client cannot connect to the server, the client SHOULD retry the connection using an exponential backoff strategy between retries.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-connection","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Connection","text":"The client SHOULD keep the connection alive between requests.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-connection","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Connection","text":"Server implementations SHOULD accept OTLP/HTTP with binary-encoded Protobuf payload and OTLP/HTTP with JSON-encoded Protobuf payload requests on the same port and multiplex the requests to the corresponding payload decoder based on the \"Co…","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-connection","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Connection","text":"Server implementations MAY accept OTLP/gRPC and OTLP/HTTP requests on the same port and multiplex the connections to the corresponding transport handler based on the \"Content-Type\" request header.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-connection","meta":"MAY · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Request","text":"The client MAY gzip the content and in that case MUST include \"Content-Encoding: gzip\" request header.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-request","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Request","text":"The client MAY include \"Accept-Encoding: gzip\" request header if it can receive gzip-encoded responses.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-request","meta":"MAY · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Request","text":"Non-default URL paths for requests MAY be configured on the client and server sides.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-request","meta":"MAY · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Request","text":"The server MUST limit the size of the request body when parsing it, including after decompression, to mitigate possible excessive memory usage caused by a misconfigured or malicious client sending an oversized request.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-request","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Request","text":"It is RECOMMENDED to use 64 MiB as the default limit.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-request","meta":"RECOMMENDED · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Request","text":"Implementations SHOULD allow this limit to be configured.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-request","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Request","text":"If the limit is exceeded, the server MUST respond with HTTP 413 Content Too Large.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-request","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Request","text":"The client SHOULD limit the size of the request body, including before compression, to avoid overwhelming the server.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-request","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Request","text":"If the limit is exceeded, the client MUST NOT make the request and SHOULD record the fact that the request was discarded.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-request","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"The response body MUST be the appropriate serialized Protobuf message (see below for the specific message to use in the Full Success, Partial Success and Failure cases).","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"The client MUST limit the size of the response body when parsing it, including after decompression, to mitigate possible excessive memory usage caused by a misconfigured or malicious server.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"It is RECOMMENDED to use 4 MiB as the default limit.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"RECOMMENDED · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"Implementations SHOULD allow this limit to be configured.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"If the limit is exceeded, the client MUST treat the response as a non-retryable error and SHOULD record the fact that the response was discarded.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"The server MUST limit the size of the response body, including before compression, to avoid overwhelming the client.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"For a Partial Success response that would otherwise exceed the limit, the server SHOULD reduce the response size without changing response semantics if it is possible and practical.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"To do so, the server MAY decrease the verbosity of optional diagnostic fields, such as partialsuccess.errormessage, or omit optional diagnostic fields.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MAY · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"If the response still cannot fit within the limit, the server MUST fail the request with HTTP 500 Internal Server Error.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"The server MUST set \"Content-Type: application/x-protobuf\" header if the response body is binary-encoded Protobuf payload.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"The server MUST set \"Content-Type: application/json\" if the response is JSON-encoded Protobuf payload.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"The server MUST use the same \"Content-Type\" in the response as it received in the request.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MUST · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Response","text":"If the request header \"Accept-Encoding: gzip\" is present in the request the server MAY gzip-encode the response and set \"Content-Encoding: gzip\" response header.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-response","meta":"MAY · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Throttling","text":"If the server receives more requests than the client is allowed or the server is overloaded, the server SHOULD respond with HTTP 429 Too Many Requests or HTTP 503 Service Unavailable and MAY include \"Retry-After\" header to indicate how lon…","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-throttling","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Throttling","text":"The client SHOULD honour the value specified in the \"Retry-After\" header if it is present.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-throttling","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"OTLP/HTTP Throttling","text":"If the client receives a retryable error code (see table above) and the \"Retry-After\" header is not present in the response, then the client SHOULD implement an exponential backoff strategy between retries.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#otlphttp-throttling","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Partial Success","text":"If the request is only partially accepted (i.e. when the server accepts only parts of the data and rejects the rest), the server response MUST be the same Export\\<signal>ServiceResponse message as in the Full Success case.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success","meta":"MUST · Unspecified"},{"type":"requirement","id":"Partial Success","text":"Additionally, the server MUST initialize the partialsuccess field (ExportTracePartialSuccess message for traces, ExportMetricsPartialSuccess message for metrics, ExportLogsPartialSuccess message for logs and ExportProfilesPartialSuccess fo…","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success","meta":"MUST · Unspecified"},{"type":"requirement","id":"Partial Success","text":"The server SHOULD populate the error_message field with a human-readable error message in English.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Partial Success","text":"Servers MAY also use the partialsuccess field to convey warnings/suggestions to clients even when the server fully accepts the request.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success","meta":"MAY · Unspecified"},{"type":"requirement","id":"Partial Success","text":"In such cases, the rejected<signal> field MUST have a value of 0, and the error_message field MUST be non-empty.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success","meta":"MUST · Unspecified"},{"type":"requirement","id":"Partial Success","text":"The client MUST NOT retry the request when it receives a partial success response where the partial_success is populated.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Partial Success","text":"If the request is only partially accepted (i.e. when the server accepts only parts of the data and rejects the rest), the server MUST respond with HTTP 200 OK.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success-1","meta":"MUST · Unspecified"},{"type":"requirement","id":"Partial Success","text":"The response body MUST be the same Export\\<signal>ServiceResponse message as in the Full Success case.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success-1","meta":"MUST · Unspecified"},{"type":"requirement","id":"Partial Success","text":"Additionally, the server MUST initialize the partialsuccess field (ExportTracePartialSuccess message for traces, ExportMetricsPartialSuccess message for metrics, ExportLogsPartialSuccess message for logs and ExportProfilesPartialSuccess fo…","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success-1","meta":"MUST · Unspecified"},{"type":"requirement","id":"Partial Success","text":"The server SHOULD populate the error_message field with a human-readable error message in English.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success-1","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Partial Success","text":"Servers MAY also use the partialsuccess field to convey warnings/suggestions to clients even when it fully accepts the request.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success-1","meta":"MAY · Unspecified"},{"type":"requirement","id":"Partial Success","text":"In such cases, the rejected<signal> field MUST have a value of 0, and the error_message field MUST be non-empty.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success-1","meta":"MUST · Unspecified"},{"type":"requirement","id":"Partial Success","text":"The client MUST NOT retry the request when it receives a partial success response where the partial_success is populated.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#partial-success-1","meta":"MUST NOT · Unspecified"},{"type":"requirement","id":"Protocol Details","text":"All server components MUST support the following transport compression options:","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#protocol-details","meta":"MUST · Unspecified"},{"type":"requirement","id":"Retryable Response Codes","text":"The requests that receive a response status code listed in following table SHOULD be retried.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#retryable-response-codes","meta":"SHOULD · Unspecified"},{"type":"requirement","id":"Retryable Response Codes","text":"All other 4xx or 5xx response status codes MUST NOT be retried.","url":"https://github.com/open-telemetry/opentelemetry-proto/blob/v1.11.0/docs/specification.md#retryable-response-codes","meta":"MUST NOT · Unspecified"},{"type":"otlp","id":"opentelemetry.proto.collector.logs.v1.ExportLogsPartialSuccess","text":"","url":"/otlp","meta":"message · collector/logs/v1/logs_service"},{"type":"otlp","id":"opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest","text":"","url":"/otlp","meta":"message · collector/logs/v1/logs_service"},{"type":"otlp","id":"opentelemetry.proto.collector.logs.v1.ExportLogsServiceResponse","text":"","url":"/otlp","meta":"message · collector/logs/v1/logs_service"},{"type":"otlp","id":"opentelemetry.proto.collector.logs.v1.LogsService","text":"Service that can be used to push logs between one Application instrumented with OpenTelemetry and an collector, or between an collector and a central collector…","url":"/otlp","meta":"service · collector/logs/v1/logs_service"},{"type":"otlp","id":"opentelemetry.proto.collector.metrics.v1.ExportMetricsPartialSuccess","text":"","url":"/otlp","meta":"message · collector/metrics/v1/metrics_service"},{"type":"otlp","id":"opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest","text":"","url":"/otlp","meta":"message · collector/metrics/v1/metrics_service"},{"type":"otlp","id":"opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse","text":"","url":"/otlp","meta":"message · collector/metrics/v1/metrics_service"},{"type":"otlp","id":"opentelemetry.proto.collector.metrics.v1.MetricsService","text":"Service that can be used to push metrics between one Application instrumented with OpenTelemetry and a collector, or between a collector and a central collecto…","url":"/otlp","meta":"service · collector/metrics/v1/metrics_service"},{"type":"otlp","id":"opentelemetry.proto.collector.profiles.v1development.ExportProfilesPartialSuccess","text":"Status: [Alpha]","url":"/otlp","meta":"message · collector/profiles/v1development/profiles_service"},{"type":"otlp","id":"opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceRequest","text":"Status: [Alpha]","url":"/otlp","meta":"message · collector/profiles/v1development/profiles_service"},{"type":"otlp","id":"opentelemetry.proto.collector.profiles.v1development.ExportProfilesServiceResponse","text":"Status: [Alpha]","url":"/otlp","meta":"message · collector/profiles/v1development/profiles_service"},{"type":"otlp","id":"opentelemetry.proto.collector.profiles.v1development.ProfilesService","text":"Service that can be used to push profiles between one Application instrumented with OpenTelemetry and a collector, or between a collector and a central collect…","url":"/otlp","meta":"service · collector/profiles/v1development/profiles_service"},{"type":"otlp","id":"opentelemetry.proto.collector.trace.v1.ExportTracePartialSuccess","text":"","url":"/otlp","meta":"message · collector/trace/v1/trace_service"},{"type":"otlp","id":"opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest","text":"","url":"/otlp","meta":"message · collector/trace/v1/trace_service"},{"type":"otlp","id":"opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse","text":"","url":"/otlp","meta":"message · collector/trace/v1/trace_service"},{"type":"otlp","id":"opentelemetry.proto.collector.trace.v1.TraceService","text":"Service that can be used to push spans between one Application instrumented with OpenTelemetry and a collector, or between a collector and a central collector …","url":"/otlp","meta":"service · collector/trace/v1/trace_service"},{"type":"otlp","id":"opentelemetry.proto.common.v1.AnyValue","text":"Represents any type of attribute value. AnyValue may contain a primitive value such as a string or integer or it may contain an arbitrary nested object contain…","url":"/otlp","meta":"message · common/v1/common"},{"type":"otlp","id":"opentelemetry.proto.common.v1.ArrayValue","text":"ArrayValue is a list of AnyValue messages. We need ArrayValue as a message since oneof in AnyValue does not allow repeated fields.","url":"/otlp","meta":"message · common/v1/common"},{"type":"otlp","id":"opentelemetry.proto.common.v1.EntityRef","text":"A reference to an Entity. Entity represents an object of interest associated with produced telemetry: e.g spans, metrics, profiles, or logs. Status: [Developme…","url":"/otlp","meta":"message · common/v1/common"},{"type":"otlp","id":"opentelemetry.proto.common.v1.InstrumentationScope","text":"InstrumentationScope is a message representing the instrumentation scope information such as the fully qualified name and version.","url":"/otlp","meta":"message · common/v1/common"},{"type":"otlp","id":"opentelemetry.proto.common.v1.KeyValue","text":"Represents a key-value pair that is used to store Span attributes, Link attributes, etc.","url":"/otlp","meta":"message · common/v1/common"},{"type":"otlp","id":"opentelemetry.proto.common.v1.KeyValueList","text":"KeyValueList is a list of KeyValue messages. We need KeyValueList as a message since oneof in AnyValue does not allow repeated fields. Everywhere else where we…","url":"/otlp","meta":"message · common/v1/common"},{"type":"otlp","id":"opentelemetry.proto.logs.v1.LogRecord","text":"A log record according to OpenTelemetry Log Data Model: https://github.com/open-telemetry/oteps/blob/main/text/logs/0097-log-data-model.md","url":"/otlp","meta":"message · logs/v1/logs"},{"type":"otlp","id":"opentelemetry.proto.logs.v1.LogRecordFlags","text":"LogRecordFlags represents constants used to interpret the LogRecord.flags field, which is protobuf 'fixed32' type and is to be used as bit-fields. Each non-zer…","url":"/otlp","meta":"enum · logs/v1/logs"},{"type":"otlp","id":"opentelemetry.proto.logs.v1.LogsData","text":"LogsData represents the logs data that can be stored in a persistent storage, OR can be embedded by other protocols that transfer OTLP logs data but do not imp…","url":"/otlp","meta":"message · logs/v1/logs"},{"type":"otlp","id":"opentelemetry.proto.logs.v1.ResourceLogs","text":"A collection of ScopeLogs from a Resource.","url":"/otlp","meta":"message · logs/v1/logs"},{"type":"otlp","id":"opentelemetry.proto.logs.v1.ScopeLogs","text":"A collection of Logs produced by a Scope.","url":"/otlp","meta":"message · logs/v1/logs"},{"type":"otlp","id":"opentelemetry.proto.logs.v1.SeverityNumber","text":"Possible values for LogRecord.SeverityNumber.","url":"/otlp","meta":"enum · logs/v1/logs"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.AggregationTemporality","text":"AggregationTemporality defines how a metric aggregator reports aggregated values. It describes how those values relate to the time interval over which they are…","url":"/otlp","meta":"enum · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.DataPointFlags","text":"DataPointFlags is defined as a protobuf 'uint32' type and is to be used as a bit-field representing 32 distinct boolean flags. Each flag defined in this enum i…","url":"/otlp","meta":"enum · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.Exemplar","text":"A representation of an exemplar, which is a sample input measurement. Exemplars also hold information about the environment when the measurement was recorded, …","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.ExponentialHistogram","text":"ExponentialHistogram represents the type of a metric that is calculated by aggregating as a ExponentialHistogram of all reported double measurements over a tim…","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint","text":"ExponentialHistogramDataPoint is a single data point in a timeseries that describes the time-varying values of a ExponentialHistogram of double values. A Expon…","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint.Buckets","text":"Buckets are a set of bucket counts, encoded in a contiguous array of counts.","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.Gauge","text":"Gauge represents the type of a scalar metric that always exports the \"current value\" for every data point. It should be used for an \"unknown\" aggregation. A Ga…","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.Histogram","text":"Histogram represents the type of a metric that is calculated by aggregating as a Histogram of all reported measurements over a time interval.","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.HistogramDataPoint","text":"HistogramDataPoint is a single data point in a timeseries that describes the time-varying values of a Histogram. A Histogram contains summary statistics for a …","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.Metric","text":"Defines a Metric which has one or more timeseries. The following is a brief summary of the Metric data model. For more details, see: https://github.com/open-te…","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.MetricsData","text":"MetricsData represents the metrics data that can be stored in a persistent storage, OR can be embedded by other protocols that transfer OTLP metrics data but d…","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.NumberDataPoint","text":"NumberDataPoint is a single data point in a timeseries that describes the time-varying scalar value of a metric.","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.ResourceMetrics","text":"A collection of ScopeMetrics from a Resource.","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.ScopeMetrics","text":"A collection of Metrics produced by an Scope.","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.Sum","text":"Sum represents the type of a scalar metric that is calculated as a sum of all reported measurements over a time interval.","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.Summary","text":"Summary metric data are used to convey quantile summaries, a Prometheus (see: https://prometheus.io/docs/concepts/metric_types/#summary) and OpenMetrics (see: …","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.SummaryDataPoint","text":"SummaryDataPoint is a single data point in a timeseries that describes the time-varying values of a Summary metric. The count and sum fields represent cumulati…","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.metrics.v1.SummaryDataPoint.ValueAtQuantile","text":"Represents the value at a given quantile of a distribution. To record Min and Max values following conventions are used: - The 1.0 quantile is equivalent to th…","url":"/otlp","meta":"message · metrics/v1/metrics"},{"type":"otlp","id":"opentelemetry.proto.processcontext.v1development.ProcessContext","text":"ProcessContext represents the payload for the process context sharing mechanism. This message is designed to be published by OpenTelemetry SDKs via a memory-ma…","url":"/otlp","meta":"message · processcontext/v1development/process_context"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.Function","text":"Describes a function, including its human-readable name, system name, source file, and starting line number in the source. At least one of {name_strindex, syst…","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.KeyValueAndUnit","text":"A custom 'dictionary native' style of encoding attributes which is more convenient for profiles than opentelemetry.proto.common.v1.KeyValue Specifically, uses …","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.Line","text":"Details a specific line in a source code, linked to a function. Status: [Alpha]","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.Link","text":"A pointer from a profile Sample to a trace Span. Connects a profile sample to a trace span, identified by unique trace and span IDs. Status: [Alpha]","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.Location","text":"Contains function and line table debug information for a single frame. Status: [Alpha]","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.Mapping","text":"Describes the mapping of a binary in memory, including its address range, file offset, and metadata like build ID Status: [Alpha]","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.Profile","text":"Represents a complete profile, including sample types, samples, mappings to binaries, stacks, locations, functions, string table, and additional metadata. It m…","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.ProfilesData","text":"ProfilesData represents the profiles data that can be stored in persistent storage, OR can be embedded by other protocols that transfer OTLP profiles data but …","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.ProfilesDictionary","text":"ProfilesDictionary contains all the dictionary tables that are shared across the entire ProfilesData message. The following applies to all fields in this messa…","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.ResourceProfiles","text":"A collection of ScopeProfiles from a Resource. Status: [Alpha]","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.Sample","text":"Each Sample records values encountered in some program context. The program context is typically a stack trace, perhaps augmented with auxiliary information li…","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.ScopeProfiles","text":"A collection of Profiles produced by an InstrumentationScope. Status: [Alpha]","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.Stack","text":"A Stack represents a stack trace as a list of locations (leaf first). For example, the stack trace resulting from the call stack main -> foo -> bar would be en…","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.profiles.v1development.ValueType","text":"ValueType describes the type and units of a value. Status: [Alpha]","url":"/otlp","meta":"message · profiles/v1development/profiles"},{"type":"otlp","id":"opentelemetry.proto.resource.v1.Resource","text":"Resource information.","url":"/otlp","meta":"message · resource/v1/resource"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.ResourceSpans","text":"A collection of ScopeSpans from a Resource.","url":"/otlp","meta":"message · trace/v1/trace"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.ScopeSpans","text":"A collection of Spans produced by an InstrumentationScope.","url":"/otlp","meta":"message · trace/v1/trace"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.Span","text":"A Span represents a single operation performed by a single component of the system. The next available field id is 17.","url":"/otlp","meta":"message · trace/v1/trace"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.Span.Event","text":"Event is a time-stamped annotation of the span, consisting of user-supplied text description and key-value pairs.","url":"/otlp","meta":"message · trace/v1/trace"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.Span.Link","text":"A pointer from the current span to another span in the same trace or in a different trace. For example, this can be used in batching operations, where a single…","url":"/otlp","meta":"message · trace/v1/trace"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.Span.SpanKind","text":"SpanKind is the type of span. Can be used to specify additional relationships between spans in addition to a parent/child relationship.","url":"/otlp","meta":"enum · trace/v1/trace"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.SpanFlags","text":"SpanFlags represents constants used to interpret the Span.flags field, which is protobuf 'fixed32' type and is to be used as bit-fields. Each non-zero value de…","url":"/otlp","meta":"enum · trace/v1/trace"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.Status","text":"The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs.","url":"/otlp","meta":"message · trace/v1/trace"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.Status.StatusCode","text":"For the semantics of status codes see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status","url":"/otlp","meta":"enum · trace/v1/trace"},{"type":"otlp","id":"opentelemetry.proto.trace.v1.TracesData","text":"TracesData represents the traces data that can be stored in a persistent storage, OR can be embedded by other protocols that transfer OTLP traces data but do n…","url":"/otlp","meta":"message · trace/v1/trace"}]}