Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion azure-resources/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@ dependencies {
api("io.opentelemetry:opentelemetry-api")
api("io.opentelemetry:opentelemetry-sdk")

implementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
implementation("io.opentelemetry.semconv:opentelemetry-semconv")

compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")

implementation("com.fasterxml.jackson.core:jackson-core")
implementation("com.squareup.okhttp3:okhttp")

testImplementation("io.opentelemetry.semconv:opentelemetry-semconv-incubating")
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@

package io.opentelemetry.contrib.azure.resource;

import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CloudPlatformIncubatingValues.AZURE_AKS;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.K8S_CLUSTER_NAME;

import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.incubating.CloudIncubatingAttributes;
import io.opentelemetry.semconv.incubating.K8sIncubatingAttributes;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
Expand All @@ -22,7 +23,7 @@ public class AzureAksResourceProvider extends CloudResourceProvider {
COMPUTE_MAPPING.put(
"resourceGroupName",
new AzureVmResourceProvider.Entry(
K8sIncubatingAttributes.K8S_CLUSTER_NAME, AzureAksResourceProvider::parseClusterName));
K8S_CLUSTER_NAME, AzureAksResourceProvider::parseClusterName));
}

// visible for testing
Expand Down Expand Up @@ -67,10 +68,7 @@ public Resource createResource(ConfigProperties configProperties) {
}
return client
.get()
.map(
body ->
AzureVmResourceProvider.parseMetadata(
body, COMPUTE_MAPPING, CloudIncubatingAttributes.CloudPlatformValues.AZURE_AKS))
.map(body -> AzureVmResourceProvider.parseMetadata(body, COMPUTE_MAPPING, AZURE_AKS))
.orElse(Resource.empty());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@

package io.opentelemetry.contrib.azure.resource;

import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CLOUD_RESOURCE_ID;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CloudPlatformIncubatingValues.AZURE_APP_SERVICE;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.DEPLOYMENT_ENVIRONMENT_NAME;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.HOST_ID;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.SERVICE_INSTANCE_ID;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
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.DeploymentIncubatingAttributes.DEPLOYMENT_ENVIRONMENT;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_ID;
import static io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes.SERVICE_INSTANCE_ID;

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.api.internal.StringUtils;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.incubating.CloudIncubatingAttributes;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
Expand All @@ -41,7 +41,7 @@ public class AzureAppServiceResourceProvider extends CloudResourceProvider {

static {
ENV_VAR_MAPPING.put(CLOUD_REGION, REGION_NAME);
ENV_VAR_MAPPING.put(DEPLOYMENT_ENVIRONMENT, WEBSITE_SLOT_NAME);
ENV_VAR_MAPPING.put(DEPLOYMENT_ENVIRONMENT_NAME, WEBSITE_SLOT_NAME);
ENV_VAR_MAPPING.put(HOST_ID, WEBSITE_HOSTNAME);
ENV_VAR_MAPPING.put(SERVICE_INSTANCE_ID, WEBSITE_INSTANCE_ID);
ENV_VAR_MAPPING.put(AZURE_APP_SERVICE_STAMP_RESOURCE_ATTRIBUTE, WEBSITE_HOME_STAMPNAME);
Expand Down Expand Up @@ -70,9 +70,7 @@ public Attributes getAttributes() {
return Attributes.empty();
}
String name = Objects.requireNonNull(env.get(WEBSITE_SITE_NAME));
AttributesBuilder builder =
AzureVmResourceProvider.azureAttributeBuilder(
CloudIncubatingAttributes.CloudPlatformValues.AZURE_APP_SERVICE);
AttributesBuilder builder = AzureVmResourceProvider.azureAttributeBuilder(AZURE_APP_SERVICE);
builder.put(SERVICE_NAME, name);

String resourceUri = resourceUri(name);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@

package io.opentelemetry.contrib.azure.resource;

import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.SERVICE_INSTANCE_ID;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_NAME;
import static io.opentelemetry.semconv.ServiceAttributes.SERVICE_VERSION;
import static io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes.SERVICE_INSTANCE_ID;

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,18 @@

package io.opentelemetry.contrib.azure.resource;

import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_INSTANCE;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_MAX_MEMORY;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.semconv.incubating.FaasIncubatingAttributes.FAAS_VERSION;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CloudPlatformIncubatingValues.AZURE_FUNCTIONS;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.FAAS_INSTANCE;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.FAAS_MAX_MEMORY;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.FAAS_NAME;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.FAAS_VERSION;

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.incubating.CloudIncubatingAttributes;
import java.util.HashMap;
import java.util.Map;

Expand All @@ -27,8 +28,7 @@ public class AzureFunctionsResourceProvider extends CloudResourceProvider {
private static final Map<AttributeKey<String>, String> ENV_VAR_MAPPING = new HashMap<>();

static {
ENV_VAR_MAPPING.put(
CloudIncubatingAttributes.CLOUD_REGION, AzureAppServiceResourceProvider.REGION_NAME);
ENV_VAR_MAPPING.put(CLOUD_REGION, AzureAppServiceResourceProvider.REGION_NAME);
ENV_VAR_MAPPING.put(FAAS_NAME, AzureAppServiceResourceProvider.WEBSITE_SITE_NAME);
ENV_VAR_MAPPING.put(FAAS_VERSION, FUNCTIONS_VERSION);
ENV_VAR_MAPPING.put(FAAS_INSTANCE, AzureAppServiceResourceProvider.WEBSITE_INSTANCE_ID);
Expand Down Expand Up @@ -57,9 +57,7 @@ public Attributes getAttributes() {
return Attributes.empty();
}

AttributesBuilder builder =
AzureVmResourceProvider.azureAttributeBuilder(
CloudIncubatingAttributes.CloudPlatformValues.AZURE_FUNCTIONS);
AttributesBuilder builder = AzureVmResourceProvider.azureAttributeBuilder(AZURE_FUNCTIONS);

String limit = env.get(FUNCTIONS_MEM_LIMIT);
if (limit != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@

package io.opentelemetry.contrib.azure.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.CLOUD_RESOURCE_ID;
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.OsIncubatingAttributes.OS_TYPE;
import static io.opentelemetry.semconv.incubating.OsIncubatingAttributes.OS_VERSION;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CLOUD_PLATFORM;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CLOUD_REGION;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CLOUD_RESOURCE_ID;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CloudPlatformIncubatingValues.AZURE_VM;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CloudProviderIncubatingValues.AZURE;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.HOST_ID;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.HOST_NAME;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.HOST_TYPE;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.OS_TYPE;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.OS_VERSION;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
Expand All @@ -22,7 +24,6 @@
import io.opentelemetry.api.common.AttributesBuilder;
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.resources.Resource;
import io.opentelemetry.semconv.incubating.CloudIncubatingAttributes;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -90,10 +91,7 @@ public int order() {
public Resource createResource(ConfigProperties config) {
return client
.get()
.map(
body ->
parseMetadata(
body, COMPUTE_MAPPING, CloudIncubatingAttributes.CloudPlatformValues.AZURE_VM))
.map(body -> parseMetadata(body, COMPUTE_MAPPING, AZURE_VM))
.orElse(Resource.empty());
}

Expand All @@ -111,7 +109,7 @@ static Resource parseMetadata(String body, Map<String, Entry> computeMapping, St
@NotNull
static AttributesBuilder azureAttributeBuilder(String platform) {
AttributesBuilder builder = Attributes.builder();
builder.put(CLOUD_PROVIDER, CloudIncubatingAttributes.CloudProviderValues.AZURE);
builder.put(CLOUD_PROVIDER, AZURE);
builder.put(CLOUD_PLATFORM, platform);
return builder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

package io.opentelemetry.contrib.azure.resource;

import static io.opentelemetry.semconv.incubating.CloudIncubatingAttributes.CLOUD_PROVIDER;
import static io.opentelemetry.contrib.azure.resource.IncubatingAttributes.CLOUD_PROVIDER;

import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
import io.opentelemetry.sdk.autoconfigure.spi.internal.ConditionalResourceProvider;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/

package io.opentelemetry.contrib.azure.resource;

import io.opentelemetry.api.common.AttributeKey;

// copied from opentelemetry-semconv-incubating
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's the motivation in copying instead of depending?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's a policy that library instrumentation must not depend on incubating libraries - all other contrib modules do that too

final class IncubatingAttributes {

// service attributes
public static final AttributeKey<String> SERVICE_INSTANCE_ID =
AttributeKey.stringKey("service.instance.id");

// cloud attributes
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 CloudPlatformIncubatingValues {
public static final String AZURE_VM = "azure_vm";
public static final String AZURE_AKS = "azure_aks";
public static final String AZURE_FUNCTIONS = "azure_functions";
public static final String AZURE_APP_SERVICE = "azure_app_service";

private CloudPlatformIncubatingValues() {}
}

public static final class CloudProviderIncubatingValues {
public static final String AZURE = "azure";

private CloudProviderIncubatingValues() {}
}

// deployment attributes
public static final AttributeKey<String> DEPLOYMENT_ENVIRONMENT_NAME =
AttributeKey.stringKey("deployment.environment.name");

// host attributes
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");

// faas attributes
public static final AttributeKey<String> FAAS_INSTANCE = AttributeKey.stringKey("faas.instance");
public static final AttributeKey<Long> FAAS_MAX_MEMORY = AttributeKey.longKey("faas.max_memory");
public static final AttributeKey<String> FAAS_NAME = AttributeKey.stringKey("faas.name");
public static final AttributeKey<String> FAAS_VERSION = AttributeKey.stringKey("faas.version");

// host attributes
static final AttributeKey<String> K8S_CLUSTER_NAME = AttributeKey.stringKey("k8s.cluster.name");

// OS attributes
public static final AttributeKey<String> OS_TYPE = AttributeKey.stringKey("os.type");
public static final AttributeKey<String> OS_VERSION = AttributeKey.stringKey("os.version");

private IncubatingAttributes() {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,15 @@ protected ResourceProvider getResourceProvider(Supplier<Optional<String>> client

@Override
protected String getPlatform() {
return CloudIncubatingAttributes.CloudPlatformValues.AZURE_AKS;
return CloudIncubatingAttributes.CloudPlatformIncubatingValues.AZURE_AKS;
}

@Override
protected void assertDefaultAttributes(AttributesAssert attributesAssert) {
attributesAssert
.containsEntry(CLOUD_PROVIDER, "azure")
.containsEntry(CLOUD_PLATFORM, CloudIncubatingAttributes.CloudPlatformValues.AZURE_AKS)
.containsEntry(
CLOUD_PLATFORM, CloudIncubatingAttributes.CloudPlatformIncubatingValues.AZURE_AKS)
.containsEntry(K8sIncubatingAttributes.K8S_CLUSTER_NAME, "macikgo-test-may-23");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
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.DeploymentIncubatingAttributes.DEPLOYMENT_ENVIRONMENT;
import static io.opentelemetry.semconv.incubating.DeploymentIncubatingAttributes.DEPLOYMENT_ENVIRONMENT_NAME;
import static io.opentelemetry.semconv.incubating.HostIncubatingAttributes.HOST_ID;
import static io.opentelemetry.semconv.incubating.ServiceIncubatingAttributes.SERVICE_INSTANCE_ID;

Expand Down Expand Up @@ -53,7 +53,7 @@ void defaultValues() {
CLOUD_RESOURCE_ID,
"/subscriptions/TEST_WEBSITE_OWNER_NAME/resourceGroups/TEST_WEBSITE_RESOURCE_GROUP/providers/Microsoft.Web/sites/TEST_WEBSITE_SITE_NAME")
.containsEntry(CLOUD_REGION, TEST_REGION_NAME)
.containsEntry(DEPLOYMENT_ENVIRONMENT, TEST_WEBSITE_SLOT_NAME)
.containsEntry(DEPLOYMENT_ENVIRONMENT_NAME, TEST_WEBSITE_SLOT_NAME)
.containsEntry(HOST_ID, TEST_WEBSITE_HOSTNAME)
.containsEntry(SERVICE_INSTANCE_ID, TEST_WEBSITE_INSTANCE_ID)
.containsEntry(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,15 @@ protected ResourceProvider getResourceProvider(Supplier<Optional<String>> client

@Override
protected String getPlatform() {
return CloudIncubatingAttributes.CloudPlatformValues.AZURE_VM;
return CloudIncubatingAttributes.CloudPlatformIncubatingValues.AZURE_VM;
}

@Override
protected void assertDefaultAttributes(AttributesAssert attributesAssert) {
attributesAssert
.containsEntry(CLOUD_PROVIDER, "azure")
.containsEntry(CLOUD_PLATFORM, CloudIncubatingAttributes.CloudPlatformValues.AZURE_VM)
.containsEntry(
CLOUD_PLATFORM, CloudIncubatingAttributes.CloudPlatformIncubatingValues.AZURE_VM)
.containsEntry(CLOUD_REGION, "westus")
.containsEntry(
CLOUD_RESOURCE_ID,
Expand Down
Loading