Wiki.js 实例遥测会收集哪些信息?离线与开发模式下为何不发送
Wiki.js 实例遥测会收集哪些信息离线与开发模式下为何不发送【免费下载链接】wiki-Wiki.js | Next Generation Open Source Wiki项目地址: https://gitcode.com/GitHub_Trending/wiki78/wiki-部署 Wiki.js 时管理员通常需要回答一个数据合规问题这个实例到底会向外部发送什么、什么时候发送、如何关闭。这篇文章基于当前仓库中的实现列出实例遥测instance telemetry上报的完整字段、离线模式offline与开发模式devMode下不发送的判断逻辑以及如何在管理界面中查看状态、关闭遥测和重置 Client ID。适用于自托管 Wiki.js 并需要确认出站数据范围的管理员文中引用的字段、日志与界面文案均来自仓库源码。实例遥测在什么时机发送发送入口在 telemetry.js 的sendInstanceEvent(eventType)当前代码中有两个触发点实例启动init()中调用this.sendInstanceEvent(STARTUP)telemetry.js 第 16 行安装完成安装流程结束后调用WIKI.telemetry.sendInstanceEvent(INSTALL)setup.js 第 356–357 行条件是WIKI.config.telemetry.isEnabled为真。也就是说遥测不是持续轮询而是在启动和安装完成时各发送一次“实例事件”。上报了哪些字段sendInstanceEvent通过 GraphQL mutationtelemetry { instance(...) }提交到WIKI.config.graphEndpointtelemetry.js 第 29–128 行提交的变量与含义如下变量取值来源说明versionWIKI.version安装的 Wiki.js 版本platformos.platform()映射WINDOWS/MACOS/LINUXosos.type() os.release()Linux 下若存在/.dockerenv文件则os记为Docker用于判断容器化部署architectureos.arch().toUpperCase()不在ARM、ARM64、X32、X64之内时统一记为OTHERdbTypeWIKI.config.db.type大写数据库类型postgres / mysql / mariadb / mssql / sqlitedbVersion按数据库类型查询MySQL/MariaDB 执行SELECT VERSION()MSSQL 执行SELECT VERSIONpostgres 与 sqlite 取 knex 客户端版本号取不到时为UnknownnodeVersionprocess.versionNode.js 版本cpuCoresos.cpus().lengthCPU 核心数ramMBytesos.totalmem()换算内存总量MB四舍五入clientIdWIKI.config.telemetry.clientId安装时随机生成的 UUIDevent入参STARTUP或INSTALL注意上报内容里没有页面内容、用户名、域名或访问统计——这与 admin-utilities-telemetry.vue 管理界面的声明一致“absolutely no private data (such as content or personal data) is collected”。clientId由generateClientId()用uuid()生成并写入实例配置telemetry.js 第 140–143 行管理界面说明它用于“把请求归组到同一个实例同时保持完全匿名”并且可以随时重置。管理界面Utilities 下的 Telemetry 页对“收集什么”还列出了另外两项Crash debug data错误堆栈stack trace of the errorSetup analytics安装流程到达的检查点Installation checkpoint reached。并说明崩溃调试数据最多保存 30 天、分析数据最多保存 16 个月之后永久删除数据仅授权开发者可见不共享给第三方。需要指出的一个来源差异当前 telemetry.js 中sendError()与sendEvent()均为// TODO空实现所以上述“崩溃数据 / 安装检查点”是界面向用户承诺的收集范围而本仓库源码中实际生效的发送只有实例事件STARTUP/INSTALL。以实际出站数据判断时以代码中的 mutation 字段为准。离线模式为何不发送init()的启用条件是telemetry.js 第 14 行if (_.get(WIKI.config, telemetry.isEnabled, false) true WIKI.config.offline ! true) { this.enabled true this.sendInstanceEvent(STARTUP) }即即使telemetry.isEnabled为真只要配置里的offline为true遥测模块的enabled就保持false启动事件也不会发出。offline在 config.sample.yml 第 118–124 行的定义是# --------------------------------------------------------------------- # Offline Mode # --------------------------------------------------------------------- # If your server cannot access the internet. Set to true and manually # download the offline files for sideloading. offline: false也就是说offline: true用于声明“服务器无法访问互联网”同时意味着所有出站行为包括遥测都不会发生——这正是隔离内网实例时的数据出口之一。开发模式为何不发送sendInstanceEvent的第一行判断telemetry.js 第 26 行if (WIKI.devMode || !this.enabled) { return }只要WIKI.devMode为真直接返回不组装也不发送任何数据。devMode的赋值在 config.js 第 77 行WIKI.devMode (packageInfo.dev true)它取自所运行包的package.json中的dev字段。因此开发构建源码本地调试启动的实例即使把遥测开关打开也不会上报只有正常发布的安装包才会走发送路径。如何查看当前遥测状态方式一管理界面。以管理员身份进入 Administration → Utilities → Telemetry 页admin-utilities-telemetry.vue页面顶部显示 “Enable Telemetry” 开关和当前 Client ID下方有 “Reset Client ID” 按钮。方式二GraphQL 查询。界面本身使用的查询见 utilities-query-telemetry.gqlquery { system { info { telemetry telemetryClientId } } }其中telemetry为布尔值当前开关状态telemetryClientId为 Client ID。按 system.graphql 第 97–98 行这两个字段带auth(requires: [manage:system])只有具备manage:system权限的角色能读到值否则返回空。方式三启动日志。每次实例事件发送后代码会写入日志telemetry.js 第 130–135 行可用于判断发送结果Telemetry is active: [ OK ] # 发送成功info 级 Failed to send instance telemetry: message # 发送失败warn 级如果日志中出现第一行说明遥测已启用且请求被接收出现第二行时message为服务端返回的失败原因。如何关闭遥测或重置 Client ID在 Telemetry 管理页勾选/取消 “Enable Telemetry” 后点击 “Save Changes”前端执行setTelemetrymutation见 system.graphql 第 35–37 行setTelemetry(enabled: Boolean!)要求manage:system权限。服务端把telemetry.isEnabled写入实例配置并立即更新内存中的开关system.js 第 79–81 行。成功后界面弹出提示 “Telemetry updated successfully.”此时enabled置为false下一次启动即不会再发送STARTUP事件。重置 Client ID 点击 “Reset Client ID” 按钮执行resetTelemetryClientIdmutation成功后提示 “Telemetry Client ID reset successfully.”界面随即重新拉取并显示新的 ID。重置只改变匿名归组标识不影响遥测开关状态。遥测开关在初次安装向导中设置setup.vue 第 74–79 行复选框默认勾选文案为 “Help Wiki.js developers improve this app with anonymized telemetry.”因此已存在的实例如需调整应在安装完成后通过上述管理页操作。限制与边界本仓库实际发送的只有STARTUP/INSTALL两种实例事件管理界面声明的崩溃数据与安装检查点属于界面向用户说明的收集范围而当前源码中对应的sendError()、sendEvent()是// TODO空实现判断出站数据时两者存在口径差异。offline: true在 config.sample.yml 的说明中同时要求手动下载离线文件用于 sideloading它是“无互联网”场景的整体开关副作用是全部联网行为被切断不只是遥测。开发模式的判断依据是安装包package.json的dev字段无法通过配置文件临时关闭生产安装包该值不为true此路径对生产实例不生效。telemetry与telemetryClientId查询字段需要manage:system权限普通登录用户在 GraphQL 层读不到这两个值。完成核对的标志是GraphQL 查询返回的telemetry值与你的预期一致false表示已关闭关闭后的下一次启动日志中不再出现Telemetry is active: [ OK ]若仍需要保留遥测但希望切断匿名归组可单独执行 “Reset Client ID”新 ID 会在界面上即时刷新。【免费下载链接】wiki-Wiki.js | Next Generation Open Source Wiki项目地址: https://gitcode.com/GitHub_Trending/wiki78/wiki-创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →