第3章 原始埋点数据采集SOP:采集节点部署、日志收集、实时/批量传输选择
适用场景
本章SOP适用于团队在已完成埋点方案设计(事件ID、属性定义、触发时机)后,进入采集基础设施搭建阶段。具体场景包括:
- Web/H5/APP 端新增或变更埋点采集节点
- 容器化或物理机环境下的日志收集组件首次上线
- 实时流处理(Kafka)与离线批处理(HDFS/OSS)双通道传输决策
本章目标:确保采集节点平稳部署、日志文件规整落地、传输通道选型与压测结果匹配业务SLA。
前置条件
- 已输出的埋点事件ID+属性定义文档(V2.1+版本)
- 服务器/容器资源清单(CPU/内存/磁盘/网络)通过审批
- 采集目标环境:应用服务器、日志中转机、Kafka/HDFS集群网络可达
- 采集SDK(如Gio/自研JS SDK)版本锁定并完成单元测试
- 运维工单中已开放防火墙端口(例如Kafka 9092、Flume 41414)
操作步骤
3.1 采集节点部署
- SDK 集成:在应用代码中引入采集SDK,初始化客户端实例,并传入项目ID与采集端点URL。
- 配置文件写入:将埋点事件映射表写入SDK配置,确保事件名与属性字段一一对应。
- 预发布验证:在 staging 环境模拟用户行为,确认采集日志写入本地文件系统(如
/var/log/analytics/)正常。 - 灰度上线:按10%→30%→100%流量逐步开放采集,监控日志量与服务器CPU/IO。
3.2 日志收集
- 轮转策略配置:按大小(256MB)或时间(每小时)切割日志文件,保留最近7天。
- Agent 部署:在每台应用服务器上部署 Filebeat/Logstash,指定日志路径与正则匹配模式。
- 目录结构规范:
/var/log/analytics/ ├── access.log ├── event-2025-03-20-10.log └── event-2025-03-20-11.log - 多行合并配置:对于跨行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/目录命名规范,验收数据完整性
记录材料
- 部署 checklist:包含每台主机的 SDK 版本、Agent 版本、配置 MD5。
- 日志收集验证记录:生产环境截取 10 分钟日志,对比文件行数与 Kafka 消息数是否一致。
- 传输性能测试记录:模拟 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
核心流程全景图
关键检查点:部署完成后,务必在采集Agent侧执行一次
tail -f /var/log/analytics/event-*.log | head -5 确认日志内容包含有效的 JSON 字段(user_id, event_id, time),并检查 Kafka 对应 topic 是否有消息抵达。