【问题标题】:Distinguish applications emitting events to AI using Microsoft.Diagnostics.EventFlow使用 Microsoft.Diagnostics.EventFlow 区分向 AI 发出事件的应用程序
【发布时间】:2020-01-25 22:11:34
【问题描述】:

我在 Azure Service Fabric 中运行了两个服务。现在,我想从两者中捕获一些事件并将它们重定向到同一个 AI 实例。

我的 eventFlowConfig.json 看起来像这样:

{
    "inputs": [
        {
            "type": "EventSource",
            "sources": [
                {
                    "providerName": "My-Provider-Name"
                }
            ]
        }
    ],
    "outputs": [
        {
            "type": "ApplicationInsights",
            "instrumentationKey": "AI_INSTRUMENTATION_KEY"
        }
    ],
    "schemaVersion": "2016-08-11"
}

这很好用。但是有一个问题:在 AI 中,我无法判断特定跟踪项是来自服务 A 还是服务 B。因此,我需要一种方法来为来自特定应用程序(服务)的 AI 项添加一些自定义属性。例如,“服务 A”或“服务 B”。理想情况下,我还应该能够添加该服务实例的 PartiotionId 和 ReplicaOrInstanceId,但这是我可以生存的奖励。

更新:

作为@cijothomas suggested,我们可以使用 ITelemetryInitializer。这是因为 EventFlow 使用 TelemetryConfiguration.Active。我们可以在服务的构造函数中这样做:

TelemetryConfiguration.Active.TelemetryInitializers.Add(new TelemetryInitializer("Service A", context.TraceId));

这里是 TelemetryInitializer 类的定义:

class TelemetryInitializer : ITelemetryInitializer
{
    private readonly string _roleName;
    private readonly string _roleInstance;

    public TelemetryInitializer(string roleName, string roleInstance)
    {
        _roleName = roleName;
        _roleInstance = roleInstance;
    }

    public void Initialize(ITelemetry telemetry)
    {
        telemetry.Context.Cloud.RoleName = _roleName;
        telemetry.Context.Cloud.RoleInstance = _roleInstance;
    }
}

【问题讨论】:

    标签: azure-application-insights event-flow


    【解决方案1】:

    如果同一个 ikey 用于多个应用程序,则可以使用它们的 cloudRoleInstance 来区分它们。如果它没有自动填充,那么您可以编写自己的遥测初始化程序来正确填充它。 https://docs.microsoft.com/en-us/azure/azure-monitor/app/api-filtering-sampling#add-properties-itelemetryinitializer

    item.Context.Cloud.RoleInstance = "service A or B"

    【讨论】:

    • 对不起,我应该在这里更清楚,因为这个问题是在 EventFlow 图书馆的上下文中(从我提供的配置的名称和结构中可以明显看出)。这个库似乎将“cloud_RoleInstance”设置为其运行的虚拟机的名称,我看不到如何自定义它。
    • 经过一番调查,似乎 EventFlow(间接)使用 TelemetryConfiguration.Active,因此您建议的方法确实有效。我已经更新了我的问题以包含代码。
    猜你喜欢
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多