Inline incubating semconv attributes (#1604)

This commit is contained in:
Trask Stalnaker 2024-12-19 07:22:32 -08:00 committed by GitHub
parent 2d14db9503
commit 16222fe189
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 67 additions and 47 deletions

View File

@ -14,7 +14,7 @@ dependencies {
implementation("com.squareup.okhttp3:okhttp")
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
annotationProcessor("com.google.auto.service:auto-service")
testImplementation("com.google.auto.service:auto-service")

View File

@ -16,23 +16,6 @@ import static io.opentelemetry.contrib.awsxray.AwsAttributeKeys.AWS_SPAN_KIND;
import static io.opentelemetry.contrib.awsxray.AwsAttributeKeys.AWS_STREAM_NAME;
import static io.opentelemetry.contrib.awsxray.AwsAttributeKeys.AWS_TABLE_NAME;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_OPERATION;
import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_SYSTEM;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INVOKED_NAME;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_TRIGGER;
import static io.opentelemetry.semconv.incubating.GraphqlIncubatingAttributes.GRAPHQL_OPERATION_TYPE;
import static io.opentelemetry.semconv.incubating.HttpIncubatingAttributes.HTTP_METHOD;
import static io.opentelemetry.semconv.incubating.HttpIncubatingAttributes.HTTP_TARGET;
import static io.opentelemetry.semconv.incubating.HttpIncubatingAttributes.HTTP_URL;
import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION;
import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_SYSTEM;
import static io.opentelemetry.semconv.incubating.NetIncubatingAttributes.NET_PEER_NAME;
import static io.opentelemetry.semconv.incubating.NetIncubatingAttributes.NET_PEER_PORT;
import static io.opentelemetry.semconv.incubating.NetIncubatingAttributes.NET_SOCK_PEER_ADDR;
import static io.opentelemetry.semconv.incubating.NetIncubatingAttributes.NET_SOCK_PEER_PORT;
import static io.opentelemetry.semconv.incubating.PeerIncubatingAttributes.PEER_SERVICE;
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD;
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
@ -41,7 +24,6 @@ import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.semconv.ServiceAttributes;
import io.opentelemetry.semconv.incubating.GraphqlIncubatingAttributes;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Optional;
@ -57,7 +39,6 @@ import java.util.logging.Logger;
* represent "incoming" traffic, {@link SpanKind#CLIENT} and {@link SpanKind#PRODUCER} spans
* represent "outgoing" traffic, and {@link SpanKind#INTERNAL} spans are ignored.
*/
@SuppressWarnings("deprecation") // uses deprecated semantic conventions
final class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
private static final Logger logger =
@ -72,6 +53,38 @@ final class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
private static final String UNKNOWN_REMOTE_SERVICE = "UnknownRemoteService";
private static final String UNKNOWN_REMOTE_OPERATION = "UnknownRemoteOperation";
// copied from DbIncubatingAttributes
private static final AttributeKey<String> DB_OPERATION = AttributeKey.stringKey("db.operation");
private static final AttributeKey<String> DB_SYSTEM = AttributeKey.stringKey("db.system");
// copied from FaasIncubatingAttributes
private static final AttributeKey<String> FAAS_INVOKED_NAME =
AttributeKey.stringKey("faas.invoked_name");
private static final AttributeKey<String> FAAS_TRIGGER = AttributeKey.stringKey("faas.trigger");
// copied from GraphqlIncubatingAttributes
private static final AttributeKey<String> GRAPHQL_OPERATION_TYPE =
AttributeKey.stringKey("graphql.operation.type");
// copied from HttpIncubatingAttributes
private static final AttributeKey<String> HTTP_METHOD = AttributeKey.stringKey("http.method");
private static final AttributeKey<String> HTTP_TARGET = AttributeKey.stringKey("http.target");
private static final AttributeKey<String> HTTP_URL = AttributeKey.stringKey("http.url");
// copied from MessagingIncubatingAttributes
private static final AttributeKey<String> MESSAGING_OPERATION =
AttributeKey.stringKey("messaging.operation");
private static final AttributeKey<String> MESSAGING_SYSTEM =
AttributeKey.stringKey("messaging.system");
// copied from NetIncubatingAttributes
private static final AttributeKey<String> NET_PEER_NAME = AttributeKey.stringKey("net.peer.name");
private static final AttributeKey<Long> NET_PEER_PORT = AttributeKey.longKey("net.peer.port");
private static final AttributeKey<String> NET_SOCK_PEER_ADDR =
AttributeKey.stringKey("net.sock.peer.addr");
private static final AttributeKey<Long> NET_SOCK_PEER_PORT =
AttributeKey.longKey("net.sock.peer.port");
// copied from PeerIncubatingAttributes
private static final AttributeKey<String> PEER_SERVICE = AttributeKey.stringKey("peer.service");
// copied from RpcIncubatingAttributes
private static final AttributeKey<String> RPC_METHOD = AttributeKey.stringKey("rpc.method");
private static final AttributeKey<String> RPC_SERVICE = AttributeKey.stringKey("rpc.service");
@Override
public Attributes generateMetricAttributesFromSpan(SpanData span, Resource resource) {
AttributesBuilder builder = Attributes.builder();
@ -196,8 +209,8 @@ final class AwsMetricAttributeGenerator implements MetricAttributeGenerator {
* <li>DB
* <li>FAAS
* <li>Messaging
* <li>GraphQL - Special case, if {@link GraphqlIncubatingAttributes#GRAPHQL_OPERATION_TYPE} is
* present, we use it for RemoteOperation and set RemoteService to {@link #GRAPHQL}.
* <li>GraphQL - Special case, if {@link #GRAPHQL_OPERATION_TYPE} is present, we use it for
* RemoteOperation and set RemoteService to {@link #GRAPHQL}.
* </ul>
*
* <p>In each case, these span attributes were selected from the OpenTelemetry trace semantic

View File

@ -5,8 +5,7 @@
package io.opentelemetry.contrib.awsxray;
import static io.opentelemetry.semconv.incubating.HttpIncubatingAttributes.HTTP_STATUS_CODE;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.metrics.DoubleHistogram;
import io.opentelemetry.api.metrics.LongCounter;
@ -39,9 +38,11 @@ import javax.annotation.concurrent.Immutable;
* AlwaysRecordSampler}, which will result in 100% of spans being sent to the processor.
*/
@Immutable
@SuppressWarnings("deprecation") // uses deprecated semantic conventions
public final class AwsSpanMetricsProcessor implements SpanProcessor {
private static final AttributeKey<Long> HTTP_STATUS_CODE =
AttributeKey.longKey("http.status_code");
private static final double NANOS_TO_MILLIS = 1_000_000.0;
// Constants for deriving error and fault metrics

View File

@ -6,14 +6,6 @@
package io.opentelemetry.contrib.awsxray;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_CONTAINER_ARN;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_RESOURCE_ID;
import static io.opentelemetry.semconv.incubating.HttpIncubatingAttributes.HTTP_HOST;
import static io.opentelemetry.semconv.incubating.HttpIncubatingAttributes.HTTP_METHOD;
import static io.opentelemetry.semconv.incubating.HttpIncubatingAttributes.HTTP_TARGET;
import static io.opentelemetry.semconv.incubating.HttpIncubatingAttributes.HTTP_URL;
import static io.opentelemetry.semconv.incubating.NetIncubatingAttributes.NET_HOST_NAME;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
@ -27,7 +19,6 @@ import io.opentelemetry.sdk.trace.data.LinkData;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import io.opentelemetry.sdk.trace.samplers.SamplingDecision;
import io.opentelemetry.sdk.trace.samplers.SamplingResult;
import io.opentelemetry.semconv.incubating.CloudIncubatingAttributes;
import java.time.Duration;
import java.util.Collections;
import java.util.Date;
@ -42,22 +33,37 @@ import javax.annotation.Nullable;
final class SamplingRuleApplier {
// copied from AwsIncubatingAttributes
private static final AttributeKey<String> AWS_ECS_CONTAINER_ARN =
AttributeKey.stringKey("aws.ecs.container.arn");
// copied from CloudIncubatingAttributes
private static final AttributeKey<String> CLOUD_PLATFORM =
AttributeKey.stringKey("cloud.platform");
private static final AttributeKey<String> CLOUD_RESOURCE_ID =
AttributeKey.stringKey("cloud.resource_id");
// copied from CloudIncubatingAttributes.CloudPlatformIncubatingValues
public static final String AWS_EC2 = "aws_ec2";
public static final String AWS_ECS = "aws_ecs";
public static final String AWS_EKS = "aws_eks";
public static final String AWS_LAMBDA = "aws_lambda";
public static final String AWS_ELASTIC_BEANSTALK = "aws_elastic_beanstalk";
// copied from HttpIncubatingAttributes
private static final AttributeKey<String> HTTP_HOST = AttributeKey.stringKey("http.host");
private static final AttributeKey<String> HTTP_METHOD = AttributeKey.stringKey("http.method");
private static final AttributeKey<String> HTTP_TARGET = AttributeKey.stringKey("http.target");
private static final AttributeKey<String> HTTP_URL = AttributeKey.stringKey("http.url");
// copied from NetIncubatingAttributes
private static final AttributeKey<String> NET_HOST_NAME = AttributeKey.stringKey("net.host.name");
private static final Map<String, String> XRAY_CLOUD_PLATFORM;
static {
Map<String, String> xrayCloudPlatform = new HashMap<>();
xrayCloudPlatform.put(
CloudIncubatingAttributes.CloudPlatformIncubatingValues.AWS_EC2, "AWS::EC2::Instance");
xrayCloudPlatform.put(
CloudIncubatingAttributes.CloudPlatformIncubatingValues.AWS_ECS, "AWS::ECS::Container");
xrayCloudPlatform.put(
CloudIncubatingAttributes.CloudPlatformIncubatingValues.AWS_EKS, "AWS::EKS::Container");
xrayCloudPlatform.put(
CloudIncubatingAttributes.CloudPlatformIncubatingValues.AWS_ELASTIC_BEANSTALK,
"AWS::ElasticBeanstalk::Environment");
xrayCloudPlatform.put(
CloudIncubatingAttributes.CloudPlatformIncubatingValues.AWS_LAMBDA,
"AWS::Lambda::Function");
xrayCloudPlatform.put(AWS_EC2, "AWS::EC2::Instance");
xrayCloudPlatform.put(AWS_ECS, "AWS::ECS::Container");
xrayCloudPlatform.put(AWS_EKS, "AWS::EKS::Container");
xrayCloudPlatform.put(AWS_ELASTIC_BEANSTALK, "AWS::ElasticBeanstalk::Environment");
xrayCloudPlatform.put(AWS_LAMBDA, "AWS::Lambda::Function");
XRAY_CLOUD_PLATFORM = Collections.unmodifiableMap(xrayCloudPlatform);
}
@ -348,7 +354,7 @@ final class SamplingRuleApplier {
return arn;
}
String cloudPlatform = resource.getAttributes().get(CLOUD_PLATFORM);
if (CloudIncubatingAttributes.CloudPlatformIncubatingValues.AWS_LAMBDA.equals(cloudPlatform)) {
if (AWS_LAMBDA.equals(cloudPlatform)) {
return getLambdaArn(attributes, resource);
}
return null;