在nodejs应用程序中访问operationId需要帮助和指导



我们使用nodejs作为后端应用程序,并在前端进行原生反应。以及用于日志记录的azure应用程序见解。在UI端,我们重定向到Stripe结账页面(外部页面(进行付款,然后返回到我们的应用程序的确认页面。在这里,我们正在失去端到端事务的流量。我的要求是将条带前和条带后操作链接到一个流中。为此,我解决这个问题的方法是访问OPERATIONID并将其传递给stripe,然后从stripe接收回来,并在确认页面中使用它,这样我们就可以实现一个流。我需要帮助指导我找到正确的文档/解决方案建议。

我读了一些文章(例如:如何在javascript中获得Application Insights操作id?(,发现操作id是一个uniqueID,它是从我的应用程序中创建的,不能在应用程序中访问它。我试着使用下面的代码,得到了operationID的响应为";ai.operation.id";但这似乎不是operationId的正确模式(值(。

import { defaultClient } from 'applicationinsights';
const telemetryClient = defaultClient;
// tslint:disable-next-line:no-console
console.log(telemetryClient.context.keys[`operationId`]);
operationId的主要功能是帮助跟踪分布式系统,以便关联请求。因此,正如本文在nodejs客户端中给出的那样,您应该将setDistributedTracingMode设置为appInsights.DistributedTracingModes.AI_AND_W3C,如下所示。
const appInsights = require("applicationinsights");
appInsights
.setup("<your ikey>")
.setDistributedTracingMode(appInsights.DistributedTracingModes.AI_AND_W3C)
.start()

您应该能够使用以下代码片段获取操作id。

const AppInsights = require("applicationinsights");
var context = AppInsights.getCorrelationContext();
var oid = context.operation.id;

如果它不能解决您的问题,我建议您自己将telemetry.context.operation.id设置为唯一id,并确认Application Insights是否正确跟踪了这一点。

另请注意,Application Insights的最新版本的JavaScript SDK(SDK v2(对此文档进行了一些更改。

context.operation移动到context.telemetryTrace。一些字段也发生了变化(operation.id->telemetryTrace.traceID(。要保持跟踪ID的唯一性(以前使用Util.newId()的位置(,现在使用Util.generateW3CId()。两者最终都是操作ID。

有关详细信息,请阅读此日志自定义遥测文档。

最新更新