用于节点的 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();
追踪器
追踪器的生命周期如下:
- 使用
traceXXX方法匹配您的使用大小写。 对于进入的可标记标记,将收到的 Dynatrace 标记(如果在) 传递到traceXXX方法. - 开始追踪, 追踪又会引用和重复给定的处理器功能 .
- 对于正在发送的可标记跟踪, 获取 Dynatrace 标记并将其包含到正在发送的信件中 .
- 通过调用可选择标记追踪操作失败
error() - 行动完成后结束追踪. 对于出处的痕迹,您可能会通过回调以包含在这个痕迹中 .
每个追踪器提供以下方法:
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()返回编码为stringgetDynatraceByteTag()返回编码为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 可以尝试解决主机名)portTCP/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 可以尝试解决主机名)portTCP/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 可以尝试解决主机名)portTCP/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 可以尝试解决主机名)portTCP/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可选 - aobject具有下列属性:unit可选 - 在 Dynatrace UI 中浏览公尺时显示的字符串 .dimensionName可选 - astring指定在度量衡中添加的尺寸的名称. 如果这里给出了一个名字,则需要在计分标准上定出一个尺寸值. 一个维度就像附加在值上的一个附加标签,例如"disk.write.bytes"的度量衡可以有一个"disk-id"的维度名称,当它加入值时,一个维度值将是"/dev/sda1".
跟踪上下文
实施工作遵循来自 Dynatrace OneAgent SDK - 追踪上下文。 。 。 . 对于一种用法,例如: W3CTrace Context ApiSample.js (英语)。 。 。 .
行政辅助人员
当前 SDK 状态
方法 getCurrentState() 返回 SDK 的当前状态。 通过常数对象提供有效值 SDK.SDKState数字 :
ACTIVESDK连接到OneAgent并捕获数据.TEMPORARILY_INACTIVESDK与"OneAgent"相接,但捕获被禁用. 跳过创建 SDK 交易以保存资源是一种好的做法 。 应定期检查SDK状态,因为它在每一时间都可能发生变化.PERMANENTLY_INACTIVESDK没有连接到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_HIVECLOUDSCAPEHSQLDBPROGRESSMAXDBHANADBINGRESFIRST_SQLENTERPRISE_DBCACHEADABASFIREBIRDDB2DERBY_CLIENTDERBY_EMBEDDEDFILEMAKERINFORMIXINSTANT_DBINTERBASEMYSQLMARIADBNETEZZAORACLEPERVASIVEPOINTBASEPOSTGRESQLSQLSERVERSQLITESYBASETERADATAVERTICACASSANDRAH2COLDFUSION_IMQREDSHIFTCOUCHBASE
信件目标类型
常数值 MessageDestinationType 指定所使用的信件目的类型。 提供了以下数值:
QUEUETOPIC
信息系统供应商
常数值 MessageSystemVendor 可用作 traceIncomingMessage() 财务报告和审定财务报表 traceOutgoingMessage(). 使用这些常数可确保OneAgentSDK捕获的服务得到与通过内置传感器追踪相同的处理。 提供了以下数值:
HORNETQACTIVE_MQRABBIT_MQARTEMISWEBSPHEREMQSERIES_JMSMQSERIESTIBCOKAFKA
传出上下文
透明地包装 支持 添加上下文信息的库。 对于所有尚未 不支持 模块 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 (中文(简体) ) | 初步释放 |