Automatisch 遥测(Telemetry)机制全解析:数据收集范围、实现原理与关闭方法
2026/9/14 6:33:32 网站建设 项目流程

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/flowUpdatedflowIdnameactivecreatedAtupdatedAt
stepCreated/stepUpdatedstepIdflowIdkeyappKeytypepositionstatus
executionCreatedexecutionIdflowIdtestRun(是否为测试运行)
executionStepCreatedexecutionStepIdexecutionIdstepIdstatus
connectionCreated/connectionUpdatedconnectionIdkeyverified

注意connectionCreated中只包含连接的key(应用标识,如gmailslack)和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()方法在发送前只拼接appEnvinstanceId等附加字段(见 index.js),整个 Telemetry 类中不存在任何读取用户表、凭据字段或请求正文的逻辑,因此上述排除项在代码层面同样成立。

如何关闭遥测?

遥测默认开启。如果你希望关闭它,只需将TELEMETRY_ENABLED环境变量设为false

docker-compose 部署下的配置位置

Automatisch 推荐使用 docker-compose.yml 运行。请注意:该变量同时被 main 主服务与 worker 工作进程使用(官方 配置文档 也专门提醒,涉及两个服务共用的变量时,mainworker两个 service 都要改)。因此应在两个服务的environment段下分别添加:

services: main: environment: - TELEMETRY_ENABLED=false # ...其余环境变量 worker: environment: - TELEMETRY_ENABLED=false # ...其余环境变量

修改后重启容器使配置生效。官方环境变量速查表中该变量的定义为:

变量名类型默认值说明
TELEMETRY_ENABLEDbooleantrue启用/禁用遥测

从源码看该开关的解析逻辑

开关的实际解析位于 packages/backend/src/config/app.js:

telemetryEnabled: process.env.TELEMETRY_ENABLED === 'false' ? false : true,

即:只有显式设置为字符串'false'才会关闭;其他任意取值(包括不设置)都视为开启。而在track()方法第一行就有守卫逻辑:

if (!appConfig.telemetryEnabled) { return; }

这意味着关闭遥测后,所有事件上报与诊断信息上报都会在本地直接短路返回,不会有任何网络请求发出,数据不会离开你的实例。

数据收集是如何工作的?

官方文档将遥测的数据采集机制概括为两点:

  1. 事件驱动:Automatisch 通过"与用户自定义操作相关联的事件"来收集数据,每当用户触发这些操作(例如创建工作流、更新步骤、创建连接、执行流程)时,数据即被发送到官方服务器;
  2. 定时补充:除了用户操作触发的事件外,系统每六个小时还会额外收集一次诊断信息。

源码级验证:事件如何上报

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:服务类型;
  • operatingSystemos.type()os.version()
  • memoryos.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.ymlmainworker两个服务中同时设置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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询