azure-functions – Application Insights和Azure Functions – 跟踪分布式操作

我有一个以下列方式分布在多个函数中的进程:

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";
    }

现在,在内部应用程序见解中,我可以单击“显示用户的时间线”并查看功能组的所有执行,但这感觉非常错误,只需要有更好的方法来实现这一点.

最佳答案 对于那些寻找答案的人来说,唯一可以做到这一点的方法是从应用程序洞察中禁用自动日志记录,而是手动完成所有操作.

这篇博文给了我很多帮助:https://azure-development.com/2017/12/15/end2end-monitoring-of-azure-functions-with-application-insights/

点赞