请求传入并由 Azure Functions 运行时处理。默认情况下,它会在 Application Insights 中创建一个请求条目和一堆跟踪条目。 我想向该顶级请求项添加自定义维度(基于每个请求),以便稍后使用它进行过滤/分析。
在 Application Insights 上查询 -requests-
请求的结果列表,包括自定义维度列
Azure Functions 运行时已经添加了一些自定义维度。我想添加一些我自己的。
我发现的最有前途的方法如下所示(取自此处https://github.com/microsoft/ApplicationInsights-node.js/issues/392)
appInsights.defaultClient.addTelemetryProcessor(( envelope, context ) => {
var data = envelope.data.baseData;
data.properties['mykey'] = 'myvalue';
return true;
});
Run Code Online (Sandbox Code Playgroud)
但是,我发现该处理器仅针对我在函数中初始化的请求而调用。例如,如果我向另一个服务发出 HTTP 请求,则该请求的详细信息将通过处理器传递,我可以向其添加自定义属性。但这里main函数好像没有经过。所以我无法添加我的自定义属性。
我也尝试过这个
defaultClient.commonProperties['anotherCustomProp'] = 'bespokeProp2'
Run Code Online (Sandbox Code Playgroud)
同样的问题。自定义属性不会出现在应用程序洞察中。我对此进行了许多变体,看起来 azure-functions 完成的日志记录与我在代码中可以执行的任何操作都是隔离的。
我现在最好的解决方法是手动调用 trackRequest。这没关系,只是我最终在应用程序洞察中将每个请求记录了两次,一次由框架记录,一次由我记录。并且两者都需要具有相同的操作 ID,否则我无法找到关联的跟踪/错误项。所以我不得不以一种稍微有点hacky的方式提取操作Id。这可能没问题,目前我对应用程序洞察的了解还很幼稚。
import { setup, defaultClient } from 'applicationinsights' // i have to import the specific functions, because "import ai from applicationinsights" returns null
// call this because otherwise defaultClient is …Run Code Online (Sandbox Code Playgroud)