我有一个从外部接收数据的网络服务。此数据将发布在 Azure ServiceBus 上。该数据包含一个唯一的 ID,我想在 Application Insights 中记录我的分布式跟踪。 这可以通过使用
telemetryClient.StartOperation
并填充 Properties
字典来实现。这会在端到端交易详细信息中创建一个新行,我希望避免这种情况。
可以创建一个依赖于
ITelemetryInitializer
的 IHttpContextAccessor
,并使用它根据 Web 请求向遥测添加属性。
我的问题是:当消息被放到 ServiceBus 上时,我可以做同样的事情吗?或者有没有办法将数据添加到当前
ITelemetry
上下文?
我的问题是:当消息被放到 ServiceBus 上时,我可以做同样的事情吗?或者有没有办法将数据添加到当前
上下文?ITelemetry
服务总线消息没有与
IHttpContextAccessor
直接等效的东西,但我们可以通过使用 Application Insights 遥测和自定义遥测初始值设定项来实现。
ServiceBusTelemetryInitializer
。这个类应该实现 ITelemetryInitializer
接口。遥测初始化器:
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.AspNetCore.Http;
public class ServiceBusTelemetryInitializer : ITelemetryInitializer
{
private readonly IHttpContextAccessor _httpContextAccessor;
public ServiceBusTelemetryInitializer(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void Initialize(ITelemetry telemetry)
{
var context = _httpContextAccessor.HttpContext;
if (context != null && context.Items.ContainsKey("ServiceBusData"))
{
var serviceBusData = context.Items["ServiceBusData"] as YourServiceBusDataClass;
telemetry.Context.Properties["ServiceBusUniqueId"] = serviceBusData.UniqueId.ToString();
// Add other relevant properties
}
}
}
Startup.cs
配置服务方法中,我添加了必要的配置来注册遥测初始值设定项。这涉及添加 IHttpContextAccessor
依赖项并配置 Application Insights。在这里我可以获取您可以在下面看到的messageID:
下面我们可以看到消息处理自定义事件数据:
详细: