使用 Microsoft.Diagnostics.EventFlow 区分向 AI 发出事件的应用程序
Distinguish applications emitting events to AI using Microsoft.Diagnostics.EventFlow
我在 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 项添加一些自定义 属性。比如,"Service A" 或 "Service B"。理想情况下,我还应该能够添加该服务实例的 PartiotionId 和 ReplicaOrInstanceId,但这是一个额外的好处,没有它我还可以生存。
更新:
作为@cijothomas ,我们可以使用 ITelemetryInitializer。这是可行的,因为 EventFlow 使用 TelemetryConfiguration.Active。我们可以在服务的构造函数中执行此操作:
TelemetryConfiguration.Active.TelemetryInitializers.Add(new TelemetryInitializer("Service A", context.TraceId));
下面是 TelemetryInitializer 的定义 class:
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;
}
}
如果多个应用程序使用相同的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"
我在 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 项添加一些自定义 属性。比如,"Service A" 或 "Service B"。理想情况下,我还应该能够添加该服务实例的 PartiotionId 和 ReplicaOrInstanceId,但这是一个额外的好处,没有它我还可以生存。
更新:
作为@cijothomas
TelemetryConfiguration.Active.TelemetryInitializers.Add(new TelemetryInitializer("Service A", context.TraceId));
下面是 TelemetryInitializer 的定义 class:
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;
}
}
如果多个应用程序使用相同的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"