跳转至

SDK 初始化

Windows SDK 的 C# 和 Native C/C++ 初始化参数使用相同的数据语义。C# 通过 GuanceConfig 创建客户端;Native 通过 guance_sdk_config 创建不透明 Handle。

Application 配置

GuanceSdk.Init(new GuanceConfig
{
    DatawayUrl = "https://openway.guance.com",
    ClientToken = "<client-token>",
    RumAppId = "<rum-app-id>",
    ServiceName = "desktop-client",
    Env = "prod",
    Version = "1.0.0"
});
guance_sdk_config config;
guance_sdk_config_init(&config);
config.dataway_url = "https://openway.guance.com";
config.client_token = "<client-token>";
config.rum_app_id = "<rum-app-id>";
config.service_name = "native-client";
config.env = "prod";
config.version = "1.0.0";

guance_sdk_handle rum = guance_sdk_init(&config);
if (rum == nullptr) {
    // 初始化失败。
}

Native 结构必须先调用 guance_sdk_config_init(),确保未显式设置的字段使用当前版本默认值。

基础配置

语义 .NET / C# Native C/C++ 默认值 必填
公网 DataWay 地址 DatawayUrl dataway_url 条件必填
本地环境部署地址 DatakitUrl datakit_url 条件必填
Client Token ClientToken client_token 使用 DataWay 时必填
RUM 应用 ID RumAppId rum_app_id
服务名 ServiceName service_name df_rum_windows / df_rum_windows_native
环境 Env env prod
应用版本 Version version 1.0.0
调试诊断 Debug 构建自动输出(无配置项) debug — / 0 否;仅在本地输出 SDK 诊断,不通过 Logging Intake 上报

C# 的 Env 支持 prodgrayprecommonlocal。同一个配置至少设置一种上报地址。

文件缓存与数据传输

语义 .NET / C# Native C/C++ 默认值
磁盘缓存总上限 Cache.MaxDiskBytes max_cache_bytes 128 MiB
缓存文件数上限 Cache.MaxFiles max_cache_files 1024
缓存批次最长保留时间 Cache.MaxAge max_cache_age_seconds 7
单批数据条数 Cache.MaxBatchItems max_batch_items 50
单批未压缩字节数 Cache.MaxBatchBytes max_batch_bytes 512 KiB
HTTP 超时 HttpTimeout http_timeout_ms 10
缓存位置 CacheDirectory cache_path SDK 默认目录
代理 自定义 HttpMessageHandlerFactory proxy_url
周期 Flush FlushInterval flush_interval_ms .NET 与 Native 均默认 15
Intake 压缩 CompressIntakeRequests compress_intake_requests .NET 默认 true;Native 默认 1(开启)

磁盘缓存总上限由 RUM、Log 和 Session Replay 共享;三类数据使用独立批次和上传计数,但不再分别配置队列条目或字节上限。C# 还可以通过 Cache.LowWatermarkRatio 和三个 *Share 参数控制回收水位与软配额,通过 Upload 配置聚合上传速率;Native 使用对应的 max_upload_* 字段。HttpResourceTimingProvider 可用于提供真实网络阶段耗时。

Native 必须通过 guance_sdk_config_init() 取得 flush_interval_mscompress_intake_requests 的默认值。周期 Flush 会把未达到条数或字节上限的 RUM、Log 批次封装并调度上传;flush_interval_ms 小于或等于 0 时回退为 15000 毫秒。.NET 与 Native 默认使用 zlib 包装的 Deflate 压缩 RUM 和 Log Intake 请求体,并设置 Content-Encoding: deflate。C# 设置 CompressIntakeRequests = false、Native 设置 compress_intake_requests = 0 可关闭压缩;表中的批次字节上限始终按压缩前大小计算。

本地环境部署(Datakit)

GuanceSdk.Init(new GuanceConfig
{
    DatakitUrl = "http://127.0.0.1:9529",
    RumAppId = "<rum-app-id>",
    ServiceName = "desktop-client",
    Env = "local",
    Version = "1.0.0"
});
guance_sdk_config config;
guance_sdk_config_init(&config);
config.datakit_url = "http://127.0.0.1:9529";
config.rum_app_id = "<rum-app-id>";
config.service_name = "native-client";
config.env = "local";
guance_sdk_handle rum = guance_sdk_init(&config);

配置生命周期

  • C# GuanceConfigGuanceClient 生命周期内由 SDK 持有,不要重复调用 GuanceSdk.Init() 切换配置。
  • Native 初始化期间会复制 guance_sdk_config 字符串。guance_sdk_init() 返回后可以释放原始字符串。
  • Native Trace/资源过滤等回调配置会保留函数指针和 user_data,具体生命周期以对应配置页面为准。
  • C# 与 Native 都应在应用进程中只创建一个活动客户端,避免重复采集。

诊断

C# SDK 不提供运行时 Debug 开关。应用使用 Debug 构建或已附加调试器时,SDK 会将自身的队列、传输和自动采集诊断输出到当前进程的 Console 和调试输出;优化的 Release 运行不会自动输出。诊断信息仅用于本地排查,不会作为自定义 Log 写入或上报。

初始化时注册诊断监听:

DiagnosticListener = item =>
    Console.WriteLine($"{item.Level} {item.Source}: {item.Message}")

DiagnosticListener 与构建配置相互独立;即使在 Release 构建中,也可通过监听器接收诊断事件并自行写入应用的日志系统。

读取快照:

var snapshot = GuanceSdk.GetDiagnosticsSnapshot();
Console.WriteLine(
    $"queued={snapshot.RumEventsEnqueued}, " +
    $"uploaded={snapshot.RumUploadSuccessCount}, " +
    $"retries={snapshot.RumUploadRetryCount}");
guance_sdk_diagnostics diagnostics{};
if (guance_sdk_get_diagnostics(rum, &diagnostics)) {
    printf("queued=%lld uploaded=%lld retries=%lld status=%lld error=%lld\n",
        static_cast<long long>(diagnostics.rum_events_enqueued),
        static_cast<long long>(diagnostics.rum_upload_success_count),
        static_cast<long long>(diagnostics.rum_upload_retry_count),
        static_cast<long long>(diagnostics.last_rum_upload_status_code),
        static_cast<long long>(diagnostics.last_rum_upload_error_code));
}

诊断信息不应输出 Client Token、认证 Header 或用户敏感数据。

运行时能力

await GuanceSdk.FlushAsync();
await GuanceSdk.ShutdownAsync();
guance_sdk_flush(rum);
guance_sdk_shutdown(rum);
rum = nullptr;

关闭后不得继续使用客户端或 Native Handle。正常关闭会处理 RUM 与 Log 队列。

相关文档

文档评价

文档内容是否对您有帮助?