Skip to content

Commit

Permalink
fix: Add Azure Function app name prefix to faas.name attribute in A…
Browse files Browse the repository at this point in the history
…zure Function transactions. (#2973)
  • Loading branch information
tippmar-nr authored Jan 30, 2025
1 parent 8812fe1 commit 80d4c76
Show file tree
Hide file tree
Showing 8 changed files with 13 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -271,11 +271,11 @@ private IEnumerable<string> GetApplicationNames()
return appName.Split(StringSeparators.Comma);
}

if (AzureFunctionModeDetected && AzureFunctionModeEnabled && !string.IsNullOrEmpty(AzureFunctionServiceName))
if (AzureFunctionModeDetected && AzureFunctionModeEnabled && !string.IsNullOrEmpty(AzureFunctionAppName))
{
Log.Info("Application name from Azure Function site name.");
_applicationNamesSource = "Azure Function";
return new List<string> { AzureFunctionServiceName };
return new List<string> { AzureFunctionAppName };
}

appName = _environment.GetEnvironmentVariable("RoleName");
Expand Down Expand Up @@ -2185,7 +2185,7 @@ public string AzureFunctionResourceId
return string.Empty;
}

return $"/subscriptions/{subscriptionId}/resourceGroups/{websiteResourceGroup}/providers/Microsoft.Web/sites/{(string.IsNullOrEmpty(AzureFunctionServiceName) ? "unknown" : AzureFunctionServiceName)}";
return $"/subscriptions/{subscriptionId}/resourceGroups/{websiteResourceGroup}/providers/Microsoft.Web/sites/{(string.IsNullOrEmpty(AzureFunctionAppName) ? "unknown" : AzureFunctionAppName)}";
}
}

Expand Down Expand Up @@ -2245,7 +2245,7 @@ public string AzureFunctionSubscriptionId
}
}

public string AzureFunctionServiceName => _environment.GetEnvironmentVariable("WEBSITE_SITE_NAME");
public string AzureFunctionAppName => _environment.GetEnvironmentVariable("WEBSITE_SITE_NAME");
#endregion

#endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,7 @@ public ReportedConfiguration(IConfiguration configuration)
public string AzureFunctionSubscriptionId => _configuration.AzureFunctionSubscriptionId;

[JsonIgnore]
public string AzureFunctionServiceName => _configuration.AzureFunctionServiceName;
public string AzureFunctionAppName => _configuration.AzureFunctionAppName;

public string AzureFunctionResourceIdWithFunctionName(string functionName) => _configuration.AzureFunctionResourceIdWithFunctionName(functionName);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ public interface IConfiguration
string AzureFunctionResourceGroupName { get; }
string AzureFunctionRegion { get; }
string AzureFunctionSubscriptionId { get; }
string AzureFunctionServiceName { get; }
string AzureFunctionAppName { get; }
string AzureFunctionResourceIdWithFunctionName(string functionName);

bool UtilizationDetectAzureFunction { get; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ public AfterWrappedMethodDelegate BeforeWrappedMethod(InstrumentedMethodCall ins
}

transaction.AddFaasAttribute("cloud.resource_id", agent.Configuration.AzureFunctionResourceIdWithFunctionName(functionDetails.FunctionName));
transaction.AddFaasAttribute("faas.name", functionDetails.FunctionName);
transaction.AddFaasAttribute("faas.name", $"{agent.Configuration.AzureFunctionAppName}/{functionDetails.FunctionName}");
transaction.AddFaasAttribute("faas.trigger", functionDetails.Trigger);
transaction.AddFaasAttribute("faas.invocation_id", functionDetails.InvocationId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public void Test_SimpleInvocationMode()
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("cloud.resource_id", out var cloudResourceIdValue));
Assert.Equal("/subscriptions/subscription_id/resourceGroups/my_resource_group/providers/Microsoft.Web/sites/IntegrationTestAppName/functions/HttpTriggerFunctionUsingSimpleInvocation", cloudResourceIdValue);
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("faas.name", out var faasNameValue));
Assert.Equal("HttpTriggerFunctionUsingSimpleInvocation", faasNameValue);
Assert.Equal("IntegrationTestAppName/HttpTriggerFunctionUsingSimpleInvocation", faasNameValue);
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("faas.trigger", out var faasTriggerValue));
Assert.Equal("http", faasTriggerValue);

Expand Down Expand Up @@ -284,7 +284,7 @@ public void Test_PipelineMode()
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("cloud.resource_id", out var cloudResourceIdValue));
Assert.Equal("/subscriptions/subscription_id/resourceGroups/my_resource_group/providers/Microsoft.Web/sites/IntegrationTestAppName/functions/HttpTriggerFunctionUsingAspNetCorePipeline", cloudResourceIdValue);
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("faas.name", out var faasNameValue));
Assert.Equal("HttpTriggerFunctionUsingAspNetCorePipeline", faasNameValue);
Assert.Equal("IntegrationTestAppName/HttpTriggerFunctionUsingAspNetCorePipeline", faasNameValue);
Assert.True(firstTransaction.IntrinsicAttributes.TryGetValue("faas.trigger", out var faasTriggerValue));
Assert.Equal("http", faasTriggerValue);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public void Test()
{
{ "faas.coldStart", true},
//new("faas.invocation_id", "test_invocation_id"), This one is a random guid, not something we can specifically look for
{ "faas.name", "QueueTriggerFunction" },
{ "faas.name", "IntegrationTestAppName/QueueTriggerFunction" },
{ "faas.trigger", "datasource" },
{ "cloud.resource_id", "/subscriptions/subscription_id/resourceGroups/my_resource_group/providers/Microsoft.Web/sites/IntegrationTestAppName/functions/QueueTriggerFunction" }
};
Expand Down Expand Up @@ -92,7 +92,7 @@ public void Test()
Assert.True(transaction.IntrinsicAttributes.TryGetValue("cloud.resource_id", out var cloudResourceIdValue));
Assert.Equal("/subscriptions/subscription_id/resourceGroups/my_resource_group/providers/Microsoft.Web/sites/IntegrationTestAppName/functions/QueueTriggerFunction", cloudResourceIdValue);
Assert.True(transaction.IntrinsicAttributes.TryGetValue("faas.name", out var faasNameValue));
Assert.Equal("QueueTriggerFunction", faasNameValue);
Assert.Equal("IntegrationTestAppName/QueueTriggerFunction", faasNameValue);
Assert.True(transaction.IntrinsicAttributes.TryGetValue("faas.trigger", out var faasTriggerValue));
Assert.Equal("datasource", faasTriggerValue);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4436,7 +4436,7 @@ public void AzureFunctionServiceName_ShouldReturnServiceName_WhenEnvironmentVari
Mock.Arrange(() => _environment.GetEnvironmentVariable("WEBSITE_SITE_NAME")).Returns("some-service-name");

// Act
var result = _defaultConfig.AzureFunctionServiceName;
var result = _defaultConfig.AzureFunctionAppName;

// Assert
Assert.That(result, Is.EqualTo("some-service-name"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ public IReadOnlyDictionary<string, string> GetAppSettings()
public string AzureFunctionResourceGroupName => "AzureFunctionResourceGroupName";
public string AzureFunctionRegion => "AzureFunctionRegion";
public string AzureFunctionSubscriptionId => "AzureFunctionSubscriptionId";
public string AzureFunctionServiceName => "AzureFunctionServiceName";
public string AzureFunctionAppName => "AzureFunctionServiceName";
public string AzureFunctionResourceIdWithFunctionName(string functionName) => $"AzureFunctionResourceId/{functionName}";

public string LoggingLevel => "info";
Expand Down

0 comments on commit 80d4c76

Please sign in to comment.