Azure functions 应用程序洞察和Azure功能-跟踪分布式操作

Azure functions 应用程序洞察和Azure功能-跟踪分布式操作,azure-functions,azure-application-insights,Azure Functions,Azure Application Insights,我有一个流程,它以以下方式分布在多个功能中: Http绑定函数将消息保存在队列中 队列绑定函数处理消息,然后将另一条消息放入队列中 最后,另一个函数处理消息并将某些内容保存到数据库中 我希望application insights能够理解原始请求的上下文,并能够跟踪所有分布式函数调用中的请求流,但似乎没有一种方法可以让我正确设置操作id(我认为这最终是实现我的需求的“正确”方法) 我可以设置父id,但这只会阻止收集的数据显示在application insights中。我正在使用以下代码设置父i

我有一个流程,它以以下方式分布在多个功能中:

Http绑定函数将消息保存在队列中 队列绑定函数处理消息,然后将另一条消息放入队列中 最后,另一个函数处理消息并将某些内容保存到数据库中

我希望application insights能够理解原始请求的上下文,并能够跟踪所有分布式函数调用中的请求流,但似乎没有一种方法可以让我正确设置操作id(我认为这最终是实现我的需求的“正确”方法)

我可以设置父id,但这只会阻止收集的数据显示在application insights中。我正在使用以下代码设置父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(将所有操作链接在一起的东西),并将合成源设置为“函数”,这样至少我知道它不是真正的用户

这是我用来实现这一目标的代码:

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

现在在application insights中,我可以单击“为用户显示时间线”,一起查看功能组的所有执行情况,但这感觉非常错误,必须有更好的方法来实现这一点

对于任何正在寻找答案的人,您唯一能做的就是禁用application insights中的自动日志记录,而是全部手动完成

这篇博文帮了我很多忙:

Per,看起来他们以前或现在都在做这件事。是否知道截至2019年8月是否有任何更新?