Azure 服务总线元数据作为 Application Insights 中的依赖属性

问题描述 投票:0回答:1

我有一个从外部接收数据的网络服务。此数据将发布在 Azure ServiceBus 上。该数据包含一个唯一的 ID,我想在 Application Insights 中记录我的分布式跟踪。 这可以通过使用

telemetryClient.StartOperation
并填充
Properties
字典来实现。这会在端到端交易详细信息中创建一个新行,我希望避免这种情况。

可以创建一个依赖于

ITelemetryInitializer
IHttpContextAccessor
,并使用它根据 Web 请求向遥测添加属性。

我的问题是:当消息被放到 ServiceBus 上时,我可以做同样的事情吗?或者有没有办法将数据添加到当前

ITelemetry
上下文?

azure-application-insights azureservicebus
1个回答
0
投票

我的问题是:当消息被放到 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:

enter image description here

下面我们可以看到消息处理自定义事件数据:

enter image description here

详细: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.