Application insights 中间件 - 跟踪 SQL 参数
Application insights middleware - Track SQL parameters
问题:默认应用程序洞察does not track SQL parameters in dependencies telemetry。我想启用参数跟踪或手动添加参数。
小背景:我有 .Net Core 2 应用程序和应用程序洞察力。我正在阅读请求正文并将其保存为自定义 属性 和 TelemetryInitializer
。我迁移到 .Net Core 3,在那里我无法再使用 TelemetryInitializer
作为 .Net Core 3 disabled synchronous IO. Similar issue described here. So I have implemented application insights middleware as per this example。我正在使用 EF Core
进行所有数据库访问。
问题:我发现这个issue说可以“访问TelemetryInitializer中的SqlCommand操作细节”。但是我如何使用 Application Insights 中间件来实现这一点?
您不必为此编写 asp.net 核心中间件。相反,您应该使用 TelemetryInitializer。给定一个像这样的初始化器:
public class CustomInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
if (!(telemetry is DependencyTelemetry supportedTelemetry))
return;
if (supportedTelemetry.Type == "SQL" && supportedTelemetry.TryGetOperationDetail("SqlCommand", out var command))
{
foreach (DbParameter parameter in ((SqlCommand)command).Parameters)
{
supportedTelemetry.Properties.Add(parameter.ParameterName, parameter.Value.ToString());
}
}
}
}
我不明白你为什么这么说
I migrated to .Net Core 3 where I was not able to use TelemetryInitializer anymore as .Net Core 3 disabled synchronous IO
我一直使用 TelemetryInitializers。
我在 App Insights 中将参数视为自定义属性:
供参考:我在我的控制器中使用了这段代码,基于 this tutorial:
using (var bc = new BloggingContext())
{
bc.Database.EnsureCreated();
await bc.Blogs.AddAsync(new Blog
{
Url = "www.blank.com",
Rating = 0
});
await bc.SaveChangesAsync();
}
问题:默认应用程序洞察does not track SQL parameters in dependencies telemetry。我想启用参数跟踪或手动添加参数。
小背景:我有 .Net Core 2 应用程序和应用程序洞察力。我正在阅读请求正文并将其保存为自定义 属性 和 TelemetryInitializer
。我迁移到 .Net Core 3,在那里我无法再使用 TelemetryInitializer
作为 .Net Core 3 disabled synchronous IO. Similar issue described here. So I have implemented application insights middleware as per this example。我正在使用 EF Core
进行所有数据库访问。
问题:我发现这个issue说可以“访问TelemetryInitializer中的SqlCommand操作细节”。但是我如何使用 Application Insights 中间件来实现这一点?
您不必为此编写 asp.net 核心中间件。相反,您应该使用 TelemetryInitializer。给定一个像这样的初始化器:
public class CustomInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
if (!(telemetry is DependencyTelemetry supportedTelemetry))
return;
if (supportedTelemetry.Type == "SQL" && supportedTelemetry.TryGetOperationDetail("SqlCommand", out var command))
{
foreach (DbParameter parameter in ((SqlCommand)command).Parameters)
{
supportedTelemetry.Properties.Add(parameter.ParameterName, parameter.Value.ToString());
}
}
}
}
我不明白你为什么这么说
I migrated to .Net Core 3 where I was not able to use TelemetryInitializer anymore as .Net Core 3 disabled synchronous IO
我一直使用 TelemetryInitializers。
我在 App Insights 中将参数视为自定义属性:
供参考:我在我的控制器中使用了这段代码,基于 this tutorial:
using (var bc = new BloggingContext())
{
bc.Database.EnsureCreated();
await bc.Blogs.AddAsync(new Blog
{
Url = "www.blank.com",
Rating = 0
});
await bc.SaveChangesAsync();
}