我在 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建议的那样,我们可以使用 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;
}
}