发布时,Application Insights 不会从 Azure Function 捕获日志
Posted
技术标签:
【中文标题】发布时,Application Insights 不会从 Azure Function 捕获日志【英文标题】:Application Insights does not capture logs from Azure Function when published 【发布时间】:2022-01-11 22:40:05 【问题描述】:我有以下 Azure 函数:
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using System.Threading.Tasks;
internal class ExpServiceFuncApp
[FunctionName("ExpServiceFuncApp")]
public static void Run([TimerTrigger("0 */10 * * * *")] TimerInfo myTimer, ILogger log)
//using var channel = new InMemoryChannel();
try
IServiceCollection services = new ServiceCollection();
//services.Configure<TelemetryConfiguration>(config => config.TelemetryChannel = channel);
//services.AddLogging(builder =>
//
// builder.AddApplicationInsights(KeyVaultConfig.GetSecretValue("InstrumentationKey"));
//)
services.AddSingleton<IDataRec, DataRec.DataRec>()
.AddSingleton<IDataProc, DataProc.DataProc>()
.AddSingleton<IDClient, KustoDClient>()
.AddSingleton<IAzureBlobClient, AzureBlobClient>()
.AddSingleton<IAzureKustoClient, AzureKustoClient>()
.AddSingleton<IQueriesSettings, QueriesSettings>()
.AddSingleton<IServiceSettings, ServiceSettings>()
.AddTransient<IRawData, RawData>();
IServiceProvider serviceProvider = services.BuildServiceProvider();
var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
ILogger logger = loggerFactory.CreateLogger<ExportServiceFunctionApp>();
logger?.LogInformation("Initiate.");
var dataProc = serviceProvider.GetRequiredService<IDataProc>();
logger?.LogInformation("Start Data Process.");
dataProc.Start();
Console.ReadLine();
log.LogInformation($"C# Timer trigger function executed at: DateTime.Now");
catch (Exception ex)
//finally
//
// channel.Flush();
// Task.Delay(5000).Wait();
//
正如你在这里看到的,我在这个类中有一些日志信息,而且我还有其他日志正在被注入到这里的其他类中使用。此外,我将机密存储在 Azure Key Vault 中。这里的问题是,当我将应用程序发布到 azure 时,应用程序洞察力没有跟踪任何这些日志(代码中提到的 log.Information 或 log.Debug 都没有)。您还可以看到,我注释了一些行,我认为这可能有助于跟踪 ApplicationInsights 上的日志,但仍然没有成功。我在 Application Insights 上收到的信息如下:
enter image description here
host.json 如下:
"version": "2.0",
"logging":
"applicationInsights":
"samplingSettings":
"isEnabled": true,
"excludedTypes": "Request"
,
"logLevel":
"Default": "Information",
"Microsoft": "Error"
我真的不知道代码中是否缺少某些内容或错误。老实说,我不知道触发器是否仅自行运行而不每 10 分钟执行一次代码。我真的尝试了几种方法来跟踪这些日志,但它仍然不起作用。谁能给我一个解决这个问题的方法? 请注意,当我将程序作为控制台应用程序运行并在控制台上显示结果时,一切正常。所以我现在从上面的代码中猜测如何将应用程序洞察力与 azure 函数集成的问题。
【问题讨论】:
您是否在 Azure 门户中将应用程序洞察帐户添加到您的函数应用? 您是否尝试过在函数内部使用 go 的 Monitor 功能?即:点击Function app -> 点击functions -> 然后你的函数必须在那里列出,点击相关的function -> 然后点击Monitor. @HariKrishnaRajoli-MT 是的,我在 azure 门户中的函数应用程序中添加了应用程序洞察。我是在visual studio中配置的,配置在Function App的应用程序设置中。 @Dhanushka Rukshan 我试过了。它仍然没有工作。我只收到上图中显示的值。 您没有为应用程序洞察设置正确的日志级别。有关正确配置,请参阅 ***.com/questions/69416109/…。 【参考方案1】:感谢@Peter Bons 的评论。
用下面的 sn-p 修改你的配置
"ApplicationInsights":
"InstrumentationKey": "my-instrumentation-key",
"EnableAdaptiveSampling": false,
"EnablePerformanceCounterCollectionModule": false
,
"Logging":
"LogLevel":
"Default": "Warning"
,
"ApplicationInsights":
"LogLevel":
"Default": "Information"
使用 appsettings.json 在配置中创建过滤规则
在代码中创建过滤规则
详情请参考Application Insights logging with Console application、Integrate Application Insights Into Azure Functions和SO
【讨论】:
@Noobie2021 - 如果我的回答对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢以上是关于发布时,Application Insights 不会从 Azure Function 捕获日志的主要内容,如果未能解决你的问题,请参考以下文章
在 Service Fabric 群集上安装 Application Insights 时出错
使用 Azure Function V2 Durable 函数时,ILogger 不记录到 Application Insights
适用于 .NET Core Azure WebJob 的 Application Insights