如何将正确的标题传递给WebAPI遥测?

时间:2017-10-06 20:14:46

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

首先,我尝试了此Q& A:HttpContext and TelemetryInitializer中的代码,该部分显示“我可以创建一个动作过滤器,每次都设置上下文,但这感觉非常糟糕。”

使用链接代码,我使用调试器断点进行测试,以查看Active字段是否存在全局问题。我只用两个传入的Web请求就完成了这个。

似乎是TelemetryConfiguration.Active.TelemetryInitializers.OfType()。Single()对于每个请求而不是全局请求是不同的。这就是我想要的。但是在生产中我看到了一个竞争条件,即错误的标题被附加到错误的请求上。这是通过检查依赖关系表中的Azure Log Analytics来完成的,特别是操作_与来自我附加到customDimensions的UI的HTTP标头。

鉴于链接的Stackoverflow Q& A评级较低,我决定尝试替代代码,并在此处的官方文档中找到一些代码:https://github.com/Microsoft/ApplicationInsights-aspnetcore/wiki/Configure#add-request-level-properties-for-all-telemetry-items

我仍然在customDimensions中应用了不正确的标头。这可能是由于遥测采样还是其他一些我不知道的原因?

我的ITelemetryInitializer的一般形式:

public class TrackingTelemetryInitializer : ITelemetryInitializer
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public TrackingTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
    {
        this._httpContextAccessor = httpContextAccessor;
    }

    public void Initialize(ITelemetry telemetry)
    {
        if (_httpContextAccessor.HttpContext == null)
        {
            return;
        }

        var headers = _httpContextAccessor.HttpContext.Request.Headers;
        if (headers.ContainsKey("Foobar"))
        {
            telemetry.Context.Properties["Foobar"] = headers["Foobar"];
        }
    }
}

0 个答案:

没有答案