避免 severity-level-0 登录来自函数应用程序的应用程序洞察
Avoid severity-level-0 logging in application insights from function app
在我的 Azure 解决方案中,我有 1 个应用服务和 2 个功能应用记录到 1 个应用程序洞察实例。在特定环境中我想减少日志记录负载,所以我想摆脱 severity-level-0 日志。
我目前专注于其中一个功能应用程序,我们称它为 fa1。我使用 ILogger 作为 LogDebug 添加的日志记录语句没有像预期的那样显示在应用程序洞察中。但是我可以在 application insights 中看到以下条目:
- “在 ClientRequestId 为‘{...}’的队列‘{...}’上轮询函数‘{name of function in fa1}’,在 5 毫秒内发现 0 条消息。”
- “函数‘{name of function in 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);
。
None 的设置有效,上面提到的日志条目不断出现。
请注意,我设置警告只是为了测试。最后我想要信息。
我该怎么做才能摆脱那些严重级别为 0 的日志条目?
查看不同的日志类别here。
我会说减少日志记录但保留请求和依赖项等重要信息将 Microsoft
、Worker
和 Function.<YOUR_FUNCTION_NAME>
类别设置为 LogLevel 警告(或 none ), 但保留 Function.<YOUR_FUNCTION_NAME>.User
和所有其他信息。这将删除大部分日志记录,但会保留门户中可用的统计信息和 success/failure 日志。
通过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>
是一个棘手的类别。它会生成有用的日志和一些噪音。尝试将警告和信息作为日志级别,看看哪种最适合您。
编辑
您配置功能的方式是错误的。 Application Insights 由 Azure Functions 自动添加 (source)。如果你想直接使用 TelemetryClient
你需要添加 NuGet 包 Microsoft.Azure.WebJobs.Logging.ApplicationInsights 就是这样。
默认集成将从 host.json
文件中获取配置。现在您正在手动设置日志记录,这将忽略设置,因为未加载配置。这就是为什么消息 Poll for function '{name of function in fa1}' on queue '{...}' with ClientRequestId '{...}' found 0 messages in 5 ms . 属于类别 Microsoft.Azure.WebJobs.Host.Queues.Listeners.QueueListener 已记录但未过滤。所以删除你在问题中显示的代码。
在我的 Azure 解决方案中,我有 1 个应用服务和 2 个功能应用记录到 1 个应用程序洞察实例。在特定环境中我想减少日志记录负载,所以我想摆脱 severity-level-0 日志。
我目前专注于其中一个功能应用程序,我们称它为 fa1。我使用 ILogger 作为 LogDebug 添加的日志记录语句没有像预期的那样显示在应用程序洞察中。但是我可以在 application insights 中看到以下条目:
- “在 ClientRequestId 为‘{...}’的队列‘{...}’上轮询函数‘{name of function in fa1}’,在 5 毫秒内发现 0 条消息。”
- “函数‘{name of function in 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);
。
None 的设置有效,上面提到的日志条目不断出现。
请注意,我设置警告只是为了测试。最后我想要信息。
我该怎么做才能摆脱那些严重级别为 0 的日志条目?
查看不同的日志类别here。
我会说减少日志记录但保留请求和依赖项等重要信息将 Microsoft
、Worker
和 Function.<YOUR_FUNCTION_NAME>
类别设置为 LogLevel 警告(或 none ), 但保留 Function.<YOUR_FUNCTION_NAME>.User
和所有其他信息。这将删除大部分日志记录,但会保留门户中可用的统计信息和 success/failure 日志。
通过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>
是一个棘手的类别。它会生成有用的日志和一些噪音。尝试将警告和信息作为日志级别,看看哪种最适合您。
编辑
您配置功能的方式是错误的。 Application Insights 由 Azure Functions 自动添加 (source)。如果你想直接使用 TelemetryClient
你需要添加 NuGet 包 Microsoft.Azure.WebJobs.Logging.ApplicationInsights 就是这样。
默认集成将从 host.json
文件中获取配置。现在您正在手动设置日志记录,这将忽略设置,因为未加载配置。这就是为什么消息 Poll for function '{name of function in fa1}' on queue '{...}' with ClientRequestId '{...}' found 0 messages in 5 ms . 属于类别 Microsoft.Azure.WebJobs.Host.Queues.Listeners.QueueListener 已记录但未过滤。所以删除你在问题中显示的代码。