如何在代码中禁用 Application Insights?

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

我有 Blazor Interactive Server 应用程序。它通过 Application Insights SDK 连接到 Application Insights。

如何在某些情况下禁用 Application Insights?

这是我们的情况。我们有几个开发人员在运行/测试代码时在桌面上运行应用程序。他们从不希望 Application Insights 运行。然后,他们将代码推送到 GitHub,在那里进行测试,然后推送到开发槽。仅当我们进行负载测试时,我们才希望 Application Insights 在开发槽上运行。然后,一旦所有测试通过,我们就交换开发和生产槽。我们始终希望使用 Application Insights 来获得生产槽。

Application Insights 已在 Azure App Server 刀片中关闭,因为我们使用 SDK 添加了它。我们无法删除 SDK,因为代码的最终目的地(生产槽)需要将其合并并运行。

如果没有其他方法将其设置为关闭,那么传递无效的连接字符串可能是最好的方法。但我不喜欢这样做,因为它是故意导致错误情况。并调用 Application Insights 方法,例如跟踪搜索时间,然后在每次调用时执行向下传递的代码,然后在尝试发送它时遇到错误。

有什么东西允许 Application Insights 初始化,但告诉它在禁用时快速忽略对其的任何调用?

azure-web-app-service azure-application-insights
1个回答
0
投票

它是否会阻止它连接到 Application Insights 本身,以便它不会收到有关该服务器的任何信息?

要完全阻止本地环境与 Application Insights 连接,您可以仅为生产环境传递连接字符串。

var environment = builder.Environment;
if (environment.IsProduction())
{
    builder.Services.AddApplicationInsightsTelemetry(new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions
    {
        ConnectionString = builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]
    });
}
  • 仅跟踪已部署的应用程序服务的日志信息跟踪。
var app = builder.Build();

var log = app.Services.GetRequiredService<ILogger<Program>>();
log.LogInformation($"Environment : {environment.EnvironmentName}"); // Log the environment name
log.LogInformation("Information Logs");
log.LogInformation("Production Logs");
log.LogInformation("No local");
  • 为了验证环境,我正在跟踪托管环境。

enter image description here

  • 您可以观察到在本地控制台中看不到与 Application Insights 相关的任何痕迹。

enter image description here

  • 在旧版本的 Visual Studi0 2019 中,您可以在
    Tools
    =>
    Options
    =>
    Web Projects
    Projects
    下的
    Solutions
    中看到禁用 Application Insights 的选项。

enter image description here

它是否会阻止它连接到 Application Insights 本身,以便它不会收到有关该服务器的任何信息?

您可以在GitHub

中查看讨论的类似问题

感谢@Callon Campbell的解释。

  • 我尝试过使用
    TelemetryConfiguration.Active.DisableTelemetry
    属性,
if(.IsDevelopment())
{
  TelemetryConfiguration.Active.DisableTelemetry=true;
}

但你可以看到该属性现在已经过时,不是推荐的方式。

enter image description here

  • 最简单的方法是仅传递生产环境的连接字符串(我在初始步骤中已经提到过)。
© www.soinside.com 2019 - 2024. All rights reserved.