Inline incubating attributes + central semconv-incubating dependency (#1298)

Co-authored-by: Trask Stalnaker <trask.stalnaker@gmail.com>
This commit is contained in:
SylvainJuge 2024-05-28 18:16:36 +02:00 committed by GitHub
parent 516aed9fdf
commit aa5b65a649
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
25 changed files with 253 additions and 101 deletions

View File

@ -12,7 +12,7 @@ dependencies {
api("io.opentelemetry:opentelemetry-sdk")
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating:1.25.0-alpha")
testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")

View File

@ -5,13 +5,13 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CloudPlatformValues.AWS_ELASTIC_BEANSTALK;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.SERVICE_INSTANCE_ID;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.SERVICE_NAMESPACE;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_VERSION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_ELASTIC_BEANSTALK;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes.SERVICE_INSTANCE_ID;
import static io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes.SERVICE_NAMESPACE;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;

View File

@ -5,7 +5,7 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PROVIDER;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ConditionalResourceProvider;

View File

@ -5,16 +5,16 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_EC2;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_ID;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_IMAGE_ID;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_TYPE;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CloudPlatformValues.AWS_EC2;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.HOST_ID;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.HOST_IMAGE_ID;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.HOST_NAME;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.HOST_TYPE;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
@ -23,7 +23,6 @@ import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.SchemaUrls;
import io.opentelemetry.semconv.incubating.CloudIncubatingAttributes;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
@ -90,7 +89,7 @@ public final class Ec2Resource {
String hostname = fetchHostname(hostnameUrl, token);
AttributesBuilder attrBuilders = Attributes.builder();
attrBuilders.put(CLOUD_PROVIDER, CloudIncubatingAttributes.CloudProviderValues.AWS);
attrBuilders.put(CLOUD_PROVIDER, IncubatingAttributes.CloudProviderValues.AWS);
attrBuilders.put(CLOUD_PLATFORM, AWS_EC2);
try (JsonParser parser = JSON_FACTORY.createParser(identity)) {

View File

@ -5,26 +5,26 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_CONTAINER_ARN;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_LAUNCHTYPE;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_TASK_ARN;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_TASK_FAMILY;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_ECS_TASK_REVISION;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_GROUP_ARNS;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_GROUP_NAMES;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_STREAM_ARNS;
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_LOG_STREAM_NAMES;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_RESOURCE_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_ECS;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_ID;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_IMAGE_NAME;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_NAME;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.AWS_ECS_CONTAINER_ARN;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.AWS_ECS_LAUNCHTYPE;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.AWS_ECS_TASK_ARN;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.AWS_ECS_TASK_FAMILY;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.AWS_ECS_TASK_REVISION;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.AWS_LOG_GROUP_ARNS;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.AWS_LOG_GROUP_NAMES;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.AWS_LOG_STREAM_ARNS;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.AWS_LOG_STREAM_NAMES;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_RESOURCE_ID;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CONTAINER_ID;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CONTAINER_IMAGE_NAME;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CONTAINER_NAME;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CloudPlatformValues.AWS_ECS;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CloudProviderValues.AWS;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;

View File

@ -5,12 +5,12 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_EKS;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes.CONTAINER_ID;
import static io.opentelemetry.semconv.incubating.K8sIncubatingAttributes.K8S_CLUSTER_NAME;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CONTAINER_ID;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CloudPlatformValues.AWS_EKS;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.K8S_CLUSTER_NAME;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;

View File

@ -0,0 +1,86 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.contrib.aws.resource;
import io.opentelemetry.api.common.AttributeKey;
import java.util.List;
/**
* Inlines incubating attributes until they are stable, doing this prevents having a direct
* dependency on incubating artifact which can conflict with another incubating version.
*/
class IncubatingAttributes {
private IncubatingAttributes() {}
public static final AttributeKey<String> CLOUD_ACCOUNT_ID =
AttributeKey.stringKey("cloud.account.id");
public static final AttributeKey<String> CLOUD_AVAILABILITY_ZONE =
AttributeKey.stringKey("cloud.availability_zone");
public static final AttributeKey<String> CLOUD_PLATFORM =
AttributeKey.stringKey("cloud.platform");
public static final AttributeKey<String> CLOUD_PROVIDER =
AttributeKey.stringKey("cloud.provider");
public static final AttributeKey<String> CLOUD_REGION = AttributeKey.stringKey("cloud.region");
public static final AttributeKey<String> CLOUD_RESOURCE_ID =
AttributeKey.stringKey("cloud.resource_id");
public static final class CloudPlatformValues {
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";
private CloudPlatformValues() {}
}
public static final class CloudProviderValues {
public static final String AWS = "aws";
private CloudProviderValues() {}
}
public static final AttributeKey<String> SERVICE_INSTANCE_ID =
AttributeKey.stringKey("service.instance.id");
public static final AttributeKey<String> SERVICE_NAMESPACE =
AttributeKey.stringKey("service.namespace");
public static final AttributeKey<String> HOST_ID = AttributeKey.stringKey("host.id");
public static final AttributeKey<String> HOST_IMAGE_ID = AttributeKey.stringKey("host.image.id");
public static final AttributeKey<String> HOST_NAME = AttributeKey.stringKey("host.name");
public static final AttributeKey<String> HOST_TYPE = AttributeKey.stringKey("host.type");
public static final AttributeKey<String> CONTAINER_ID = AttributeKey.stringKey("container.id");
public static final AttributeKey<String> CONTAINER_IMAGE_NAME =
AttributeKey.stringKey("container.image.name");
public static final AttributeKey<String> CONTAINER_NAME =
AttributeKey.stringKey("container.name");
public static final AttributeKey<String> K8S_CLUSTER_NAME =
AttributeKey.stringKey("k8s.cluster.name");
public static final AttributeKey<String> AWS_ECS_CONTAINER_ARN =
AttributeKey.stringKey("aws.ecs.container.arn");
public static final AttributeKey<String> AWS_ECS_LAUNCHTYPE =
AttributeKey.stringKey("aws.ecs.launchtype");
public static final AttributeKey<String> AWS_ECS_TASK_ARN =
AttributeKey.stringKey("aws.ecs.task.arn");
public static final AttributeKey<String> AWS_ECS_TASK_FAMILY =
AttributeKey.stringKey("aws.ecs.task.family");
public static final AttributeKey<String> AWS_ECS_TASK_REVISION =
AttributeKey.stringKey("aws.ecs.task.revision");
public static final AttributeKey<List<String>> AWS_LOG_GROUP_ARNS =
AttributeKey.stringArrayKey("aws.log.group.arns");
public static final AttributeKey<List<String>> AWS_LOG_GROUP_NAMES =
AttributeKey.stringArrayKey("aws.log.group.names");
public static final AttributeKey<List<String>> AWS_LOG_STREAM_ARNS =
AttributeKey.stringArrayKey("aws.log.stream.arns");
public static final AttributeKey<List<String>> AWS_LOG_STREAM_NAMES =
AttributeKey.stringArrayKey("aws.log.stream.names");
public static final AttributeKey<String> FAAS_NAME = AttributeKey.stringKey("faas.name");
public static final AttributeKey<String> FAAS_VERSION = AttributeKey.stringKey("faas.version");
}

View File

@ -5,13 +5,13 @@
package io.opentelemetry.contrib.aws.resource;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.AWS_LAMBDA;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_VERSION;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CloudPlatformValues.AWS_LAMBDA;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.CloudProviderValues.AWS;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.contrib.aws.resource.IncubatingAttributes.FAAS_VERSION;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;

View File

@ -23,6 +23,7 @@ val errorProneVersion = "2.27.1"
val prometheusVersion = "0.16.0"
val mockitoVersion = "4.11.0"
val slf4jVersion = "2.0.13"
val semConvVersion = "1.25.0-alpha"
val CORE_DEPENDENCIES = listOf(
"com.google.auto.service:auto-service:${autoServiceVersion}",
@ -33,6 +34,8 @@ val CORE_DEPENDENCIES = listOf(
"com.google.errorprone:error_prone_core:${errorProneVersion}",
"io.github.netmikey.logunit:logunit-jul:2.0.0",
"io.opentelemetry.proto:opentelemetry-proto:1.0.0-alpha",
"io.opentelemetry.semconv:opentelemetry-semconv:${semConvVersion}",
"io.opentelemetry.semconv:opentelemetry-semconv-incubating:${semConvVersion}",
"io.prometheus:simpleclient:${prometheusVersion}",
"io.prometheus:simpleclient_common:${prometheusVersion}",
"io.prometheus:simpleclient_httpserver:${prometheusVersion}",

View File

@ -15,7 +15,7 @@ dependencies {
implementation("com.google.cloud.opentelemetry:detector-resources-support:0.29.0")
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating:1.25.0-alpha")
testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")

View File

@ -27,26 +27,26 @@ import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_
import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_COMPUTE_INSTANCE_ID;
import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_COMPUTE_NAME;
import static com.google.cloud.opentelemetry.detection.AttributeKeys.SERVERLESS_COMPUTE_REVISION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_APP_ENGINE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_CLOUD_FUNCTIONS;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_CLOUD_RUN;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_COMPUTE_ENGINE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudPlatformValues.GCP_KUBERNETES_ENGINE;
import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CloudProviderValues.GCP;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INSTANCE;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_VERSION;
import static io.opentelemetry.semconv.incubating.GcpIncubatingAttributes.GCP_GCE_INSTANCE_HOSTNAME;
import static io.opentelemetry.semconv.incubating.GcpIncubatingAttributes.GCP_GCE_INSTANCE_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_ID;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_TYPE;
import static io.opentelemetry.semconv.incubating.K8sIncubatingAttributes.K8S_CLUSTER_NAME;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CLOUD_ACCOUNT_ID;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CLOUD_AVAILABILITY_ZONE;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CloudPlatformValues.GCP;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CloudPlatformValues.GCP_APP_ENGINE;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CloudPlatformValues.GCP_CLOUD_FUNCTIONS;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CloudPlatformValues.GCP_CLOUD_RUN;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CloudPlatformValues.GCP_COMPUTE_ENGINE;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.CloudPlatformValues.GCP_KUBERNETES_ENGINE;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.FAAS_INSTANCE;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.FAAS_VERSION;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.GCP_GCE_INSTANCE_HOSTNAME;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.GCP_GCE_INSTANCE_NAME;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.HOST_ID;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.HOST_NAME;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.HOST_TYPE;
import static io.opentelemetry.contrib.gcp.resource.IncubatingAttributes.K8S_CLUSTER_NAME;
import com.google.cloud.opentelemetry.detection.DetectedPlatform;
import com.google.cloud.opentelemetry.detection.GCPPlatformDetector;

View File

@ -0,0 +1,54 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.contrib.gcp.resource;
import io.opentelemetry.api.common.AttributeKey;
/**
* Inlines incubating attributes until they are stable, doing this prevents having a direct
* dependency on incubating artifact which can conflict with another incubating version.
*/
class IncubatingAttributes {
private IncubatingAttributes() {}
public static final AttributeKey<String> CLOUD_ACCOUNT_ID =
AttributeKey.stringKey("cloud.account.id");
public static final AttributeKey<String> CLOUD_AVAILABILITY_ZONE =
AttributeKey.stringKey("cloud.availability_zone");
public static final AttributeKey<String> CLOUD_PLATFORM =
AttributeKey.stringKey("cloud.platform");
public static final AttributeKey<String> CLOUD_PROVIDER =
AttributeKey.stringKey("cloud.provider");
public static final AttributeKey<String> CLOUD_REGION = AttributeKey.stringKey("cloud.region");
public static final class CloudPlatformValues {
private CloudPlatformValues() {}
public static final String GCP_COMPUTE_ENGINE = "gcp_compute_engine";
public static final String GCP_CLOUD_RUN = "gcp_cloud_run";
public static final String GCP_KUBERNETES_ENGINE = "gcp_kubernetes_engine";
public static final String GCP_CLOUD_FUNCTIONS = "gcp_cloud_functions";
public static final String GCP_APP_ENGINE = "gcp_app_engine";
public static final String GCP = "gcp";
}
public static final AttributeKey<String> FAAS_INSTANCE = AttributeKey.stringKey("faas.instance");
public static final AttributeKey<String> FAAS_NAME = AttributeKey.stringKey("faas.name");
public static final AttributeKey<String> FAAS_VERSION = AttributeKey.stringKey("faas.version");
public static final AttributeKey<String> GCP_GCE_INSTANCE_HOSTNAME =
AttributeKey.stringKey("gcp.gce.instance.hostname");
public static final AttributeKey<String> GCP_GCE_INSTANCE_NAME =
AttributeKey.stringKey("gcp.gce.instance.name");
public static final AttributeKey<String> HOST_ID = AttributeKey.stringKey("host.id");
public static final AttributeKey<String> HOST_NAME = AttributeKey.stringKey("host.name");
public static final AttributeKey<String> HOST_TYPE = AttributeKey.stringKey("host.type");
public static final AttributeKey<String> K8S_CLUSTER_NAME =
AttributeKey.stringKey("k8s.cluster.name");
}

View File

@ -24,7 +24,7 @@ dependencies {
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
implementation("io.opentelemetry:opentelemetry-exporter-otlp")
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating:1.25.0-alpha")
testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
annotationProcessor("com.google.auto.value:auto-value")
compileOnly("com.google.auto.value:auto-value-annotations")

View File

@ -11,7 +11,6 @@ import io.opentelemetry.maven.MavenGoal;
import io.opentelemetry.maven.semconv.MavenOtelSemanticAttributes;
import io.opentelemetry.semconv.HttpAttributes;
import io.opentelemetry.semconv.UrlAttributes;
import io.opentelemetry.semconv.incubating.PeerIncubatingAttributes;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@ -93,6 +92,6 @@ final class GoogleJibBuildHandler implements MojoGoalExecutionHandler {
// Note: setting the "peer.service" helps visualization on Jaeger but
// may not fully comply with the OTel "peer.service" spec as we don't know if the remote
// service will be instrumented and what it "service.name" would be
spanBuilder.setAttribute(PeerIncubatingAttributes.PEER_SERVICE, registryHostname);
spanBuilder.setAttribute(MavenOtelSemanticAttributes.PEER_SERVICE, registryHostname);
}
}

View File

@ -11,7 +11,6 @@ import io.opentelemetry.maven.MavenGoal;
import io.opentelemetry.maven.semconv.MavenOtelSemanticAttributes;
import io.opentelemetry.semconv.HttpAttributes;
import io.opentelemetry.semconv.UrlAttributes;
import io.opentelemetry.semconv.incubating.PeerIncubatingAttributes;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collections;
@ -56,7 +55,7 @@ final class MavenDeployHandler implements MojoGoalExecutionHandler {
// may not fully comply with the OTel "peer.service" spec as we don't know if the remote
// service will be instrumented and what it "service.name" would be
spanBuilder.setAttribute(
PeerIncubatingAttributes.PEER_SERVICE, new URL(artifactRepositoryUrl).getHost());
MavenOtelSemanticAttributes.PEER_SERVICE, new URL(artifactRepositoryUrl).getHost());
} catch (MalformedURLException e) {
logger.debug("Ignore exception parsing artifact repository URL", e);
}

View File

@ -8,10 +8,9 @@ package io.opentelemetry.maven.handler;
import io.opentelemetry.api.trace.SpanBuilder;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.maven.MavenGoal;
import io.opentelemetry.maven.semconv.MavenOtelSemanticAttributes;
import io.opentelemetry.semconv.HttpAttributes;
import io.opentelemetry.semconv.UrlAttributes;
import io.opentelemetry.semconv.incubating.PeerIncubatingAttributes;
import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes;
import java.util.Collections;
import java.util.List;
import org.apache.maven.execution.ExecutionEvent;
@ -27,9 +26,9 @@ final class SnykMonitorHandler implements MojoGoalExecutionHandler {
@Override
public void enrichSpan(SpanBuilder spanBuilder, ExecutionEvent executionEvent) {
spanBuilder.setSpanKind(SpanKind.CLIENT);
spanBuilder.setAttribute(PeerIncubatingAttributes.PEER_SERVICE, "snyk.io");
spanBuilder.setAttribute(MavenOtelSemanticAttributes.PEER_SERVICE, "snyk.io");
spanBuilder.setAttribute(UrlAttributes.URL_FULL, "https://snyk.io/api/v1/monitor/maven");
spanBuilder.setAttribute(RpcIncubatingAttributes.RPC_METHOD, "monitor");
spanBuilder.setAttribute(MavenOtelSemanticAttributes.RPC_METHOD, "monitor");
spanBuilder.setAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "POST");
}

View File

@ -8,10 +8,9 @@ package io.opentelemetry.maven.handler;
import io.opentelemetry.api.trace.SpanBuilder;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.maven.MavenGoal;
import io.opentelemetry.maven.semconv.MavenOtelSemanticAttributes;
import io.opentelemetry.semconv.HttpAttributes;
import io.opentelemetry.semconv.UrlAttributes;
import io.opentelemetry.semconv.incubating.PeerIncubatingAttributes;
import io.opentelemetry.semconv.incubating.RpcIncubatingAttributes;
import java.util.Collections;
import java.util.List;
import org.apache.maven.execution.ExecutionEvent;
@ -27,9 +26,9 @@ final class SnykTestHandler implements MojoGoalExecutionHandler {
@Override
public void enrichSpan(SpanBuilder spanBuilder, ExecutionEvent executionEvent) {
spanBuilder.setSpanKind(SpanKind.CLIENT);
spanBuilder.setAttribute(PeerIncubatingAttributes.PEER_SERVICE, "snyk.io");
spanBuilder.setAttribute(MavenOtelSemanticAttributes.PEER_SERVICE, "snyk.io");
spanBuilder.setAttribute(UrlAttributes.URL_FULL, "https://snyk.io/api/v1/test-dep-graph");
spanBuilder.setAttribute(RpcIncubatingAttributes.RPC_METHOD, "test");
spanBuilder.setAttribute(MavenOtelSemanticAttributes.RPC_METHOD, "test");
spanBuilder.setAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "POST");
}

View File

@ -11,7 +11,6 @@ import io.opentelemetry.maven.MavenGoal;
import io.opentelemetry.maven.semconv.MavenOtelSemanticAttributes;
import io.opentelemetry.semconv.HttpAttributes;
import io.opentelemetry.semconv.UrlAttributes;
import io.opentelemetry.semconv.incubating.PeerIncubatingAttributes;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collections;
@ -108,7 +107,7 @@ final class SpringBootBuildImageHandler implements MojoGoalExecutionHandler {
// may not fully comply with the OTel "peer.service" spec as we don't know if the remote
// service will be instrumented and what it "service.name" would be
spanBuilder.setAttribute(
PeerIncubatingAttributes.PEER_SERVICE, new URL(registryUrl).getHost());
MavenOtelSemanticAttributes.PEER_SERVICE, new URL(registryUrl).getHost());
} catch (MalformedURLException e) {
logger.debug("Ignore exception parsing container registry URL", e);
}

View File

@ -10,11 +10,11 @@ import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.ServiceAttributes;
import io.opentelemetry.semconv.incubating.TelemetryIncubatingAttributes;
import org.apache.maven.rtinfo.RuntimeInformation;
import org.apache.maven.rtinfo.internal.DefaultRuntimeInformation;
public class MavenResourceProvider implements ResourceProvider {
@Override
public Resource createResource(ConfigProperties config) {
// TODO verify if there is solution to retrieve the RuntimeInformation instance loaded by the
@ -24,10 +24,10 @@ public class MavenResourceProvider implements ResourceProvider {
.put(ServiceAttributes.SERVICE_NAME, MavenOtelSemanticAttributes.SERVICE_NAME_VALUE)
.put(ServiceAttributes.SERVICE_VERSION, runtimeInformation.getMavenVersion())
.put(
TelemetryIncubatingAttributes.TELEMETRY_DISTRO_NAME,
MavenOtelSemanticAttributes.TELEMETRY_DISTRO_NAME,
MavenOtelSemanticAttributes.TELEMETRY_DISTRO_NAME_VALUE)
.put(
TelemetryIncubatingAttributes.TELEMETRY_DISTRO_VERSION,
MavenOtelSemanticAttributes.TELEMETRY_DISTRO_VERSION,
MavenOtelSemanticAttributes.TELEMETRY_DISTRO_VERSION_VALUE)
.build();
}

View File

@ -10,7 +10,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.maven.OpenTelemetrySdkService;
import io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes;
import java.util.List;
/**
@ -21,13 +20,13 @@ import java.util.List;
public class MavenOtelSemanticAttributes {
/**
* See {@link
* See {@code
* io.opentelemetry.semconv.incubating.ContainerIncubatingAttributes#CONTAINER_IMAGE_NAME}
*/
public static final AttributeKey<String> MAVEN_BUILD_CONTAINER_IMAGE_NAME =
stringKey("maven.build.container.image.name");
/** See {@link ContainerIncubatingAttributes#CONTAINER_IMAGE_TAGS} */
/** See {@code ContainerIncubatingAttributes#CONTAINER_IMAGE_TAGS} */
public static final AttributeKey<List<String>> MAVEN_BUILD_CONTAINER_IMAGE_TAGS =
stringArrayKey("maven.build.container.image.tags");
@ -56,6 +55,14 @@ public class MavenOtelSemanticAttributes {
public static final String SERVICE_NAME_VALUE = "maven";
// inlined incubating attribute to prevent direct dependency on incubating semconv
public static final AttributeKey<String> PEER_SERVICE = AttributeKey.stringKey("peer.service");
public static final AttributeKey<String> RPC_METHOD = AttributeKey.stringKey("rpc.method");
public static final AttributeKey<String> TELEMETRY_DISTRO_NAME =
AttributeKey.stringKey("telemetry.distro.name");
public static final AttributeKey<String> TELEMETRY_DISTRO_VERSION =
AttributeKey.stringKey("telemetry.distro.version");
public static final String TELEMETRY_DISTRO_NAME_VALUE = "opentelemetry-maven-extension";
public static final String TELEMETRY_DISTRO_VERSION_VALUE =

View File

@ -9,7 +9,7 @@ otelJava.moduleName.set("io.opentelemetry.contrib.sampler")
dependencies {
api("io.opentelemetry:opentelemetry-sdk")
implementation("io.opentelemetry.semconv:opentelemetry-semconv")
implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating:1.25.0-alpha")
testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
api("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")
}

View File

@ -5,9 +5,9 @@
package io.opentelemetry.contrib.sampler;
import static io.opentelemetry.semconv.incubating.ThreadIncubatingAttributes.THREAD_NAME;
import static java.util.Objects.requireNonNull;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.context.Context;
@ -33,6 +33,10 @@ import java.util.List;
* <p>If none of the rules matched, the default fallback sampler will make a decision.
*/
public final class RuleBasedRoutingSampler implements Sampler {
// inlined incubating attribute to prevent direct dependency on incubating semconv
private static final AttributeKey<String> THREAD_NAME = AttributeKey.stringKey("thread.name");
private final List<SamplingRule> rules;
private final SpanKind kind;
private final Sampler fallback;

View File

@ -9,4 +9,6 @@ otelJava.moduleName.set("io.opentelemetry.contrib.stacktrace")
dependencies {
api("io.opentelemetry:opentelemetry-sdk")
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
}

View File

@ -18,8 +18,9 @@ import java.util.logging.Logger;
public class StackTraceSpanProcessor extends AbstractSimpleChainingSpanProcessor {
// TODO : remove this once semconv 1.24.0 is available
static final AttributeKey<String> SPAN_STACKTRACE = AttributeKey.stringKey("code.stacktrace");
// inlined incubating attribute to prevent direct dependency on incubating semconv
private static final AttributeKey<String> SPAN_STACKTRACE =
AttributeKey.stringKey("code.stacktrace");
private static final Logger logger = Logger.getLogger(StackTraceSpanProcessor.class.getName());

View File

@ -18,6 +18,7 @@ import io.opentelemetry.sdk.trace.ReadableSpan;
import io.opentelemetry.sdk.trace.SpanProcessor;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import io.opentelemetry.semconv.incubating.CodeIncubatingAttributes;
import java.time.Instant;
import java.util.List;
import java.util.function.Consumer;
@ -54,7 +55,7 @@ class StackTraceSpanProcessorTest {
span -> true,
20,
1,
sb -> sb.setAttribute(StackTraceSpanProcessor.SPAN_STACKTRACE, "hello"),
sb -> sb.setAttribute(CodeIncubatingAttributes.CODE_STACKTRACE, "hello"),
stacktrace -> assertThat(stacktrace).isEqualTo("hello"));
}
@ -99,7 +100,7 @@ class StackTraceSpanProcessorTest {
if (!finishedSpans.isEmpty()) {
String stackTrace =
finishedSpans.get(0).getAttributes().get(StackTraceSpanProcessor.SPAN_STACKTRACE);
finishedSpans.get(0).getAttributes().get(CodeIncubatingAttributes.CODE_STACKTRACE);
stackTraceCheck.accept(stackTrace);
}