Azure Function 异常在 Application Insights 中全部显示为 RpcException

问题描述 投票:0回答:1

我正在 .NET 7 上的隔离进程中运行 Azure Function (V4)。 所有异常在 Azure Application Insights 中都显示为 RpcExceptions。看起来我的函数被包装在这个“Invoke”中,并且它只能返回 RpcException 而不是我显式抛出的 AppUserException。

这会导致数据非常不清楚。我能做什么?

我刚刚做了一个新功能来测试它:

<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.21.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.18.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="1.0.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Storage" Version="6.0.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Timer" Version="4.2.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.13.0" />
namespace FunctionApp1
{
    public class Function1
    {
        private readonly ILogger _logger;

        public Function1(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<Function1>();
        }

        [Function("Function1")]
        public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            throw new AppUserException("usererror");
        }
    }
}

image image

program.cs

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureAppConfiguration(builder =>
    {
        // KeyVault
        var keyVaultEndpoint = GetKeyVaultEndpoint();
        if (string.IsNullOrWhiteSpace(keyVaultEndpoint))
        {
            throw new Exception("keyVaultEndpoint wasn't provided.");
        }
        var credentials = new DefaultAzureCredential();
        builder.AddAzureKeyVault(new Uri(keyVaultEndpoint), credentials, new KeyVaultSecretManager());

        // Azure App Config
        var azureAppConfigEndpoint = GetAzureAppConfigEndpoint();
        if (string.IsNullOrWhiteSpace(azureAppConfigEndpoint))
        {
            throw new Exception("azureAppConfigEndpoint wasn't provided.");
        }
        builder.AddAzureAppConfiguration(options =>
        {
            options.Connect(azureAppConfigEndpoint)
                .UseFeatureFlags(options =>
                {
                    options.CacheExpirationInterval = TimeSpan.FromSeconds(60);
                });
        });
        builder.AddJsonFile("appsettings.json", optional: true);
    })
    .ConfigureServices(services =>
    {
        services.AddApplicationInsightsTelemetryWorkerService();
        services.ConfigureFunctionsApplicationInsights();
        services.Configure<LoggerFilterOptions>(options =>
        {
            var toRemove = options.Rules.FirstOrDefault(rule => rule.ProviderName
                == "Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider");

            if (toRemove is not null)
            {
                options.Rules.Remove(toRemove);
            }
        });
        services.AddSolutionServices();
    })
    .ConfigureLogging((hostingContext, logging) =>
    {
        // Make sure the configuration of the appsettings.json file is picked up.
        logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
    })
    .Build();
static string? GetKeyVaultEndpoint() => Environment.GetEnvironmentVariable("ASPNETCORE_HOSTINGSTARTUP__KEYVAULT__CONFIGURATIONVAULT");
static string? GetAzureAppConfigEndpoint() => Environment.GetEnvironmentVariable("AZURE_APPCONFIG_ENDPOINT");

host.Run();
c# azure azure-functions azure-application-insights .net-7.0
1个回答
0
投票

看起来 RpcException 是预料之中的。 Github 上有多个与此相关的问题,这似乎是 Application Insights 团队的一个悬而未决的项目。您可以通过以下方式获取有关他们的更多信息:

https://github.com/Azure/azure-functions-dotnet-worker/issues/370

https://github.com/Azure/azure-functions-host/issues/6284

https://github.com/Azure/azure-functions-host/issues/4192#issuecomment-481813144

© www.soinside.com 2019 - 2024. All rights reserved.