ITelemetryProcessor中断依赖关系跟踪



我已经为我的.NET Core 2.1 Web API设置了一个自定义的ITelemetryProcessor。我不希望HTTP状态代码400或401在Application Insights中显示为错误。下面的类可以做到这一点,但一旦我使用它,SQL和HTTP客户端依赖关系跟踪将不再工作:

ApplicationInsights400IsOkProcessor

public class ApplicationInsights400IsOkProcessor : ITelemetryProcessor {
private ITelemetryProcessor Next { get; set; }

/// <summary>
/// Link processors to each other in a chain. 
/// </summary>
/// <param name="next"></param>
public ApplicationInsights400IsOkProcessor(ITelemetryProcessor next) {
this.Next = next;
}
/// <summary>
/// API Aufrufe mit Rückgabecode 400 und 401 sind keine Fehler
/// </summary>
/// <param name="item">Telemetry zum Verarbeiten</param>
public void Process(ITelemetry item) {
var requestTelemetry = item as RequestTelemetry;          
if (requestTelemetry == null) return;
bool parsed = Int32.TryParse(requestTelemetry.ResponseCode, out int code);
if (!parsed) return;
switch (code) {
case 400:
requestTelemetry.Success = true;
requestTelemetry.Context.Properties["Overridden400"] = "true";
break;
case 401:
requestTelemetry.Context.Properties["Overridden401"] = "true";
requestTelemetry.Success = true;
break;
}
this.Next.Process(item);
}

在.NET Core 2.0中,我使用了一个自定义的ITelemetryInitializer,类似于Microsoft的以下示例:https://learn.microsoft.com/en-us/azure/application-insights/app-insights-api-filtering-sampling#add-属性itelemetryinitializer

这是通过在配置服务((中添加以下内容来使用的:

TelemetryConfiguration.Active.TelemetryInitializers
.Add(new MyTelemetryInitializer());

在.NET Core 2.1中,这似乎不再起作用

更新:根据我的回答,cijothomas审查了代码以确保这一点。下一步。在所有情况下都会调用进程(项(。以下是工作版本:

ApplicationInsights400IsOkProcessor

public class ApplicationInsights400IsOkProcessor : ITelemetryProcessor {
private ITelemetryProcessor Next { get; set; }
public ApplicationInsights400IsOkProcessor(ITelemetryProcessor next) {
this.Next = next;
}
public void Process(ITelemetry item) {
if (item is RequestTelemetry requestTelemetry) {
bool parsed = Int32.TryParse(requestTelemetry.ResponseCode, out int code);
if (parsed) {
switch (code) {
case 400:
requestTelemetry.Success = true;
requestTelemetry.Context.Properties["Overridden400"] = "true";
break;
case 401:
requestTelemetry.Context.Properties["Overridden401"] = "true";
requestTelemetry.Success = true;
break;
}
}
}
this.Next.Process(item);
}
}

您没有调用下一个。Process((,因此导致项目被丢弃。您的场景需要使用ITelemetryInitializer,而不是ITelemetryProcessor,因为您只是试图修改自动收集的信息,而不是试图根据条件删除项目。

https://learn.microsoft.com/en-us/azure/application-insights/app-insights-api-filtering-sampling#add-属性itelemetryinitializer

类似以下内容:

public class ApplicationInsights400IsOkInitializer: ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
var requestTelemetry = telemetry as RequestTelemetry;
// Is this a TrackRequest() ?
if (requestTelemetry == null) return;
bool parsed = Int32.TryParse(requestTelemetry.ResponseCode, out int code);
if (!parsed) return;
switch (code) 
{
case 400:
requestTelemetry.Success = true;
requestTelemetry.Context.Properties["Overridden400"] = "true";
break;
case 401:
requestTelemetry.Context.Properties["Overridden401"] = "true";
requestTelemetry.Success = true;
break;
}
}
}

最新更新