第3章 原始埋点数据采集SOP:采集节点部署、日志收集、实时/批量传输选择

适用场景

本章SOP适用于团队在已完成埋点方案设计(事件ID、属性定义、触发时机)后,进入采集基础设施搭建阶段。具体场景包括:

  • Web/H5/APP 端新增或变更埋点采集节点
  • 容器化或物理机环境下的日志收集组件首次上线
  • 实时流处理(Kafka)与离线批处理(HDFS/OSS)双通道传输决策
本章目标:确保采集节点平稳部署、日志文件规整落地、传输通道选型与压测结果匹配业务SLA。

前置条件

  1. 已输出的埋点事件ID+属性定义文档(V2.1+版本)
  2. 服务器/容器资源清单(CPU/内存/磁盘/网络)通过审批
  3. 采集目标环境:应用服务器、日志中转机、Kafka/HDFS集群网络可达
  4. 采集SDK(如Gio/自研JS SDK)版本锁定并完成单元测试
  5. 运维工单中已开放防火墙端口(例如Kafka 9092、Flume 41414)

操作步骤

3.1 采集节点部署

  1. SDK 集成:在应用代码中引入采集SDK,初始化客户端实例,并传入项目ID与采集端点URL。
  2. 配置文件写入:将埋点事件映射表写入SDK配置,确保事件名与属性字段一一对应。
  3. 预发布验证:在 staging 环境模拟用户行为,确认采集日志写入本地文件系统(如 /var/log/analytics/)正常。
  4. 灰度上线:按10%→30%→100%流量逐步开放采集,监控日志量与服务器CPU/IO。

3.2 日志收集

  1. 轮转策略配置:按大小(256MB)或时间(每小时)切割日志文件,保留最近7天。
  2. Agent 部署:在每台应用服务器上部署 Filebeat/Logstash,指定日志路径与正则匹配模式。
  3. 目录结构规范:
    /var/log/analytics/
      ├── access.log
      ├── event-2025-03-20-10.log
      └── event-2025-03-20-11.log
  4. 多行合并配置:对于跨行JSON日志,启用 multiline 规则(negate=true, pattern="^{")。

3.3 实时/批量传输选择

根据业务对数据时效性要求,选择以下传输链路之一或混合使用:

传输模式 典型组件 延迟要求 适用场景
实时 Kafka Producer + Flink < 5s 用户实时行为分析、A/B实验、在线推荐
批量 Flume → HDFS / Spark Batch 10min~1h 离线报表、用户画像、回溯分析
混合 双写复制或数据总线分流 按需 同时覆盖实时与历史查询

实时传输配置示例(Filebeat → Kafka):

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/analytics/*.log
  fields_under_root: true
  fields:
    project_id: "user_behavior"

output.kafka:
  hosts: ["kafka-broker1:9092", "kafka-broker2:9092"]
  topic: "raw_user_events"
  partition.round_robin:
    reachable_only: true
  codec.json:
    pretty: false

输入输出物

类型 清单 提供方
输入 埋点事件定义文档(V2.1+)、服务器资源清单、SDK 安装包 产品 / 前端 / 运维
输出 采集节点上线报告、日志收集验证报告、传输通道压测报告 数据采集团队

责任边界

  • 业务开发:SDK 集成、埋点代码走查、预发布环境冒烟测试
  • 数据采集团队:Agent 部署与配置、传输链路搭建、压测与上线
  • 运维 / SRE:主机权限、网络策略、Kafka 集群容量评估
  • 数据仓库团队:提供目标 Topic/目录命名规范,验收数据完整性

记录材料

  1. 部署 checklist:包含每台主机的 SDK 版本、Agent 版本、配置 MD5。
  2. 日志收集验证记录:生产环境截取 10 分钟日志,对比文件行数与 Kafka 消息数是否一致。
  3. 传输性能测试记录:模拟 1000 QPS,记录端到端延迟 P50/P99。

异常处理

异常现象 可能原因 处理操作
SDK 初始化失败 采集端点 URL 不可达或鉴权密钥错误 检查 DNS 解析、端口连通性,重置访问密钥
日志文件未轮转 文件句柄未释放或磁盘 inode 满 重启 Agent 进程,清理旧文件,调整轮转阈值
实时传输延迟突增 Kafka 分区不足或消费端阻塞 增加分区数、扩容消费者组、排查下游积压
批量传输丢数据 Flume 通道损坏或 HDFS 写入失败 启用事务通道、配置 HDFS 多副本、重跑缺失批次

验收标准

  • 所有采集节点 SDk 日志级别正常(无 ERROR),单节点吞吐量≥2000 event/s
  • 日志文件按规范轮转,磁盘占用率≤70%
  • 实时通道:端到端延迟 P99≤5s(从日志产生到 Kafka 可消费)
  • 批量通道:T+1 数据完整率≥99.9%(对比日志文件行数与 HDFS 文件行数)
  • 压测报告、部署 checklist、验证记录归档至项目 wiki

核心流程全景图

原始埋点数据采集流程 采集节点部署 SDK 初始化与配置 埋点事件映射注入 预发布验证 日志收集 轮转策略配置 Filebeat 部署 多行合并配置 实时/批量传输 实时:Kafka Producer 批量:Flume → HDFS 注意事项 • 实时通道必须配置消息确认机制(acks=all),避免数据丢失 • 批量通道建议启用事务通道,保证 At-Least-Once 语义 下游:数据接入层(清洗/转化/入库)
关键检查点:部署完成后,务必在采集Agent侧执行一次 tail -f /var/log/analytics/event-*.log | head -5 确认日志内容包含有效的 JSON 字段(user_id, event_id, time),并检查 Kafka 对应 topic 是否有消息抵达。