Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 跟踪Azure函数中的传出请求_C#_Azure_Azure Functions_Azure Application Insights_System.net - Fatal编程技术网

C# 跟踪Azure函数中的传出请求

C# 跟踪Azure函数中的传出请求,c#,azure,azure-functions,azure-application-insights,system.net,C#,Azure,Azure Functions,Azure Application Insights,System.net,作为我们正在构建的基于微服务的解决方案的一部分,我们在一个Azure Function应用程序中拥有许多Azure功能。这些函数协调了对不同API的大量请求,其中一些请求需要很长时间才能完成。我们向函数中添加了应用程序细节,以允许对请求进行一些跟踪,但是依赖项跟踪在Azure函数中还不起作用。可以手动跟踪依赖项,但这涉及到在每个依赖项调用周围插入一些跟踪代码,但是我们希望避免手动跟踪每个调用上的依赖项 我想到的一个解决方案是创建一个请求跟踪器,跟踪函数发出的所有web请求。在请求跟踪器中,我可以

作为我们正在构建的基于微服务的解决方案的一部分,我们在一个Azure Function应用程序中拥有许多Azure功能。这些函数协调了对不同API的大量请求,其中一些请求需要很长时间才能完成。我们向函数中添加了应用程序细节,以允许对请求进行一些跟踪,但是依赖项跟踪在Azure函数中还不起作用。可以手动跟踪依赖项,但这涉及到在每个依赖项调用周围插入一些跟踪代码,但是我们希望避免手动跟踪每个调用上的依赖项

我想到的一个解决方案是创建一个请求跟踪器,跟踪函数发出的所有web请求。在请求跟踪器中,我可以跟踪依赖项请求,包括它们的时间。我想把请求跟踪器挂接到某种web流量处理程序中,不幸的是,我找不到太多这样做的信息。很多人提到使用System.Net trace writer进行此操作,但据我所知,这需要一个Web.config来设置,而函数没有

我看到一些帖子提到创建一个请求包装器,并将其放在我的传出请求上,但不幸的是,这不是一个选项,因为我们使用了许多在内部发出请求的包。如果你有什么想法可以让我走上正确的方向,请让我知道。谢谢


更新:

我添加了以下帮助器方法,它允许我以依赖项请求的形式手动跟踪任务

 public static async Task<T> TrackDependency<T>(this Task<T> task, string dependecyName, string callName, string operationId)
    {
        var telemtryClient = new TelemetryClient();
        var startTime = DateTime.UtcNow;
        var timer = System.Diagnostics.Stopwatch.StartNew();
        var success = true;
        T result = default(T);
        try
        {
            result = await task;
        }
        catch (Exception)
        {
            success = false;
        }
        finally
        {
            timer.Stop();
            var dependencyTelemetry = new DependencyTelemetry(dependecyName, callName, startTime, timer.Elapsed, success);
            dependencyTelemetry.Context.Operation.Id = operationId;
            telemtryClient.Track(dependencyTelemetry);
        }
        return result;
    }

我现在可以在Application Insights中看到各个请求的依赖关系,但很明显,对它们的实际遥测非常有限,它不包含路径信息或其他很多信息。

所以当你说依赖关系跟踪在Azure函数中不起作用时,你的确切意思是什么?您是否已将Application Insights SDK添加并配置到实际功能中?Azure功能的开箱即用监控体验不会自动添加依赖项跟踪,但如果您在功能项目中实际添加/配置Application Insights SDK,它应该开始跟踪其中发生的一切。

,我的意思是,我遵循了在Azure函数中配置应用程序洞察的指南。配置后,我可以看到遥测数据通过,但看不到依赖关系。我做了一些挖掘,发现这是github上提到的一个已知问题。我已经根据需要将SDK添加到函数和所有依赖项中。我假设您需要将AppInsights.Config转换为基于代码的初始化?如果这是一个添加遥测初始值设定项和相关位的问题,这似乎是一个相当简单的解决方案,我通过我在原始帖子中的扩展方法添加了依赖项跟踪,这给了我一些关于依赖项的信息,但是,它必须放在每个电话上,我认为这不是一个好的解决方案,因为它实际上没有向我提供关于请求的很多信息
client.Accounts.UpdateWithHttpMessagesAsync(accountId, account).TrackDependency("Accounts", "UpdateAccounts", requestContextProvider.CorrelationId);