asp.net-core - 存储在 key 保管库中时未拾取 InstrumentationKey

标签 asp.net-core botframework azure-keyvault

我正在使用 key-vault 来存储我的 bot v4 解决方案中使用的所有 key 。我怀疑 InstrumentationKey 没有被正确拾取。 key-vault 中的 ApplicationInsights- InstrumentationKey 的名称应该是什么。

在 appsetting.json 中, key 添加如下:

 "ApplicationInsights": {
    "InstrumentationKey": "xxxx-xxxx-xxx-xxxx-xxx"   }.

最佳答案

我也遇到了同样的问题。以下是我在 ASP.NET Core MVC 5 应用程序中解决该问题所遵循的步骤:

  • Program.cs 文件中,用于在生产环境中从 Key Vault 添加配置值的代码(基于 https://learn.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-5.0#use-managed-identities-for-azure-resources ):

    public static IHostBuilder CreateHostBuilder(string[] args) =>
         Host.CreateDefaultBuilder(args)
             .ConfigureAppConfiguration((context, config) =>
             {
                 if (context.HostingEnvironment.IsProduction())
                 {
                     var builtConfig = config.Build();
    
                     var azureServiceTokenProvider = new AzureServiceTokenProvider();
                     var keyVaultClient = new KeyVaultClient(
                         new KeyVaultClient.AuthenticationCallback(
                             azureServiceTokenProvider.KeyVaultTokenCallback));
    
                     config.AddAzureKeyVault(
                         $"https://{builtConfig["KeyVaultName"]}.vault.azure.net/",
                         keyVaultClient,
                         new DefaultKeyVaultSecretManager());
                 }
             })
             .ConfigureWebHostDefaults(webBuilder =>
             {
                 webBuilder.UseStartup<Startup>();
             });
    
  • Azure Key Vault 中创建一个名为“ApplicationInsights--InstrumentationKey”的新 key ,并为其指定生产应用程序见解检测 key 的值。为了使您的应用服务能够与 key 保管库通信并读取 secret ,您需要首先为您的 azure 应用服务启用系统分配的服务标识,然后创建一个 key 用于获取、列出 secret 操作的保管库访问策略,并将策略分配给之前创建的系统分配的服务身份

  • appSettings.Production.json文件中:

     {
      "Logging": {
         "LogLevel": {
           "Default": "Information",
           "Microsoft": "Warning",
           "Microsoft.Hosting.Lifetime": "Information"
         }
       },
       "KeyVaultName": "{your-keyvault-name}",
       "ApplicationInsights": {
         "CloudRoleName": "TinyCrm.Web.Prod",
         "DisableTelemetry": false,
         "EnableAdaptiveSampling": true
       }
     }
    
  • 为了注册 aspnet core DI 框架的应用程序洞察特定内容,我创建了以下扩展方法。我正在使用 Microsoft.ApplicationInsights.AspnetCore 版本 2.17.0 nuget 包。 (考虑到这里写的内容https://learn.microsoft.com/en-us/azure/azure-monitor/app/asp-net-core#user-secrets-and-other-configuration-providers):

     public static IServiceCollection AddApplicationInsights(this IServiceCollection services, IConfiguration configuration)
     {
         // Register the settings for "ApplicationInsights" section as a service for injection from DI container
         var applicationInsightsSettings = new ApplicationInsightsSettings();
         configuration.Bind(ApplicationInsightsSettings.ApplicationInsightsSectionKey, applicationInsightsSettings);
         services.AddSingleton(applicationInsightsSettings);
    
         // Use telemetry initializers when you want to enrich telemetry with additional information
         services.AddSingleton<ITelemetryInitializer, CloudRoleTelemetryInitializer>();
    
         // Remove a specific built-in telemetry initializer
         var telemetryInitializerToRemove = services.FirstOrDefault<ServiceDescriptor>
                             (t => t.ImplementationType == typeof(AspNetCoreEnvironmentTelemetryInitializer));
    
         if (telemetryInitializerToRemove != null)
         {
             services.Remove(telemetryInitializerToRemove);
         }
    
         // You can add custom telemetry processors to TelemetryConfiguration by using the extension method AddApplicationInsightsTelemetryProcessor on IServiceCollection. 
         // You use telemetry processors in advanced filtering scenarios
         services.AddApplicationInsightsTelemetryProcessor<StaticWebAssetsTelemetryProcessor>();
    
         // The following line enables Application Insights telemetry collection.
         services.AddApplicationInsightsTelemetry();
    
         return services;
     }
    
  • Startup.cs文件中:

     public void ConfigureServices(IServiceCollection services)
     {
         services.AddControllersWithViews();
    
         // Call the extension method we created above
         services.AddApplicationInsights(Configuration);
     }
    
  • 重要说明:创建新的 Azure 应用服务时,请确保不从 Azure 应用服务创建向导自动启用 Application Insights Telemetry 集成(见下图)。相反,您可以自己创建应用程序见解资源,并按照上述步骤将您的应用程序设置为在生产环境中使用检测 key 。

Azure App Service Creation Wizard

关于asp.net-core - 存储在 key 保管库中时未拾取 InstrumentationKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64878387/

相关文章:

c# - PasswordHasher 方法的用户参数有什么用?

c# - Enterprise Bot 模板无法在单步 WaterfallDialog 中恢复 MainDialog

Python Azure 函数 - 使用 Key Vault 进行 MSI 身份验证

asp.net-core - 从(虚拟)波浪号引用路径获取完整 URL

c# - 如何在 Asp.Net Core MVC 的 ExceptionFilter 中返回带有模型的 View

c# - 在 ASP.NET Core 中的每个操作之前查询数据库以获取角色授权

node.js - Botframework( Node )- 对话框数据剥离正则表达式

botframework - Microsoft QnA 制造商是否使用 LUIS?

c# - Azure Active Directory 应用服务无法使用用户凭据/ token 连接到 Azure Keyvault

azure - 从 Azure Functions 访问 Azure Key Vault 时访问被拒绝