我正在使用 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 。
关于asp.net-core - 存储在 key 保管库中时未拾取 InstrumentationKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64878387/