У меня есть процесс, который распределен по нескольким функциям следующим образом:
Функция привязки Http сохраняет сообщение в очереди. Функция привязки очереди обрабатывает сообщение, а затем помещает другое сообщение в очередь. Наконец, другая функция.обработать сообщение и сохранить что-либо в базе данных.
Мне бы хотелось, чтобы идеи приложения понимали контекст исходного запроса и могли отслеживать поток запроса по всем вызовам распределенной функции, номне кажется, не существует способа правильно установить идентификатор операции (что, я считаю, в конечном итоге является «правильным» способом выполнения моих требований).
Я могу установить родительский идентификатор, но это просто мешаетданные, собранные из показа вообще в понимании приложения.Я устанавливаю родительский идентификатор, используя следующий код:
private static void UpdateTelemetryContext(TelemetryContext context, ExecutionContext functionContext, string id)
{
context.Operation.Id = functionContext.InvocationId.ToString();
context.Operation.ParentId = id;
context.Operation.Name = functionContext.FunctionName;
}
Единственный способ добиться того, чего я хочу, - это установить идентификатор пользователя в качестве контекста, который я хочу (вещь, которая связываетвсе операции вместе), и установите синтетический источник как «Функции», чтобы, по крайней мере, я знал, что это не настоящий пользователь.
Это код, который я использую для достижения этой цели:
private static void UpdateTelemetryContext(TelemetryContext context, ExecutionContext functionContext, string id)
{
context.Operation.Id = functionContext.InvocationId.ToString();
context.Operation.ParentId = functionContext.InvocationId.ToString();
context.Operation.Name = functionContext.FunctionName;
context.User.Id = id;
context.Operation.SyntheticSource = "Functions";
}
Теперь в обзоре приложений я могу нажать «показать временную шкалу для пользователя» и увидеть все исполнения группы функций вместе, но это кажется настолько неправильным, просто должен быть лучший способ добиться этого.