-
Notifications
You must be signed in to change notification settings - Fork 440
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding semantic-convention attributes for trace (#868)
- Loading branch information
Showing
7 changed files
with
227 additions
and
166 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,189 @@ | ||
// Copyright The OpenTelemetry Authors | ||
// SPDX-License-Identifier: Apache-2.0 | ||
|
||
#pragma once | ||
|
||
#include "opentelemetry/common/string_util.h" | ||
#include "opentelemetry/version.h" | ||
|
||
OPENTELEMETRY_BEGIN_NAMESPACE | ||
namespace trace | ||
{ | ||
|
||
#define OTEL_CPP_GET_ATTR(name) attr(OTEL_CPP_CONST_HASHCODE(name)) | ||
|
||
/** | ||
* Stores the Constants for semantic kAttribute names outlined by the OpenTelemetry specifications. | ||
* <see | ||
* href="https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/README.md"/>. | ||
*/ | ||
static const struct | ||
{ | ||
uint32_t attribute_id; | ||
const char *attribute_key; | ||
} attribute_ids[] = { | ||
// The set of constants matches the specification as of this commit. | ||
// https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/semantic_conventions | ||
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/exceptions.md | ||
|
||
// General network connection attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrNetTransport), "net.transport"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrNetPeerIp), "net.peer.ip"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrNetPeerPort), "net.peer.port"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrNetPeerName), "net.peer.name"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrNetHostIp), "net.host.ip"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrNetHostPort), "net.host.port"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrNetHostName), "net.host.name"}, | ||
|
||
// General identity attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrEnduserId), "enduser.id"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrEnduserRole), "enduser.role"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrEnduserScope), "enduser.scope"}, | ||
|
||
// General remote service attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrPeerService), "peer.service"}, | ||
|
||
// General thread attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrThreadId), "thread.id"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrThreadName), "thread.name"}, | ||
|
||
// Source Code Attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrCodeFunction), "code.function"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrCodeNamespace), "code.namespace"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrCodeFilepath), "code.filepath"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrCodeLineno), "code.lineno"}, | ||
|
||
// Http Span Common Attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpMethod), "http.method"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpUrl), "http.url"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpTarget), "http.target"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpHost), "http.host"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpScheme), "http.scheme"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpStatusCode), "http.status_code"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpFlavor), "http.flavor"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpUserAgent), "http.user_agent"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpRequestContentLength), "http.request_content_length"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpRequestContentLengthUncompressed), | ||
"http.request_content_length_uncompressed"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpResponseContentLength), "http.response_content_length"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpResponseContentLengthUncompressed), | ||
"http.response_content_length_uncompressed"}, | ||
|
||
// HTTP Span Client Attributes | ||
// One of the following combinations: | ||
// - http.url | ||
// - http.scheme, http.host, http.target | ||
// - http.scheme, net.peer.name, net.peer.port, http.target | ||
// - http.scheme, net.peer.ip, net.peer.port, http.target | ||
|
||
// HTTP Span Server Attributes | ||
// One of the following combinations: | ||
// -http.scheme, http.host, http.target | ||
// -http.scheme, http.server_name, net.host.port, http.target | ||
// -http.scheme, net.host.name, net.host.port, http.target | ||
// -http.url | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpServerName), "http.server_name"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpRoute), "http.route"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrHttpClientIp), "http.client_ip"}, | ||
|
||
// DB: Connection-level attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbSystem), "db.system"}, // other_sql, mssql, mysql... | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbConnectionString), "db.connection_string"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbUser), "db.user"}, | ||
// DB: Connection-level attributes for specific technologies | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbMssqlInstanceName), "db.mssql.instance_name"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbJdbcDriverClassname), "db.jdbc.driver_classname"}, | ||
// DB: Call-level attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbName), "db.name"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbStatement), "db.statement"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbOperation), "db.operation"}, | ||
// DB: Call-level attributes for specific technologies | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbHbaseNamespace), "db.hbase.namespace"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbRedisDatabaseIndex), "db.redis.database_index"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbMongodbCollection), "db.mongodb.collection"}, | ||
|
||
// // DB: Call-level attributes for Cassandra for clarity | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbCassandraKeyspace), "db.cassandra.keyspace"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbCassandraPageSize), "db.cassandra.page_size"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbCassandraConsistencyLevel), "db.cassandra.consistency_level"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbCassandraTable), "db.cassandra.table"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbCassandraIdempotence), "db.cassandra.idempotence"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbCassandraSpeculativeExecutionCount), | ||
"db.cassandra.speculative_execution_count"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbCassandraCoordinatorId), "db.cassandra.coordinator.id"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrDbCassandraCoordinatorDC), "db.cassandra.coordinator.dc"}, | ||
|
||
// Common RPC attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrRpcSystem), "rpc.system"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrRpcService), "rpc.service"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrRpcMethod), "rpc.method"}, | ||
// gRPC attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrRpcGrpcStatusCode), "rpc.grpc.status_code"}, | ||
// JSON-RPC attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrRpcJsonrpcVersion), "rpc.jsonrpc.version"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrRpcJsonrpcRequestId), "rpc.jsonrpc.request_id"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrRpcJsonrpcErrorCode), "rpc.jsonrpc.error_code"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrRpcJsonrpcErrorMessage), "rpc.jsonrpc.error_message"}, | ||
|
||
// faas: General Attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasTrigger), "faas.trigger"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasExecution), "faas.execution"}, | ||
// faas: incoming invocations | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasColdStart), "faas.coldstart"}, | ||
// faas: outgoing invocations | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasInvokedName), "faas.invoked_name"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasInvokedProvider), "faas.invoked_provider"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasInvokedRegion), "faas.invoked_region"}, | ||
// faas: datastore trigger | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasDocumentCollection), "faas.document.collection"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasDocumentOperation), "faas.document.operation"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasDocumentTime), "faas.document.time"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasDocumentName), "faas.document.name"}, | ||
// faas: timer trigger | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasTime), "faas.time"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrFaasCron), "faas.cron"}, | ||
|
||
// messaging attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingSystem), "messaging.system"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingDestination), "messaging.destination"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingDestinationKind), "messaging.destination_kind"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingTempDestination), "messaging.temp_destination"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingProtocol), "messaging.protocol"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingProtocolVersion), "messaging.protocol_version"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingUrl), "messaging.url"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingMessageId), "messaging.message_id"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingConversationId), "messaging.conversation_id"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingPayloadSize), "messaging.message_payload_size_bytes"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingPayloadCompressedSize), | ||
"messaging.message_payload_compressed_size_bytes"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingOperation), "messaging.operation"}, | ||
// messaging attributes specific to messaging systems | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingRabbitMQRoutingKey), "messaging.rabbitmq.routing_key"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingKafkaMessageKey), "messaging.kafka.message_key"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingKafkaConsumerGroup), "messaging.kafka.consumer_group"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingKafkaClientId), "messaging.kafka.client_id"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingKafkaPartition), "messaging.kafka.partition"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrMessagingKafkaTombstone), "messaging.kafka.tombstone"}, | ||
|
||
// Exceptions attributes | ||
{OTEL_CPP_CONST_HASHCODE(AttrExceptionType), "exception.type"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrExceptionMessage), "exception.message"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrExceptionStacktrace), "exception.stacktrace"}, | ||
{OTEL_CPP_CONST_HASHCODE(AttrExceptionEscapted), "exception.escaped"}, | ||
}; | ||
// function to generate hash code for semantic conventions attributes. | ||
|
||
#define OTEL_CPP_TRACE_ATTRIBUTES_MAX (sizeof(attribute_ids) / sizeof(attribute_ids[0])) | ||
|
||
inline const char *attr(uint32_t attr) | ||
{ | ||
for (int i = 0; i < OTEL_CPP_TRACE_ATTRIBUTES_MAX; i++) | ||
{ | ||
if (attribute_ids[i].attribute_id == attr) | ||
return attribute_ids[i].attribute_key; | ||
} | ||
return ""; | ||
} | ||
|
||
} // namespace trace | ||
OPENTELEMETRY_END_NAMESPACE |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.