我有一个以以下方式分布在多个功能中的过程:
Http绑定功能将消息保存在队列中 队列绑定功能处理消息,然后将另一条消息放入队列中 最后,另一个函数处理该消息并将某些内容保存在数据库中。
我希望获得应用程序见解,以了解原始请求的上下文并能够在所有分布式函数调用中跟踪请求的流程,但是似乎没有一种方法可以设置正确的操作ID(我相信这最终是实现我的要求的“正确”方法)。
我可以设置父ID,但这只会阻止收集的数据完全显示在应用程序见解中。我正在使用以下代码设置父ID:
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;
}
我可以实现我想要的唯一方法是将用户ID设置为我想要的上下文ID(将所有操作链接在一起的东西),并将合成源设置为“ Functions”,因此在至少我知道这不是真正的用户。
这是我用来实现此目的的代码:
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";
}
现在,在应用程序洞察力内部,我可以单击“显示用户的时间轴”并一起查看功能组的所有执行,但这感觉很错误,因此必须有一种更好的方法来实现。
答案 0 :(得分:2)
对于任何寻求答案的人,唯一的方法就是从应用程序见解中禁用自动日志记录,而是手动完成所有操作。
此博客文章对我有很大帮助:https://azure-development.com/2017/12/15/end2end-monitoring-of-azure-functions-with-application-insights/