如何在 javascript 中获取 Application Insights 操作 ID?

Use*_*rol 5 javascript azure node.js azure-application-insights azure-functions

我有一个用 javascript 编写的 Azure Function 应用程序,它集成了 Application Insights:

const AppInsights = require("applicationinsights");

AppInsights.setup(appInsightsInstrumentationKey);
AppInsights.defaultClient.context.tags[
    AppInsights.defaultClient.context.keys.cloudRole
        ] = "My back-end";
AppInsights.start();
Run Code Online (Sandbox Code Playgroud)

模块版本为 1.7.4。

我确实需要访问当前操作 ID 以将其发送到我的自定义日志,以便与 Azure 中的 AI 日志相关联。在我的函数中,我试过这个:

var telemetry = appInsights.defaultClient;
var oid = telemetry.context.tags["ai.operation.id"]; // does not work
var oid = telemetry.context.operation.id; // does not work
Run Code Online (Sandbox Code Playgroud)

尽管如此,AI 还是会以某种方式收集它,因此我可以在 Azure 门户中看到它:

在此处输入图片说明

如何operation_id在运行时访问Azure 函数中的值?

Ste*_*dis 0

阅读nodejs客户端中的文档,我认为你必须setDistributedTracingModeappInsights.DistributedTracingModes.AI

这就是 operationId 正在做的事情,它有助于跟踪分布式系统,以便您可以关联请求。

文档页面

let appInsights = require("applicationinsights");
appInsights.setup("<instrumentation_key>")
    .setDistributedTracingMode(appInsights.DistributedTracingModes.AI)
    .start();
Run Code Online (Sandbox Code Playgroud)

operationId 是由 Application Insights SDK 自动添加到每个请求上的值,但显然是在稍后阶段,当您尝试访问它时还为时过早。这就是黑盒解决方案的问题。但你可以先尝试自己设置。自行将 telemetry.context.operation.id 设置为唯一 ID,并确认 ApplicationInsights 是否正确跟踪该 ID。