Warm tip: This article is reproduced from serverfault.com, please click

azure-避免从功能应用程序的应用程序见解中记录严重性级别0

(azure - Avoid severity-level-0 logging in application insights from function app)

发布于 2020-11-27 09:35:05

在我的azure解决方案中,我有1个应用程序服务和2个功能应用程序记录到1个应用程序见解实例。在特定的环境中,我想减少日志记录的负载,所以我想摆脱严重性级别为0的日志。

我目前专注于功能应用程序之一,我们称之为fa1。与预期的一样,我使用ILogger作为LogDebug添加的日志记录语句未显示在应用程序见解中。但是,我可以在应用程序见解中看到以下条目:

  • “在队列'{...}'上对具有ClientRequestId'{...}'的功能'{fa1}中的功能名称进行的轮询在5毫秒内发现了0条消息。”
  • “功能'{fa1中的功能名称}'将在轮询队列'{...}'之前等待60000毫秒。”

我还看到以下条目,但是我不知道哪个服务正在生成它们:

  • “ [HostMonitor]主机进程CPU统计信息:EffectiveCores = 1,CpuLoadHistory =(0,0,0,0,0,0,0,0,0,0),AvgCpuLoad = 0,MaxCpuLoad = 0”
  • “ [HostMonitor]主机聚合CPU负载0”

host.json:

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    },
    "logLevel": {
      "Function": "Warning",
      "default": "Warning"
    }
  }
}

Startup.Configure():

builder.Services.AddLogging(loggingBuilder =>
{
    var key = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY");
    loggingBuilder.AddApplicationInsights(key);
});
builder.Services.AddSingleton(sp => // Needed for injected ILogger<> to log in AI
{
    var key = Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY");
    return new TelemetryConfiguration(key);
});

我也尝试loggingBuilder.AddApplicationInsights(key).SetMinimumLevel(LogLevel.Warning);过。没有任何设置有效,上面提到的日志记录条目不断出现。

请注意,我将警告设置为仅用于测试。最后,我需要信息。

我该怎么做才能摆脱那些严重性为0的日志记录条目?

Questioner
JoaoRibeiro
Viewed
11
Peter Bons 2020-11-30 16:55:22

这里查看不同的日志类别

我会说,减少伐木,但保持重要的信息,如请求和相关设定MicrosoftWorkerFunction.<YOUR_FUNCTION_NAME>分类为LogLevel警告(或没有),但保留Function.<YOUR_FUNCTION_NAME>.User所有其他的信息。这将删除大多数日志记录,但在门户网站中保留统计信息以及成功/失败日志。

这样一来,loggingBuilder.AddApplicationInsights(key).SetMinimumLevel(LogLevel.Warning);你仅更改“功能”类别的日志级别,而不更改其他日志级别。

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    },
    "logLevel": {
      "Function.<YOUR_FUNCTION_NAME>": "Warning",
      "Function.<YOUR_FUNCTION_NAME>.User": "Information",
      "Microsoft": "Warning",
      "Worker": "Warning",
      "default": "Information"
    }
  }
}

该类别Function.<YOUR_FUNCTION_NAME>是一个棘手的类别它会生成有用的日志和一些噪音。尝试将“警告”和“信息”作为日志级别,然后查看最适合你的方法。

编辑 你配置功能的方式是错误的。Azure功能会自动添加Application Insights()。如果要直接使用TelemetryClient,则需要添加NuGet包Microsoft.Azure.WebJobs.Logging.ApplicationInsights,就是这样。

默认集成将从host.json文件中获取配置现在,你正在手动设置日志记录,由于未加载配置,因此将忽略设置。例如,这就是为什么在队列'{...}'上使用ClientRequestId'{...}'的功能'{fa1中的功能名称}'的消息轮询在5毫秒内发现0条消息的原因。属于类别Microsoft.Azure.WebJobs.Host.Queues.Listeners.QueueListener的日志,并且未对其进行过滤。因此,删除你在问题中显示的代码。