应用洞察中间件-跟踪SQL参数

时间:2020-10-08 12:02:45

标签: azure azure-application-insights asp.net-core-3.1 .net-core-3.1

问题:默认情况下does not track SQL parameters in dependencies telemetry是应用程序见解。我想启用参数跟踪或手动添加参数。

背景知识:我使用的.Net Core 2应用程序具有应用程序见解。我正在读取请求正文,并使用TelemetryInitializer将其保存为自定义属性。我迁移到.Net Core 3,在那里我再也无法使用TelemetryInitializer作为.Net Core 3 disabled synchronous IOhere中描述了类似的问题。因此,我根据此example实现了应用程序见解中间件。我正在使用EF Core进行所有数据库访问。

问题:我发现了这个issue,它说可以“在TelemetryInitializer中访问SqlCommand操作详细信息”。但是如何使用应用程序见解中间件来实现这一目标?

1 个答案:

答案 0 :(得分:1)

您不必为此编写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());
                }
            }
        }
    }

我不确定你为什么要说

我迁移到.Net Core 3,由于.Net Core 3禁用了同步IO,我再也无法使用TelemetryInitializer

我一直都在使用TelemetryInitializers。

我在App Insights中将参数视为自定义属性:

enter image description here

供参考:我基于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();
            }