Automatisch 遥测(Telemetry)机制全解析:数据收集范围、实现原理与关闭方法
【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch
本文以 Automatisch 内置遥测系统为主线,从官方文档出发,结合仓库中真实实现源码,为你完整讲解 Automatisch 收集哪些匿名数据、绝对不碰哪些敏感数据、如何在 docker-compose 部署中关闭遥测,以及这套遥测系统在底层是如何借助事件埋点与定时任务运行的。读完本文,你将能够判断自建实例的数据隐私边界,并在 5 分钟内完成遥测的开启或关闭。
为什么 Automatisch 需要遥测?
Automatisch 是开源的工作流自动化平台(定位为 Zapier 的开源替代品),安装即用、默认开启遥测。官方文档明确指出:内置遥测系统只收集匿名的使用数据,用于帮助改进产品、确保开发资源聚焦在正确的功能上,并且整个过程不收集任何个人信息。
为了做到"可审计、可信任",Automatisch 官方将遥测相关的全部代码收敛到了单一入口文件中,即 packages/backend/src/helpers/telemetry/index.js。这意味着一方面社区可以随时审查数据上报逻辑,另一方面任何遥测行为都有明确的代码依据可循。
Automatisch 收集什么?
根据 官方遥测文档 的定义,Automatisch 收集的数据可以归纳为四大类:
- Flow、Step 与 Connection 的结构数据:即工作流(flow)、步骤(step)、连接(connection)的创建与更新信息,但不包含任何凭据(credentials)。
- Execution 与 Execution Step 的运行数据:执行记录与执行步骤记录,不含任何 payload 或可识别个人信息。
- 组织与实例标识符:安装 Automatisch 时分配的两个随机 ID,用于评估正在运行的实例数量和实际使用中的组织数量。
- 诊断信息(Diagnostic information):
- Automatisch 版本号;
- 服务类型(主服务 main 或 工作进程 worker);
- 操作系统类型与版本;
- CPU 与内存信息。
从源码看"收集了什么"的精确细节
上述抽象描述在源码中有非常精确的落地。以 telemetry/index.js 为入口,Telemetry 类通过track(name, properties)方法统一上报事件,其中各事件的 properties 字段全部是结构化元数据,与凭据、密钥、请求参数无关:
| 事件名 | 携带字段(节选) |
|---|---|
flowCreated/flowUpdated | flowId、name、active、createdAt、updatedAt |
stepCreated/stepUpdated | stepId、flowId、key、appKey、type、position、status等 |
executionCreated | executionId、flowId、testRun(是否为测试运行) |
executionStepCreated | executionStepId、executionId、stepId、status |
connectionCreated/connectionUpdated | connectionId、key、verified |
注意connectionCreated中只包含连接的key(应用标识,如gmail、slack)和verified状态,连接中保存的第三方服务令牌、密码等敏感信息不会出现在任何上报字段里。
另外两个关键 ID 的来源如下:
- 实例 ID(instance ID):由 instance-id.js 中的
Crypto.randomUUID()在每次启动时随机生成,属于临时随机标识; - 组织 ID(organization ID):由 organization-id.js 基于
ENCRYPTION_KEY通过CryptoJS.SHA3(key, { outputLength: 256 })计算出的 256 位哈希值——它是加密密钥的单向派生值,反向推导不出密钥本身,因而既能区分不同安装实例,又不泄露凭据加密信息。
Automatisch 不收集什么?
官方文档给出了明确的"负面清单",这四类数据被明确排除在遥测范围之外:
- 个人身份信息(Personal information);
- 第三方服务的凭据(credentials);
- 登录 Automatisch 所用的邮箱和密码;
- 错误请求的 payload(Error payloads)。
从实现层面看,track()方法在发送前只拼接appEnv、instanceId等附加字段(见 index.js),整个 Telemetry 类中不存在任何读取用户表、凭据字段或请求正文的逻辑,因此上述排除项在代码层面同样成立。
如何关闭遥测?
遥测默认开启。如果你希望关闭它,只需将TELEMETRY_ENABLED环境变量设为false。
docker-compose 部署下的配置位置
Automatisch 推荐使用 docker-compose.yml 运行。请注意:该变量同时被 main 主服务与 worker 工作进程使用(官方 配置文档 也专门提醒,涉及两个服务共用的变量时,main和worker两个 service 都要改)。因此应在两个服务的environment段下分别添加:
services: main: environment: - TELEMETRY_ENABLED=false # ...其余环境变量 worker: environment: - TELEMETRY_ENABLED=false # ...其余环境变量修改后重启容器使配置生效。官方环境变量速查表中该变量的定义为:
| 变量名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
TELEMETRY_ENABLED | boolean | true | 启用/禁用遥测 |
从源码看该开关的解析逻辑
开关的实际解析位于 packages/backend/src/config/app.js:
telemetryEnabled: process.env.TELEMETRY_ENABLED === 'false' ? false : true,即:只有显式设置为字符串'false'才会关闭;其他任意取值(包括不设置)都视为开启。而在track()方法第一行就有守卫逻辑:
if (!appConfig.telemetryEnabled) { return; }这意味着关闭遥测后,所有事件上报与诊断信息上报都会在本地直接短路返回,不会有任何网络请求发出,数据不会离开你的实例。
数据收集是如何工作的?
官方文档将遥测的数据采集机制概括为两点:
- 事件驱动:Automatisch 通过"与用户自定义操作相关联的事件"来收集数据,每当用户触发这些操作(例如创建工作流、更新步骤、创建连接、执行流程)时,数据即被发送到官方服务器;
- 定时补充:除了用户操作触发的事件外,系统每六个小时还会额外收集一次诊断信息。
源码级验证:事件如何上报
Telemetry 类的track()最终通过@rudderstack/rudder-sdk-nodeSDK 上报:
this.client.track({ userId: this.organizationId, event: name, properties, });其中userId使用组织 ID,event为事件名,properties为上述元数据字段。数据面(data plane)地址由部署形态决定:
- 标准版上报至
https://telemetry.automatisch.io/v1/batch; - 若
appConfig.isMation(Mation 白标发行版)为真,则上报至https://telemetry.mation.work/v1/batch。
源码级验证:六小时定时诊断
诊断信息的定时上报直接定义在 Telemetry 构造函数后的模块加载阶段:
const telemetry = new Telemetry(); telemetry.diagnosticInfo();diagnosticInfo()上报完成后通过setTimeout(() => this.diagnosticInfo(), SIX_HOURS_IN_MILLISECONDS)自我调度,其中SIX_HOURS_IN_MILLISECONDS = 21600000,精确对应文档所说的"每六小时收集一次"。它采集的字段包括:
automatischVersion:Automatisch 版本;serviceType:服务类型;operatingSystem:os.type()与os.version();memory:os.totalmem()换算为 MB 的总内存;cpus:CPU 核数(os.cpus().length)、型号与主频。
服务类型如何区分
服务类型由启动入口注入:主服务在 packages/backend/src/server.js 中调用telemetry.setServiceType('main'),工作进程则在 packages/backend/src/worker.js 中调用telemetry.setServiceType('worker')。这解释了官方文档中"服务类型(主服务或工作进程)"这一诊断字段的由来。
另外track()中还有一层测试环境守卫:
if (appConfig.isTest) { return; }即运行测试套件时不会产生真实上报,避免开发与 CI 环境污染线上遥测数据。
小结
- Automatisch 的遥测是匿名、默认开启、可一键关闭的,收集范围严格限定在 flow/step/connection/execution 的结构元数据与实例诊断信息;
- 关闭方式很简单:在
docker-compose.yml的main与worker两个服务中同时设置TELEMETRY_ENABLED=false; - 所有遥测代码集中在 packages/backend/src/helpers/telemetry/index.js,组织 ID 与实例 ID 的生成逻辑分别在 organization-id.js 与 instance-id.js,社区可以随时审查,如需调整采集策略,修改这些文件即可。
【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考