PAYATHON 2026

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 文档。

四个变量分别填写什么?

变量名内容对应环境变量
homeOneAgent 安装目录DT_HOME
tenantDynatrace 环境 IDDT_TENANT
tenantTokenOneAgent 连接 Dynatrace 使用的 tokenDT_TENANTTOKEN
serverDynatrace 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 提交到源码仓库或写入日志。

备注:内容仅供参考。