Rerun 匿名使用统计 SDK(re_analytics)完全指南:数据采集机制、隐私边界与一键关闭方法
发布时间:2026/9/15 14:35:19 作者:尧图编辑部 阅读量:1,286
完全指南:数据采集机制、隐私边界与一键关闭方法)
Rerun 匿名使用统计 SDKre_analytics完全指南数据采集机制、隐私边界与一键关闭方法【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun导读re_analytics是 Rerun 可视化生态多模态机器人数据可视化、查询与流式训练平台中负责匿名使用统计的官方 SDK。它基于 PostHog 采集 Viewer 的高层使用事件用于帮助开发团队了解功能使用情况、确定功能优先级。本文将从 README 出发结合仓库源码crates/utils/re_analytics详细讲解如何用rerun analytics系列命令查看、关闭统计数据采集的完整事件清单与隐私边界以及底层写前日志 后台管道的实现原理让你既能放心使用也能完全掌控自己的数据。一、re_analytics 是什么re_analytics是 Rerun 家族 crate 中的匿名使用统计 SDK对应源码目录为 crates/utils/re_analytics。它的核心职责在 lib.rs 的文档注释中写得很明确We never collect any personal identifiable information. You can always opt-out withrerun analytics disable.它有两个值得强调的默认行为源码注释中明确承诺首次启动不采集任何数据第一次启动 Rerun Viewer 时不会发送任何统计事件给你机会先选择退出详见 lib.rs 与 native/pipeline.rs 中is_first_run分支。收集到的数据发送并存储在欧盟境内的服务器上README 原文Usage data we do collect will be sent to and stored in servers within the EU.。从 Cargo.toml 可以看到它的依赖结构内部依赖re_build_info构建信息、re_log日志、re_quota_channel配额通道外部依赖crossbeam通道与线程、ehttpHTTP 请求、serde/serde_json序列化、sha2哈希、uuidID 生成、jiff时间戳、urlURL 解析。它同时支持原生平台native与 Web/WASM 平台web模块通过cfg(target_arch wasm32)区分。二、一键掌控rerun analytics 系列命令README 给出了最核心的两个命令而完整的子命令定义在 crates/top/rerun/src/commands/analytics/mod.rs 中对应实现位于 cli.rs命令作用底层实现rerun analytics config打印当前 analytics 配置含配置文件与数据目录的路径用于审计实际发出的数据cli::print_config()输出 JSON 格式配置rerun analytics disable关闭全部使用数据采集推荐方式cli::opt(false)将analytics_enabled写为falsererun analytics enable重新开启 analyticscli::opt(true)rerun analytics clear删除所有 analytics 相关数据清空尚未发送的待发数据并重置 analytics ID会先询问确认[y/N]cli::clear()rerun analytics details打印完整的匿名数据采集说明退出方式、采集内容、不采集内容cli::print_details()rerun analytics email email将邮箱与当前用户关联仅供 Rerun 团队内部使用README 明确提示普通用户不要执行cli::set()如何审计实际发出的数据README 指出你可以直接检查 Rerun 数据目录来审计实际发送的数据。先运行rerun analytics config拿到配置中的data_dir_path后数据目录下会按会话生成session_id.json文件里面就是当前会话累积的待发送事件JSON Lines 格式每行一个事件。结合 native/pipeline.rs 可以看到事件先写入本地会话文件再定时批量 flush 到远程端点因此这个目录就是可审计的原始数据源。各命令的实现细节optenable/disable加载或新建配置设置analytics_enabled字段后保存并向 stderr 打印 Analytics enabled/disabledcli.rs。clear依次询问并删除配置目录与数据目录cli.rs删除前会交互式确认避免误删。config直接把序列化后的Config结构以 pretty JSON 打印到 stdoutcli.rs。三、退出机制全景哪些情况下数据不会被采集README 提到 debug 构建默认关闭、可用环境变量FORCE_RERUN_ANALYTICS1打开。结合 native/pipeline.rs 的Pipeline::new完整的关闭开关优先级如下环境变量FORCE_RERUN_ANALYTICS1强制开启仅用于 debug 构建下调试开发。配置文件analytics_enabled falsererun analytics disable的结果关闭采集。环境变量CI存在在 CI 环境下自动关闭避免污染统计。testingfeature编译期启用testingfeature 时关闭Cargo.toml 注释During testing, analytics are disabled.。debug 构建cfg!(debug_assertions)默认关闭这正是 README 所说debug builds 中 analytics 默认关闭的源码实现。首次运行is_first_run为 true 时不发送任何数据native/pipeline.rsREADME 也强调首次启动给你退出机会。初始化失败配置加载失败或管道启动失败时Analytics::global_or_init()返回None所有record调用静默失效lib.rs。其中第 5 条值得注意官方发布的 release 构建非 debug默认是开启的如果你在意隐私请用rerun analytics disable显式关闭。四、采集什么事件清单与字段明细README 明确指出所有采集事件的完整定义集中在 crates/utils/re_analytics/src/event.rs该文件注释还提醒文件被多处链接引用不可随意移动/重命名。这是审计数据采集范围的第一手权威来源。4.1 事件类型EventKind每个事件都有类型定义在 lib.rsEventKind用途Append向时间序列追加新事件例如每次应用启动Identify启动时采集环境信息OS、Rust 版本等与 analytics ID 关联SetPersonProperties设置已登录用户的属性登录后把匿名 ID 与认证用户关联4.2 高层事件总览README 举例说明了两个事件而 event.rs 实际定义了更完整的集合事件名触发时机关键属性crash-panicpanic 崩溃由re_crash_handler触发匿名化 callstack、message、file_line、build_infocrash-signal收到信号崩溃signal、callstack、build_info$identify启动时识别环境rust/llvm/python 版本、opt-in 元数据、build_infoviewer_startedViewer 首次启动app_env、runtime_infois_docker/is_wsl/图形后端/设备等级/屏幕信息、hashed_root_domainopen_recording打开新录制application_id、recording_id、store_source、store_version、data_sourceload_data_source打开文件/URL 等数据源source_type、file_extension、file_source、catalog_kind、started_successfullyserve_wasmWeb Viewer 服务 Wasm 文件无属性help-button-clicked首次点击帮助按钮无属性settings-opened打开设置界面无属性cli_command_invoked运行任意 Rerun CLI 命令command、subcommand、web_viewer/serve_web/connect 等 12 个 flagwelcome_navigation欢迎页卡片点击card_type、destination、cta_cloud、is_logged_in、has_server$set用户登录email、organization_idagent_turn_usage/agent_turnViewer 中 Agent 面板完成一轮对话duration_secs、outcome、tool_calls、tokens_used 等统计量后者含脱敏后的 prompt/response 文本README 中提到的 Viewer Opened 对应源码中的viewer_startedData Source Connected 对应open_recording/load_data_source一类事件它们帮助团队估算使用频率、判断用户更倾向实时数据源还是回放录制从而决定功能优先级。4.3 事件关联的元数据每个事件还会附带README 原文 源码印证构建元数据BuildInfo::serialize会写入features、git_hash、rerun_version、rust_version、llvm_version、target、build_date、debug、rerun_workspace等字段lib.rs。持久随机 IDanalytics_id用于跨会话关联事件rerun analytics clear可重新生成。每次会话还会生成独立的session_idnative/config.rs 中#[serde(skip, default ::uuid::Uuid::new_v4)]。哈希后的 application_id / recording_id判断用户是常看少数应用还是大量临时脚本。Id::Official官方示例记录完整 IDId::Hashed用户应用则只记录哈希值event.rs。运行时信息是否运行在 Docker/WSL、wgpu 图形后端、设备 tier粗略能力分级刻意不采集详细驱动信息以避免指纹识别、屏幕像素密度与缩放ViewerRuntimeInformation/ScreenInfoevent.rs。4.4 URL 的脱敏处理viewer_started与open_recording中的 URL 不会原样上报extract_root_domain只提取根域名若根域名是rerun.io才记录完整rerun_url否则只记录hashed_root_domainSHA-256 哈希event.rs。测试用例test_root_domainevent.rs验证了localhost、127.0.0.1等本地域名返回None、非法 URL 返回None。五、不采集什么隐私边界README 的隐私承诺在源码中都有对应实现不采集个人身份信息PII如用户名、IP 地址。README 明确指出No Personally Identifiable Information, such as user name or IP address, is collected if you dont log in to our cloud services。首次启动打印的DISCLAIMERlib.rs也逐条列出We dont log IP addresses. We dont log your user name, file paths, or any personal identifiable data.。唯一例外登录 Rerun 云服务时登录事件会携带你的邮箱和组织README 原文对应SetPersonProperty事件$setemail organization_id。不采集用户写入 Rerun 的业务数据README 明确 No user data logged to Rerun is collected——点云、图像、文本日志等日志数据永远不会被采集DISCLAIMER 中也有同样声明。敏感标识只取哈希用户提供的application_id等名称仅采集带盐哈希见下文并只在有明确需求且不会泄露专有信息时才这么做README 原文take great care do this only when we have a clear understanding of why its needed and it wont risk leaking anything potentially proprietary。哈希实现带盐 SHA-256Property::hashed()lib.rs对属性值做 SHA-256 摘要并使用一个固定随机盐d6d6bed3-028a-49ac-94dc-8c89cfb19379来renders pre-built rainbow tables useless使预计算的彩虹表失效。Bool 按字节、Integer/Float 按小端字节、String 按原文参与哈希最终输出十六进制字符串。六、底层原理基于写前日志WAL的至少一次管道README 承诺可以审计实际发送的数据而可靠性来自 native/pipeline.rs 中一套精心设计的管道事件写入 ──► 本地会话文件WAL ──► 定时批量 flush ──► PostHogSink ──► https://tel.rerun.io6.1 双线程架构catchup 线程pipeline_catchup启动时扫描数据目录把历史遗留的会话文件逐行反序列化后 flush 到 sink成功后删除文件。这保证了进程异常退出崩溃、SIGINT、SIGKILL后未发送的数据能在下次启动时补发。realtime 线程pipeline循环select!监听两个信号源——crossbeam::channel::tick(tick)定时器默认 2 秒一个 tick见 lib.rsDuration::from_secs(2)与事件通道有界容量 2048见 native/pipeline.rs。6.2 至少一次语义at-least-once源码注释明确说明这是一个 eventual, at-least-once(-ish) event pipeline。写入本地文件的 flush 完全交给 OS 页缓存Flushing of the WAL is entirely left up to the OS page cache因此最坏情况下会出现重复数据但不会丢失重复可在查询时去重。两个保证细节事件先追加到session_id.jsonappend_eventflush 成功后才set_len(0)截断文件若截断失败下次会重发导致重复native/pipeline.rs。写入失败时事件会被重新放回通道尾部重试native/pipeline.rsJSON 半写损坏的行会在读取时被丢弃。6.3 优雅降级analytics 永远不能阻塞主流程代码中处处体现analytics must never be in the way的设计哲学管道线程被刻意遗忘drop handles不 join绝不延迟关闭流程事件通道满时直接丢弃事件并打 trace 日志try_send_eventnative/pipeline.rs所有日志级别只用trace/debug不打扰用户lib.rsAnalytics的Drop实现会在退出时尽力阻塞 flush但失败也只记 debug 日志lib.rs。6.4 发送端点与 PostHog 协议遥测端点为https://tel.rerun.ionative/sink.rsHTTP 请求由ehttp发起异步回调处理结果。请求体是 posthog.rs 定义的PostHogBatch包含公开的 PostHog 项目 keyPUBLIC_POSTHOG_PROJECT_KEY与事件数组。事件按EventKind映射为 PostHog 三种协议Append → Capture、Identify → Identify、SetPersonProperties → Alias($set)每个事件都携带session_id属性posthog.rs。6.5 WebWASM平台web/pipeline.rs 与 web/config.rs 提供浏览器端实现配置使用 Web Storage 持久化且 Web 端保存配置时不打印免责声明lib.rs。Web 端无法阻塞等待 flushNOTE: cant block on web。七、配置文件结构可读、可审计Config结构定义在 native/config.rs通过ProjectDirs::from(, , rerun)定位到系统标准配置目录配置文件名为analytics.json字段类型说明analytics_enabledbool是否启用rerun analytics disable写 falseanalytics_idString持久随机 ID有意不用 UUID 类型便于手工构造clear后重置session_idUUID会话 ID序列化时跳过serde(skip)每次启动生成metadataHashMapString, Propertyopt-in 元数据rerun analytics email写入config_file_pathPathBuf配置文件路径data_dir_pathPathBuf待发送数据目录路径is_first_runbool是否首次运行序列化时跳过由配置文件是否存在决定注意代码中所有字段的#[serde(rename)]注释是 to avoid a potential catastrophe避免未来字段改名造成配置破坏。八、如何在自己代码中发送事件Event / Properties traitre_analytics 不只是给 Rerun 内部用也提供了公开 API。README 提到可通过analytics helper cli即rerun analytics email关联邮箱而编程接口的完整用法见官方示例 examples/end_to_end.rsuse re_analytics::{Analytics, AnalyticsEvent, Event, Properties}; fn main() - Result(), Boxdyn std::error::Error { re_log::setup_logging(); let analytics Analytics::global_or_init().expect(Failed to initialize analytics); let application_id end_to_end_example.to_owned(); let recording_id uuid::Uuid::new_v4().simple().to_string(); println!(any non-empty line written here will be sent as an analytics datapoint); loop { let mut input String::new(); std::io::stdin().read_line(mut input)?; let input input.trim(); if !input.is_empty() { analytics.record(InputFilled { application_id: application_id.clone(), recording_id: recording_id.clone(), body: input.to_owned(), }); } } } struct InputFilled { application_id: String, recording_id: String, body: String, } impl Event for InputFilled { const NAME: static str input_filled; // 事件名建议用 snake_case } impl Properties for InputFilled { fn serialize(self, event: mut AnalyticsEvent) { let Self { application_id, recording_id, body } self; event.insert(application_id, application_id); event.insert(recording_id, recording_id); event.insert(body, body); } }关键 API 说明来自 lib.rsEventtrait定义事件常量NAME约定 snake_case与可选的KIND默认Append。Propertiestrait定义serialize(self, event: mut AnalyticsEvent)把字段写入事件。re_build_info::BuildInfo也实现了该 trait因此任何事件想附带构建信息只需在自己的serialize中调用build_info.serialize(event)代码注释中明确说明这种复用设计。AnalyticsEvent::insert/insert_opt插入属性insert_opt仅在值为Some时插入Append事件会自动附带event_id从 1 开始的自增计数lib.rs以及默认附加属性。Property类型Bool/Integer/Float/String四种可从bool、i64、f32、f64、String、str自动转换。全局入口Analytics::global_or_init()禁用时返回None、re_analytics::record()、is_enabled()调用昂贵逻辑前先检查、flush_blocking(timeout)原生平台。单元测试 lib.rs 验证了事件序列化格式time_utc必须是 RFC3339 格式如2025-04-03T01:20:10.557958200Z、kind/name/props字段结构正确并验证时间戳接近当前时刻。九、为什么采集这些数据README 的答案是简单一句To improve the Rerun open source library.改进开源库本身。落到具体场景viewer_started帮助估算 Rerun 的使用频率open_recording/load_data_source帮助判断用户倾向实时数据源还是回放录制从而决定功能优先级哈希后的application_id/recording_id帮助判断用户是固定使用少数应用还是大量临时脚本崩溃事件crash-panic/crash-signal帮助定位稳定性问题。这些目标与 README 的表述一一对应也都能在 event.rs 的结构化字段中看到设计意图。十、总结与快速参考你的需求操作想查看采集了什么数据rerun analytics config查看数据目录直接读session_id.json或阅读事件定义 event.rs想关闭全部统计rerun analytics disable推荐永久生效想重置匿名 ID 并清空待发数据rerun analytics clear有确认提示想查看完整说明rerun analytics details官方 release 构建的默认状态开启debug 构建默认关闭可用FORCE_RERUN_ANALYTICS1强制开启数据流向欧盟境内服务器PostHog端点https://tel.rerun.io一句话结论re_analytics 是一个默认不采集隐私、采集内容全部可审计、随时可一键关闭的匿名统计 SDK——你日志进 Rerun 的点云、图像与文本数据永远不会被采集你只需要在首次运行后用一条rerun analytics disable命令就能彻底掌握自己的数据主权。【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考