У меня есть две службы, работающие в 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, поступающих из определенного приложения (службы).Например, «Сервис А» или «Сервис Б».В идеале я также должен иметь возможность добавить 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;
}
}