@dynatrace/oneagent-sdk

中文文档
1.5.0发布于 2023/02/23Apache-2.0TypeScriptCommonJS零依赖近 30 天下载 4.7万

Dynatrace One Agent 的节点.js SDK

中文使用文档
文档目录25 节
  1. 目录
  2. 软件包内容
  3. 所需资源
  4. 一体化
  5. 安装
  6. 解决问题
  7. API 概念
  8. One AgentSDK 对象
  9. 追踪器
  10. 特征
  11. 跟踪往来远程电话
  12. 追踪消息
  13. 追踪 SQL 数据库请求
  14. 设置自定义请求属性
  15. 计量(过期)
  16. 跟踪上下文
  17. 行政辅助人员
  18. 常数
  19. 传出上下文
  20. 进一步阅读
  21. 帮助支持( S)
  22. 获得帮助
  23. 打开 a GitHub 问题 改为
  24. 顾客可以开罚单 Dynatrace 支持门户 改为
  25. 发布注释

用于节点的 Dynatrace One Agent SDK

这个SDK允许Dynatrace客户使用仪器节点.js应用程序. 这有助于为目前没有直接支持的模块添加服务级别洞察力 一号代理 脱出一出.

这是正式的节点Js执行 单代理 SDK。 。 。 .

目录

软件包内容

  • samples: 样品应用,可以证明SDK的用法. 见 读取我 在样本目录中提供更详细的信息
  • src: SDK 的源代码
  • test: 单位测试
  • LICENSE: 发布整个SDK和样本应用程序的许可证

所需资源

  • 在通过 OneAgent 装入时 一个代理国家预防机制单元 或类似工具,在“单一代理”之后确保要求SDK
  • Dynatrace OneAgent( 需要的版本见下文)
  • OneAgent SDK不支持在无服务器代码模块上,包括用于AWS Lambda的. 在这些设想中,考虑使用 打开几何 换句话说.
One Agent SDK 用于节点.js所需的一个代理版本支助状况
1.5.x (中文(简体) )1.259 国家支助
1.4.x (中文(简体) )1.179 (中文(简体) )支助
1.3.x (单位:千美元)1.165 国 家以2023-08-01结束的支持折旧
1.2.x (单位:千美元)>= 1.145以2023-08-01结束的支持折旧
1.1.x (单位:千美元)>= 1.143以2023-08-01结束的支持折旧
1.0.x (中文(简体) )第1.137号决定以2023-08-01结束的支持折旧

一体化

如果不存在OneAgent,使用此模块不应产生任何错误(例如在测试中).

确保此模块在 Dynatrace OneAgent 后加载 .

安装

npm install --save @dynatrace/oneagent-sdk

解决问题

如果 SDK 无法连接到 OneAgent (当前 SDK 状态 没有 ACTIVE)验证使用了匹配的 OneAgent 版本 并在之前装入 sDK模块.

核实One Agent是否按预期工作(见 一号代理) (中文(简体) ).

您应该确保您已经设置 日志 回电。 。 。 .

透明包装 支持 添加上下文信息的库。 目前每个 不支持 模块 传出上下文 可用于为回调提供交易上下文.

API 概念

Dynatrace OneAgent SDK的共同概念在下文中作了解释 Dynatrace OneAgent SDK 存储器。 。 。 .

One AgentSDK 对象

第一步是通过调用获取 OneAgent SDK API 对象 createInstance()。产生的对象持有创建跟踪器的方法、管理方法(例如检查SDK状态、安装日志回调)和 passContext()。每次呼叫 createInstance() 将返回一个新的 API 对象,允许用户为单独的使用大小写安装单独的登录回调.

const Sdk = require('@dynatrace/oneagent-sdk');
const Api = Sdk.createInstance();

追踪器

追踪器的生命周期如下:

  1. 使用 traceXXX 方法匹配您的使用大小写。 对于进入的可标记标记,将收到的 Dynatrace 标记(如果在) 传递到 traceXXX 方法.
  2. 开始追踪, 追踪又会引用和重复给定的处理器功能 .
  3. 对于正在发送的可标记跟踪, 获取 Dynatrace 标记并将其包含到正在发送的信件中 .
  4. 通过调用可选择标记追踪操作失败 error()
  5. 行动完成后结束追踪. 对于出处的痕迹,您可能会通过回调以包含在这个痕迹中 .

每个追踪器提供以下方法:

  • start(handler, ...args) 启动一个跟踪并用提供的参数调用指定的处理器函数 。 返回处理器的返回值.
  • startWithContext(handler, thisObj, ...args) 喜欢 start() 但允许指定 this 上下文.
  • error(err) 将跟踪标记为失败并附加一个错误对象 。 每次追踪最多一次 不要结束追踪! 返回追踪器本身.
  • end() 结束追踪.

发出请求的追踪器还提供了更好的方法,以结束追踪,从而能够包括后续召回这一追踪的纯正部分.

  • end(callback, ...args) 结束追踪像 end() 但又用给定的论据 调用通过回话 回调的回调值将转发给 end。 。 。 .
  • endWithContext(callback, thisObj, ...args) 喜欢 end() 以上,但有可能具体说明 this 上下文.

发出可标记请求的追踪器 dynathrace 标签 在追踪开始后发送到远程服务 :

  • getDynatraceStringTag() 返回编码为 string
  • getDynatraceByteTag() 返回编码为 Buffer

这个 Dynatrace 标记需要嵌入发送到远程服务的信件中 。 这个 string 或二进制表示可能更适合,取决于所使用的具体协议。 由用户决定使用哪种变体. 输入服务时, 此标签需要用户提取并传递给相应的 traceXXX 方法 dynatraceTag 参数的属性,以便连接出处和相应的出处.

以上方法返回的跟踪对象始终是有效的,即使不存在一个代理人,或者无论出于何种原因都不存在跟踪。 在这种情况下,仍然存在着避免需要额外检查客户代码的方法.

请注意,OneAgent使用指定函数的名称 start() 财务报告和审定财务报表 end() 以命名纯派节点。 因此,我们建议选择命名函数而不是匿名函数,以给你更高的质量痕迹.

特征

功能集与每种语言的应用略有不同。 随着时间的推移将增加更多的功能,参见 OneAgent SDK的计划特性 详细介绍即将到来的特性.

关于特征的更详细说明可见于 单代理 SDK。 。 。 .

特性节点版所需的 OneAgent SDK
跟踪往来远程电话(单位:千美元)
追踪 SQL 数据库请求(单位:千美元)
在 SQL 数据库请求中设置结果数据页:1
设置自定义请求属性(单位:千美元)
追踪消息>= 1.3.0
计量(过期)>= 1.4.0
跟踪上下文>= 1.5.0

跟踪往来远程电话

追踪正在发送的远程呼叫

发送的远程呼叫通过呼叫追踪 traceOutgoingRemoteCall() 传递对象,其属性如下:

  • serviceMethod 强制 - 持有所取远程方法名称的字符串
  • serviceName 强制 - 有远程服务名称的字符串
  • serviceEndpoint 强制 - 描述远程服务的逻辑端点的字符串 。 在组装/负载平衡服务的情况下 serviceEndpoint 代表共同的逻辑终点(例如:register://staging-environment/myservices/ serviceA),而连接Info则描述实际的通信终点. 因此,单一服务端点可以有许多连接.
  • protocolName 可选 - 描述所使用的协议的字符串( 如 Protobuf, GIOP,...), 仅用于显示目的

此外,它还拥有下列特性,说明与远程服务的联系。 根据连接类型,应设定相应的财产/财产. 如果没有像主机/ socketPath/... 这样的特定信息, 属性 channelType 应定.

  • host 在 TCP/ IP 连接时使用指定服务器侧主机名/ IP 的字符串( 注意 OneAgent 可以尝试解决主机名)
  • port TCP/IP 端口( 可选)
  • socketPath 指定 UNIX 域名套接字文件的字符串
  • pipeName 指定管道名称的字符串
  • channelType 指定用作通信信道的协议(如TCP/IP,IN PROCESS,.)。 有效值可通过 频道类型(中文(简体) )

结果是: traceOutgoingRemoteCall() 是一个用于与此跟踪相关的进一步操作的跟踪对象(参见 追踪器 详细情况请查阅. 外传的远程呼叫是 可标记 a Dynatrace 标记必须在其启动并嵌入到远程调用消息内容后从跟踪器创建.

示例(见 正在发送中 详情如下:

// Issue a traced outgoing remote call
async function tracedOutgoingRemoteCall(method, data) {
  const tracer = Api.traceOutgoingRemoteCall({
    serviceEndpoint: "ChildProcess",
    serviceMethod: method,  // the name of the remote method called
    serviceName: "StringManipulator",
    channelType: Sdk.ChannelType.NAMED_PIPE
  });

  try {
    // start tracer, get dynatrace tag and trigger sending via doOutgoingRemoteCall()
    return await tracer.start(function triggerTaggedRemoteCall() {
      // getting a tag from tracer needs to be done after start()
      const dtTag = tracer.getDynatraceStringTag();
      // now trigger the actual remote call
      return doOutgoingRemoteCall(method, data, dtTag);
    });
  } catch (e) {
    tracer.error(e);
    throw e;
  } finally {
    tracer.end();
  }
}

追踪收到的远程呼叫

一个远程呼叫通过呼叫追踪 traceIncomingRemoteCall() 传递对象,其属性如下:

  • serviceMethod 强制 - 持有所取远程方法名称的字符串
  • serviceName 强制 - 有远程服务名称的字符串
  • serviceEndpoint 强制 - 描述远程服务在服务器一侧的逻辑部署端点的字符串
  • protocolName 可选 - 描述所使用的协议的字符串( 如 Protobuf, GIOP,...), 仅用于显示目的
  • dynatraceTag - 一个 string 或者说 Buffer 持有收到的 Dynatrace 标签

此调用的结果是一个用于与此调用相关的进一步操作的跟踪对象(参见: 追踪器) (中文(简体) ).

示例(见 (原始内容存档于2018-10-21) (英语). Incoming Remote CallSample.js 详情如下:

// trace and handle incoming messages
async function tracedMessageHandler(message) {
  const tracer = Api.traceIncomingRemoteCall({
    serviceEndpoint: "ChildProcess",
    serviceMethod: message.method,
    serviceName: "StringManipulator",
    dynatraceTag: message.traceTag,   // extract and set the dynatrace tag
    protocolName: "Json"              // optional
  });

  try {
    // start tracer and trigger actual message processing via processMessage(message)
    const result = await tracer.start(processMessage, message);

    // send result calculated by processMessage() back to caller
    process.send({ result: result, id: message.id });

    // end tracer
    tracer.end();
  } catch (e) {
    // send error back
    process.send({ error: e.message, id: message.id });

    // set error and end tracer
    tracer.error(e).end();
  }
}

追踪消息

追踪寄出的信件

发送的消息通过呼叫追踪 traceOutgoingMessage() 传递对象,其属性如下:

  • vendorName 强制 - 持有消息系统供应商名的字符串(例如:RabbitMq,Apache Kafka,.),可以是用户定义的名称. 如果可能,使用定义在 信件系统版本。 。 。 .
  • destinationName 强制 - 持有目的名的字符串( 如队列名, 主题名) .
  • destinationType 强制性 - 指定目的地类型。 有效值可通过 信件存储类型

此外,它还拥有下列属性,说明与邮件服务的联系。 根据连接类型,应设定相应的财产/财产. 如果没有像主机/ socketPath/... 这样的特定信息, 属性 channelType 应定.

  • host 在 TCP/ IP 连接时使用指定服务器侧主机名/ IP 的字符串( 注意 OneAgent 可以尝试解决主机名)
  • port TCP/IP 端口( 可选)
  • socketPath 指定 UNIX 域名套接字文件的字符串
  • pipeName 指定管道名称的字符串
  • channelType 指定用作通信信道的协议(如TCP/IP,IN PROCESS,.)。 有效值可通过 频道类型(中文(简体) )

结果是: traceOutgoingMessage() 是一个用于与此跟踪相关的进一步操作的跟踪对象(参见 追踪器 详细情况请查阅. 传出的信息是 可标记 a Dynatrace 标记在启动并嵌入到信件内容后,应从追踪器创建.

除了外出追踪器常用的API外,该追踪器还提供了其他方法 setVendorMessageId() 财务报告和审定财务报表 setCorrelationId() 用于更详细地说明发送的信息。 两个API都收到 string 作为通过 correlationId 或者说 vendorMessageId 由短信系统提供.

示例(见 通讯Sample.js 详情如下:

function traceOutgoingMessage(name, data, corrId) {
  // create a tracer instance and start the trace
  const tracer = Api.traceOutgoingMessage(systemInfo);
  tracer.start(function sendTaggedMessage() {
    // getting a tag from tracer needs to be done after start()
    const dtTag = tracer.getDynatraceStringTag();
    try {
      // now trigger the actual sending of the message
      const messageId = sendMessage(name, data, corrId, dtTag);

      // optional: set correlationId/vendorMessageId if present/relevant
      tracer.setCorrelationId(corrId).setVendorMessageId(`${messageId}`);
    } catch (e) {
      tracer.error(e);
      throw e;
    } finally {
      tracer.end();
    }
  });
}

追踪收到的消息

发送的消息通过呼叫追踪 traceIncomingMessage() 传递对象,其属性如下:

  • vendorName 强制 - 持有消息系统供应商名的字符串(例如:RabbitMq,Apache Kafka,.),可以是用户定义的名称. 如果可能,使用定义在 信件系统版本。 。 。 .
  • destinationName 强制 - 持有目的名的字符串( 如队列名, 主题名) .
  • destinationType 强制性 - 指定目的地类型。 有效值可通过 信件存储类型
  • dynatraceTag - 字符串或缓冲器持有收到的 Dynatrace 标签

此外,它还拥有下列属性,说明与邮件服务的联系。 根据连接类型,应设定相应的财产/财产. 如果没有像主机/ socketPath/... 这样的特定信息, 属性 channelType 应定.

  • host 在 TCP/ IP 连接时使用指定服务器侧主机名/ IP 的字符串( 注意 OneAgent 可以尝试解决主机名)
  • port TCP/IP 端口( 可选)
  • socketPath 指定 UNIX 域名套接字文件的字符串
  • pipeName 指定管道名称的字符串
  • channelType 指定用作通信信道的协议(如TCP/IP,IN PROCESS,.)。 有效值可通过 频道类型(中文(简体) )

结果是: traceIncomingMessage() 是一个用于与此跟踪相关的进一步操作的跟踪对象(参见 追踪器 详细情况请查阅.

除了常见的追踪器的API之外,这种追踪器还提供了额外的方法 setVendorMessageId() 财务报告和审定财务报表 setCorrelationId() 用于更详细地说明发送的信息。 两个API都收到 string 作为通过 correlationId 或者说 vendorMessageId 由短信系统提供.

示例(见 通讯Sample.js 详情如下:

function traceIncomingMessage(msg) {
  // create a tracer instance and start the trace, ensure dynatraceTag is set
  const startData = Object.assign({ dynatraceTag: msg.meta.dtTag }, systemInfo);
  const tracer = Api.traceIncomingMessage(startData);
  tracer.start(function processMessage(done) {
    // optional: set correlationId/vendorMessageId if present/relevant
    tracer.setCorrelationId(msg.meta.corrId).setVendorMessageId(`${msg.meta.msgId}`);

    // do whatever needed with the message, simulated via nextTick() here
    process.nextTick(done);
  }, function onDone(err) {
    if (err) {
      tracer.error();
    }
    tracer.end();
  });
}

追踪 SQL 数据库请求

SQL 数据库请求通过调用来追踪 traceSQLDatabaseRequest() 它需要一个数据库信息对象作为第一个参数和一个以请求特定数据为第二个参数的对象.

数据库信息是一个对象,在运行时通常不会改变. 它拥有下列财产:

  • name 强制 - 定义数据库名称的字符串
  • vendor 强制 - 持有数据库供应商名的字符串(例如Oracle, MySQL,.),可以是用户定义的名称. 如果可能,使用定义在 数据库编辑器

此外,它具有下列属性,说明与数据库的连接。 根据所使用的实际连接情况,应设定相应的财产/财产. 如果像主机/ socketPath/... 这样的特定信息不可用, 则应设置属性频道 Type .

  • host 在 TCP/ IP 连接时使用指定服务器侧主机名/ IP 的字符串( 注意 OneAgent 可以尝试解决主机名)
  • port TCP/IP 端口( 可选)
  • socketPath 指定 UNIX 域名套接字文件的字符串
  • pipeName 指定管道名称的字符串
  • channelType 指定用作通信信道的协议(如TCP/IP,IN PROCESS,.)。 有效值可通过 频道类型。 。 。 .

第二种论点载有描述具体操作的数据,并具有以下属性:

  • statement 强制性 - 持有 SQL 语句的字符串, 要发送到数据库 .

结果是: traceSQLDatabaseRequest() 是一个用于与此跟踪相关的进一步操作的跟踪对象(参见 追踪器 详细情况请查阅.

除了外出追踪器常用的API之外,该追踪器还提供了额外的方法 setResultData() 用于确定数据库请求结果的细节. 它接收具有以下属性的对象:

  • rowsReturned 可选 - 此可追踪数据库请求返回的行数 。 只允许正值
  • roundTripCount 可选 - 已发生的圆通数. 只允许正值

请注意,SQL数据库跟踪只有在其他SDK跟踪(如被接入的远程呼叫)或OneAgent内置跟踪(如被接入的网络请求)中出现时才会被创建.

示例(见 数据库请求实例.js 详情如下:

// Static info describing the database
const dbInfo = {
  name: dbConfig.database,
  vendor: Sdk.DatabaseVendor.MARIADB,
  host: dbConfig.host,
  port: dbConfig.port
};

// Issue a traced SQL database request
function tracedSqlDatabaseRequest(sql, clientCb) {
  // create a SQL database tracer
  const tracer = Api.traceSQLDatabaseRequest(dbInfo, {
    statement: sql
  });

  // start tracer, calls connection.query(sql, cb) with connection set as this in query()
  tracer.startWithContext(connection.query, connection, sql, (err, results, fields) => {
    if (err) {
      // set the error on the tracer
      tracer.error(err);
    } else {
      // optionally set result data
      tracer.setResultData({
        rowsReturned: 15,
        roundTripCount: 32
      });
    }
    // end the tracer and call client callback forwarding results
    tracer.end(clientCb, err, results, fields);
  });
}

设置自定义请求属性

API( API ) addCustomRequestAttribute() 在目前追踪的服务呼叫中添加自定义请求属性 。 由于 OneAgent SDK 会选择当前打开的跟踪,所以没有提及需要的跟踪器. 这可能是SDK或 由OneAgent的传感器制造的痕迹 API可能多次被调用来添加更多的属性. 如果同一属性密钥被设置了好几次,那么所有值都会被记录下来.

addCustomRequestAttribute() 需要两个参数:

  • key 强制 - 指定属性名称的字符串
  • value 强制 - 指定属性值的字符串或数字

示例(见 自定义请求属性Sample.js 详情如下:

Api.addCustomRequestAttribute("fooAttribute", "bar");
Api.addCustomRequestAttribute("barAttribute", 15.34);

计量(过期)

说明: 参数 API 属于 Dynatrace 预览程序 这已经是 终止. 与指标有关的所有API和类型 已经 已贬值 并在未来的释放中被移除. 这个 摄取量 网页提供了如何替换这些API和如何报告的进一步资料 从现在起的测量数据.

SDK支持两个 计量值类型数字 : Integer 财务报告和审定财务报表 Float (双精度浮点. 你应该更倾向于整数度量,因为其效率更高,除非精度的丧失是不可接受的(但 考虑使用不同的单位,例如整数微秒而不是浮点秒.

这些不同 各类衡量标准数字 :

  • 计数器: 对于所有正在计数诸如发送/接收字节到/从网络发送/接收的度量标准. 柜台只能用于跟踪流动中的东西,而不是状态. 它报告 sum 并且是最轻量级的.
  • 高盖: 对于定期抽取当前状态的度量,例如温度,总数量 存储在磁盘上的字节。 高盖斯报告a min, (中文(简体) ), max 财务报告和审定财务报表 average 值( 但无) sum) (中文(简体) ).
  • 统计: 对于事件驱动的度量衡,如网络接口的包大小. 最爱 重量度量衡。 报告 min, (中文(简体) ), max, (中文(简体) ), average 财务报告和审定财务报表 count。 。 。 .

每种组合的计量值类型和类型都有自己的创建功能,命名为 create<ValueType><MetricKind>Metric。 。 。 .

在创建以下计量信息时,需要提供:

  • metricName 强制 - 表示度量的字符串 。 最大大小为100字节. 尽管不推荐,但只要使用相同的创建函数(计量值类型和类型是相同的)和相同的选项,可以创建多个同名的度量实例. 否则,多次使用同一种公制名称就是一个错误. 所有同名的度量衡将合并在一起,仿佛您只使用一个度量衡实例.

  • MetricOptions 可选 - a object 具有下列属性:

    • unit 可选 - 在 Dynatrace UI 中浏览公尺时显示的字符串 .
    • dimensionName 可选 - a string 指定在度量衡中添加的尺寸的名称. 如果这里给出了一个名字,则需要在计分标准上定出一个尺寸值. 一个维度就像附加在值上的一个附加标签,例如"disk.write.bytes"的度量衡可以有一个"disk-id"的维度名称,当它加入值时,一个维度值将是"/dev/sda1".

跟踪上下文

实施工作遵循来自 Dynatrace OneAgent SDK - 追踪上下文。 。 。 . 对于一种用法,例如: W3CTrace Context ApiSample.js (英语)。 。 。 .

行政辅助人员

当前 SDK 状态

方法 getCurrentState() 返回 SDK 的当前状态。 通过常数对象提供有效值 SDK.SDKState数字 :

  • ACTIVE SDK连接到OneAgent并捕获数据.
  • TEMPORARILY_INACTIVE SDK与"OneAgent"相接,但捕获被禁用. 跳过创建 SDK 交易以保存资源是一种好的做法 。 应定期检查SDK状态,因为它在每一时间都可能发生变化.
  • PERMANENTLY_INACTIVE SDK没有连接到OneAgent,因此它永远不会捕捉到数据. 这种SDK状态在过程期间永远不会改变. 永远不要调用任何SDK API来节省资源是好的做法.

设置记录的回调

方法 setLoggingCallback(callbacks) 可用于设置提醒和错误日志的回调。 日志调用收到字符串作为参数 。 当参数通过具有以下属性的对象时:

  • warning 可选 - 接受字符串作为参数的函数调用以传递警告消息
  • error 可选 - 接受字符串作为参数的函数调用以传递错误消息

输入回调属性将解开先前安装的回调 .

Api.setLoggingCallbacks({
  warning: (msg) => console.error("DatabaseRequestSample SDK warning: " + msg),
  error: (msg) => console.error("DatabaseRequestSample SDK error: " + msg),
});

常数

频道类型

常数值 ChannelType 指定所使用的运输通道的类型。 提供了以下数值:

  • TCP_IP 通过TCP/IP进行通信
  • UNIX_DOMAIN_SOCKET 通过 UNIX 域名套接字进行通信
  • NAMED_PIPE 通过命名管进行通信
  • IN_PROCESS 交流是当前进程(例如通过文件,......)中的某些机制
  • OTHER 用于其它频道类型

数据库供应商

常数值 DatabaseVendor 可用作 traceSQLDatabaseRequest()提供以下数值:

  • APACHE_HIVE
  • CLOUDSCAPE
  • HSQLDB
  • PROGRESS
  • MAXDB
  • HANADB
  • INGRES
  • FIRST_SQL
  • ENTERPRISE_DB
  • CACHE
  • ADABAS
  • FIREBIRD
  • DB2
  • DERBY_CLIENT
  • DERBY_EMBEDDED
  • FILEMAKER
  • INFORMIX
  • INSTANT_DB
  • INTERBASE
  • MYSQL
  • MARIADB
  • NETEZZA
  • ORACLE
  • PERVASIVE
  • POINTBASE
  • POSTGRESQL
  • SQLSERVER
  • SQLITE
  • SYBASE
  • TERADATA
  • VERTICA
  • CASSANDRA
  • H2
  • COLDFUSION_IMQ
  • REDSHIFT
  • COUCHBASE

信件目标类型

常数值 MessageDestinationType 指定所使用的信件目的类型。 提供了以下数值:

  • QUEUE
  • TOPIC

信息系统供应商

常数值 MessageSystemVendor 可用作 traceIncomingMessage() 财务报告和审定财务报表 traceOutgoingMessage(). 使用这些常数可确保OneAgentSDK捕获的服务得到与通过内置传感器追踪相同的处理。 提供了以下数值:

  • HORNETQ
  • ACTIVE_MQ
  • RABBIT_MQ
  • ARTEMIS
  • WEBSPHERE
  • MQSERIES_JMS
  • MQSERIES
  • TIBCO
  • KAFKA

传出上下文

透明地包装 支持 添加上下文信息的库。 对于所有尚未 不支持 模块 passContext() 可用于为回调提供交易上下文.

交易背景是什么?

Dynatrace 专利纯帕斯技术 抓取时间和代码级别上下文 全部 交易,端到端,从用户点击,跨出所有级别,到记录和回放数据库。 从技术上讲,这意味着Dynatrace在应用程序的任何入出函数调用中都增加了交易上下文.

这对Node.js应用程序意味着什么?

节点(Node.js)是单线形的-它的控制流基于事件和同步回调.

让我们看看一个与mongoDB找到文件的例子:

function callback(err, document) {
  console.log(document.name);

  http.get('https://some-api.xyz/service', (res) => {});
    // ^^^                                 °°°°°°°°°°°
    // Asynchronous call                   Asynchronous callback
}

collection.findOne({_id: doc_id}, callback);
        // ^^^^^^^                °°°°°°°°
        // Asynchronous call      Asynchronous callback

之后 collection.findOne() 同步执行 callback() 将召入. callback() 再次包含一个同步调用 http.get() 执行输出的 HTTP 请求。 如果有当前交易上下文有持续跟踪,Dynatrace OneAgent将透明地在此出行请求中添加包含Dynatrace标记的HTTP头. 下一层----如果配有 " 一个代理人 " ----则将继续追踪。 如果没有进一步的干预,在同步援引和召回之间将失去任何交易上下文。 目前将上下文信息传递给回调的唯一可靠方法叫做"包装".

示例: 常规召回 假设 some.asyncFunction() 以下样本导致OneAgent中交易环境的损失。 确保 OneAgent 正确显示此函数召回内触发的活动 passContext() 用于创建关闭, 保留在调用时激活的交易上下文 some.asyncFunction()。 。 。 .

const Api = require('@dynatrace/oneagent-sdk').createInstance();

some.asyncFunction(someParam, Api.passContext(function(err, result) {
  // Context is preserved
  http.get('https://some-api.xyz/service', Api.passContext((res) => {
    // other activity, e.g. outgoing web requests,...
  }));
}));

重要: 通过 passContext() 需要相应的同步调用时间

// This will *NOT* work as transactional context at call time of some.asyncFunction() is not preserved
// instead the transactional context at definition of doSomething() is preserved which is not
// related to the relevant transaction triggered by calling some.asyncFunction().
const wrappedFunction = dta.passContext(someFunction);
function doSomething() {
  some.asyncFunction('someParam', wrappedFunction);
}

// This works, passContext() is called at invocation time of some.asyncFunction()
function doSomething() {
  some.asyncFunction('someParam', dta.passContext(someFunction));
}

进一步阅读

帮助支持( S)

支助政策

节点的Dynatrace OneAgent SDK具有GA状态. 特征得到Dynatrace的全力支持.

详细支助政策见 Dynatrace One Agent SDK 帮助。 。 。 .

获得帮助

打开 a GitHub 问题 改为

  • 报告小缺陷、小物品或打字
  • 询问 SDK API 的改进或更改
  • 询问与社区工作有关的任何问题

解放军不申请GitHub入场券

顾客可以开罚单 Dynatrace 支持门户 改为

  • 获得Dynatrace技术支持工程小组的支持
  • 管理和解决与产品有关的技术问题

SLA根据客户的支持水平申请.

发布注释

另见 释放

版本说明
1.5.0 (中文(简体) )解析旧的 SDK 版本, 添加 TraceContextInfo 支持
1.4.1 国家与指标有关的类型和API的折旧
1.4.0 (中文(简体) )添加对指标的支持(仅审查)
1.3.0 (单位:千美元)添加支持到跟踪消息
1.2.2 国家别吞了例外
1.2.1 国家改进类型定义
1.2.0 (中文(简体) )添加自定义请求属性的支持
1.1.0 国家为 SQL 数据库跟踪器添加设置ResultData ()
1.0.3 (中文(简体) )早期访问β
1.0.1 (中文(简体) )初步释放

版本与发布记录

@dynatrace/oneagent-sdk 共发布 11 个版本,首次发布于 2018/02/02;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.5.0latest2023/02/233 年前
1.4.12021/01/285 年前
1.4.02019/11/137 年前
1.3.02019/04/127 年前
1.2.22018/12/197 年前
1.2.12018/12/067 年前

关于 @dynatrace/oneagent-sdk 的常见问题

@dynatrace/oneagent-sdk 是什么?

Dynatrace One Agent 的节点.js SDK

如何安装 @dynatrace/oneagent-sdk?

在项目目录运行 npm install @dynatrace/oneagent-sdk,或使用 pnpm add / yarn add / bun add。

@dynatrace/oneagent-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dynatrace/oneagent-sdk 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@dynatrace/oneagent-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 10.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dynatrace/oneagent-sdk 可以商用吗?

@dynatrace/oneagent-sdk 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@dynatrace/oneagent-sdk 的下载量有多少?

根据 npm 官方下载统计,@dynatrace/oneagent-sdk 在 2026/10/13 – 2026/11/11 这 30 天内被下载 47,183 次,日均约 1,573 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dynatrace/oneagent-sdk 还在维护吗?

最新版本 1.5.0 发布于 2023/02/23(3 年前);至今共发布 11 个版本,其中过去 12 个月发布了 0 个;首次发布于 2018/02/02。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。