我正在.NET核心3.1中开发一个Azure函数。我注意到它并没有将所有想要的数据保存到Azure Insight中。当然,我尝试在本地主机上运行我的函数,并且不仅将日志添加到AI中,而且每次尝试将数据登录到AI中时,我还创建了一个文本文件,其中包含了我想要登录的数据。创建的文本文件的数量与我预期的完全相同,而AI日志中的条目却少得多。
为了禁用采样,我尝试了host.json文件的各种配置,该文件的当前内容是:
"version": "2.0",
"functionTimeout": "-1",
"logging": {
"fileLoggingMode": "always",
"logLevel": {
"default": "Information"
},
"applicationInsights": {
"samplingSettings": {
"isEnabled": false,
"maxTelemetryItemsPerSecond": 10000,
"excludedTypes": "Debug,Trace,Warning,Error,Information,Critical"
}
}
}
}(由于将isEnabled设置为false没有帮助,我也尝试设置足够数量的每秒最大遥测项目,但也没有帮助)
它没有工作(在我的本地计算机上也没有工作,部署在Azure上);我还试图通过代码禁用它:
namespace MyAzureFunction
{
public class MyStartup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
var configDescriptor = builder.Services.SingleOrDefault(tc => tc.ServiceType == typeof(TelemetryConfiguration));
if (configDescriptor?.ImplementationFactory != null)
{
var aiOptions = new ApplicationInsightsServiceOptions();
aiOptions.EnableAdaptiveSampling = false;
var implFactory = configDescriptor.ImplementationFactory;
builder.Services.Remove(configDescriptor);
builder.Services.AddSingleton(provider =>
{
if (implFactory.Invoke(provider) is TelemetryConfiguration config)
{
var newConfig = TelemetryConfiguration.Active;
newConfig.ApplicationIdProvider = config.ApplicationIdProvider;
newConfig.InstrumentationKey = config.InstrumentationKey;
return newConfig;
}
return null;
});
builder.Services.AddApplicationInsightsTelemetry(aiOptions);
}
}
}另外,当我在localhost上运行函数时,我在命令行窗口中看到了这一点:
[2022-08-24T13:37:55.249Z] {
[2022-08-24T13:37:55.250Z] "version": "2.0",
[2022-08-24T13:37:55.252Z] "functionTimeout": "-1",
[2022-08-24T13:37:55.253Z] "logging": {
[2022-08-24T13:37:55.254Z] "fileLoggingMode": "always",
[2022-08-24T13:37:55.255Z] "logLevel": {
[2022-08-24T13:37:55.257Z] "default": "Information"
[2022-08-24T13:37:55.258Z] },
[2022-08-24T13:37:55.259Z] "applicationInsights": {
[2022-08-24T13:37:55.260Z] "samplingSettings": {
[2022-08-24T13:37:55.262Z] "isEnabled": false,
(...)
[2022-08-24T13:37:57.043Z] Initializing Host. OperationId: ...
[2022-08-24T13:37:57.055Z] Host initialization: ConsecutiveErrors=0, StartupCount=1, OperationId=...
[2022-08-24T13:37:57.087Z] ApplicationInsightsLoggerOptions
[2022-08-24T13:37:57.089Z] {
[2022-08-24T13:37:57.089Z] "SamplingSettings": null,
[2022-08-24T13:37:57.090Z] "SamplingExcludedTypes": null,
[2022-08-24T13:37:57.091Z] "SamplingIncludedTypes": null,
[2022-08-24T13:37:57.092Z] "SnapshotConfiguration": null,正如您所看到的,尽管SamplingSettings读取主机配置时关闭了采样,但它是空的,但我无法找到有效禁用它的方法。
发布于 2022-09-06 16:53:17
我试着重复你的问题。我能够获得所有的遥测信息在应用洞察力后,禁用抽样。
解决办法如下
我使用了您使用的相同的host.json文件配置。
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": false,
"maxTelemetryItemsPerSecond": 10000,
"excludedTypes": "Debug,Trace,Warning,Error,Information,Critical"
}
}
}
}禁用startup.cs中的采样
var aiOptions = new ApplicationInsightsServiceOptions();
aiOptions.EnableAdaptiveSampling = false;
builder.Services.AddApplicationInsightsTelemetry(aiOptions);我从获得的结果是:本地的

在Azure host.json中部署相同的功能

用KUDU生成的日志文件

人工智能结果

https://stackoverflow.com/questions/73474282
复制相似问题