C++ 中如何用 onesdk_stub_set_variable 配置 Dynatrace?
可以在调用 onesdk_initialize() 前,分别调用 onesdk_stub_set_variable() 设置四个变量。第一个参数传入完整的 key=value 字符串,第二个参数决定是否覆盖已有值。该函数由 SDK 提供,应用代码可以直接调用。
参数应该怎样传?
例如:
onesdk_result_t result = onesdk_stub_set_variable(
ONESDK_XSTR("home=/opt/dynatrace/oneagent"),
1
);
replace_existing 为 1 时允许覆盖已有值;为 0 时保留已有值,若键已存在则返回 ONESDK_ERROR_ENTRY_ALREADY_EXISTS。设置成功返回 ONESDK_SUCCESS,格式不正确返回 ONESDK_ERROR_INVALID_ARGUMENT。具体约定见官方初始化 API 文档。
四个变量分别填写什么?
| 变量名 | 内容 | 对应环境变量 |
|---|---|---|
home | OneAgent 安装目录 | DT_HOME |
tenant | Dynatrace 环境 ID | DT_TENANT |
tenantToken | OneAgent 连接 Dynatrace 使用的 token | DT_TENANTTOKEN |
server | Dynatrace Server 或 ActiveGate 的连接地址配置 | DT_CONNECTION_POINT |
tenantToken 应使用 OneAgent 的连接 token,不能用 API token 或 PaaS token 代替。根据官方仓库的 Solaris SPARC 手动配置说明,除 home 外,其余值可从 OneAgent 安装目录下的 dynatrace-env.sh 获取。详见官方配置说明。
C++ 调用示例
下面的示例展示了设置变量和初始化的顺序。运行前需要替换所有占位符,并按实际环境修改安装路径。
#include <onesdk/onesdk.h>
#include <cstdio>
int main() {
onesdk_xchar_t const* const variables[] = {
ONESDK_XSTR("home=/opt/dynatrace/oneagent"),
ONESDK_XSTR("tenant=<DT_TENANT>"),
ONESDK_XSTR("tenantToken=<DT_TENANTTOKEN>"),
ONESDK_XSTR("server=<DT_CONNECTION_POINT>")
};
for (auto variable : variables) {
const onesdk_result_t result =
onesdk_stub_set_variable(variable, 1);
if (result != ONESDK_SUCCESS) {
std::fprintf(stderr, "SDK configuration failed: %d\n",
static_cast<int>(result));
return 1;
}
}
const onesdk_result_t result = onesdk_initialize();
if (result != ONESDK_SUCCESS) {
std::fprintf(stderr, "SDK initialization failed: %d\n",
static_cast<int>(result));
return 1;
}
// Create and use tracers here.
return onesdk_shutdown() == ONESDK_SUCCESS ? 0 : 1;
}
代码需要包含 SDK 头文件,并链接匹配平台的 SDK 库。ONESDK_XSTR 用于构造 SDK 所需字符类型的字符串字面量;示例使用了 C++11 的范围 for 循环。构建配置可参照官方接入说明。
配置时还要注意什么?
这些调用设置的是 SDK 初始化变量。返回成功只表示变量设置成功,不能据此判断连接已经建立或追踪数据已经上报。应继续检查初始化结果,再通过实际 tracer 验证追踪行为。初始化错误可使用 onesdk_stub_xstrerror() 转换为可读信息,参见官方初始化文档。
是否必须手动填写这四项取决于部署环境。官方仓库指出,Solaris SPARC 上早于 1.173 的 agent 不支持自动配置,需要手动提供这些参数。由于没有给出操作系统和 OneAgent 版本,无法判断当前环境是否属于这一情况。详见官方 Solaris SPARC 说明。
示例中的 token 仅为占位符。实际接入时应从受控配置中读取,避免将真实 token 提交到源码仓库或写入日志。
备注:内容仅供参考。
