Tracardi追踪器深度教程:事件采集管线的工作原理(附核心源码解析)

📅 2026/8/27 15:19:50
Tracardi追踪器深度教程:事件采集管线的工作原理(附核心源码解析)
Tracardi追踪器深度教程事件采集管线的工作原理附核心源码解析【免费下载链接】tracardiTRACARDI is a new HOME for your customer data. TRACARDI is an Composable API-first solution for any company that need inexpensive CDP to intergrate with.项目地址: https://gitcode.com/gh_mirrors/tr/tracardiTRACARDI 是一个开源、API-first 的轻量级客户数据平台CDP它的追踪器Tracker负责把客户端上报的事件清洗、补全后落库并分发给下游。本文带你完整走一遍 Tracardi 事件采集管线的每一步附核心源码路径解析帮你快速看懂这条数据流水线是如何工作的。一、先认识主角Tracker 追踪器TRACARDI 追踪器是事件进入平台的总入口。你可以把整条采集管线理解成一条工厂流水线原始载荷 → 校验来源 → 加载画像/会话 → 计算会话 → 计算事件与画像 → 持久化 → 分发目的地 → 触发工作流入口类是Tracker位于tracardi/service/tracker.py。它的track_event()方法做了三件关键的事拦截机器人流量如果配置了disallow_bot_traffic检测到 bot 直接抛出InvalidBotTrafficException数据清洗把source.id、session.id、profile.id上的空格去掉这是线上高频问题校验事件来源调用validate_source()确认这个来源Event Source在当前租户下真实存在且被允许随后根据许可证情况开源版进入核心函数os_tracker()tracardi/service/tracking/tracker.py商业版则走队列化的run_com_tracker_worker。下面我们就拆解os_tracker的完整流水线。二、第 1 步加载会话Session与画像Profile代码位置tracardi/service/tracking/process/loading.py追踪器拿到载荷后第一件事是回答两个问题这是谁的会话这是谁session await load_or_create_session_1(...) flat_profile, session await load_profile_and_session(...)会话load_or_create_session_1()tracardi/service/tracking/session_loading.py会先按session.id从存储中加载找不到就创建一个新会话。还有个贴心的自愈机制——如果加载到的会话丢失了 profile 信息数据损坏会自动重建一个新会话并记录警告。画像load_profile_and_session()tracardi/service/tracking/profile_loading.py负责把画像和会话绑定。两个细节值得注意PII 哈希hash_all_allowed_pii_as_ids()会把允许哈希的个人信息如邮箱转成 ID 形式的哈希值兼顾去重与隐私合规ID 合并载荷里携带的新 profile ID 会被合并进已有画像的 ID 集合实现跨渠道的用户打通三、第 2 步会话计算——把裸会话填丰满代码位置tracardi/service/tracking/compute/session_computer.pycompute_session()只在新会话时做重计算老会话只补增量数据计算内容说明User-Agent 解析拆出操作系统、设备类型mobile/pc/tablet、浏览器、是否 botUTM 参数记录营销渠道来源用于归因分析Referer 与渠道计算访问来源页和渠道屏幕信息分辨率、色彩深度、屏幕方向IP 与语言设备 IP、请求头中的语言偏好地理位置优先使用客户端上报的location补全到device.geo还有一个重要的安全阀门如果解析出流量是 bot 且配置了禁止 bot 流量这里会直接抛出BlockedException让坏流量在入库前就止步。四、第 3 步数据计算——画像、系统事件与事件加工代码位置tracardi/service/tracking/track_data_computation.pycompute_data()是整条管线里含金量最高的一步内部做了三件事1️⃣画像属性派生根据会话上下文更新画像的最近地理位置、邮箱类型、访问次数visits、时区等——这些字段不是客户端上报的而是追踪器自己算出来的。2️⃣系统事件注入如果是新用户的首次访问会自动补发visit-open这类系统事件保证分析口径完整。3️⃣事件计算compute_events()tracardi/service/tracking/event_data_computation.py是事件加工的核心对每个事件依次执行构建扁平事件事件载荷被转换成FlatEvent点号路径的扁平字典性能优于嵌套对象默认映射按事件类型自动映射属性、设置旅程状态journey.state、打标签事件到画像映射根据配置的映射规则Event to Profile Mapping把事件里的属性抄送到画像上比如把purchase-amount累加到画像的stats中会话状态机遇到visit-started会话状态置为 startedvisit-ended置为 ended计算完成后remove_ephemeral_data()会清掉所有标记为短暂的数据——这些数据只用于本次计算不落库。五、第 4 步持久化——三样东西依次入库回到os_tracker()计算完成后按顺序保存画像mutation_profile_db.save_flat_profile()仅当画像有未保存的变更时才写会话save_session()tracardi/service/tracking/storage/session_storage.py事件save_events_in_db()保存前会过滤掉标记saveEventfalse的短暂事件注意一个设计细节保存成功后载荷里冗余的location和utm会被主动删除——因为它们已经固化到会话里了避免分发到下游时数据重复膨胀。六、第 5 步目的地分发与触发工作流代码位置tracardi/service/tracking/destination/dispatcher.py数据落库后管线进入出站阶段sync_event_destination()把新事件同步分发给已配置的第三方目的地如 CRM、营销平台sync_profile_destination()如果画像字段发生了变化携带字段变更日志字段名、时间戳、旧值一起分发下游系统据此做增量更新exec_workflow()触发 Tracardi 的工作流引擎基于刚保存的事件执行自动化流程如自动打标签、分段更新如果工作流又修改了画像还会再次触发一次画像目的地分发七、这条管线值得学习的 4 个设计点⚡扁平化数据模型事件用FlatEvent扁平字典承载而非嵌套对象读写都走点号路径兼顾性能与灵活性先锁后算画像与会话在计算前加载、计算后保存保存后代码里明确注释了从这一点起事件和会话不得再被修改保证了一致性边界短暂数据Ephemeral机制区分只用于计算和需要落库的数据是控制存储成本的关键️纵深防御bot 拦截、来源域名白名单、PII 哈希三道关卡层层设防八、总结回顾整条管线载荷清洗 → 来源校验 → 会话/画像加载 → 会话计算 → 事件加工 → 落库 → 目的地分发 → 工作流触发TRACARDI 追踪器用最少的代码实现了一个完整的 CDP 采集闭环。如果你想继续深入建议按这个顺序阅读源码入口tracardi/service/tracker.py管线主体tracardi/service/tracking/tracker.py会话加载tracardi/service/tracking/session_loading.py画像加载tracardi/service/tracking/profile_loading.py会话计算tracardi/service/tracking/compute/session_computer.py数据计算tracardi/service/tracking/track_data_computation.py事件加工tracardi/service/tracking/event_data_computation.py目的地分发tracardi/service/tracking/destination/dispatcher.py读懂了os_tracker()这一个函数你就掌握了 TRACARDI 事件采集管线 90% 的核心逻辑。【免费下载链接】tracardiTRACARDI is a new HOME for your customer data. TRACARDI is an Composable API-first solution for any company that need inexpensive CDP to intergrate with.项目地址: https://gitcode.com/gh_mirrors/tr/tracardi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考