3. 数据采集基础:交易日志、系统指标、业务指标的采集规范与清洗

实时风控巡检的稳定性,首先取决于数据采集的质量。如果采集层出现延迟、丢失或格式错乱,后续的告警阈值计算将失去意义。本章从交易日志、系统指标、业务指标三个维度,定义采集规范与清洗策略,确保进入阈值引擎的数据是“干净且可信的”。

3.1 三类数据源的采集规范

实时风控巡检依赖三类数据:交易日志(事件流)、系统指标(资源与中间件状态)、业务指标(聚合后的风控特征)。三者采集方式与粒度差异显著,需分别制定规范。

数据类别 采集源 推荐协议/格式 采集粒度 关键字段
交易日志 API网关、交易核心服务 JSON over Kafka / Flume 单笔交易事件 交易ID、时间戳、金额、商户号、设备指纹、风控标签
系统指标 主机、容器、中间件 Prometheus Exporter / Telegraf 10s ~ 60s 周期 CPU使用率、内存占用、GC暂停、QPS、连接数
业务指标 风控引擎、特征平台 HTTP/gRPC Push 或 Pull 1min ~ 5min 窗口 拒绝率、人工审核率、平均响应耗时、特征缺失率
采集规范要点:交易日志必须携带全局唯一 TraceID,用于关联上下游;系统指标必须打上机房、集群、实例标签;业务指标必须包含统计窗口的起止时间,避免因数据延迟导致窗口错位。

3.2 数据清洗:从原始日志到可度量指标

原始数据在进入阈值计算之前,必须经过清洗层。清洗的目标是消除“脏数据”对阈值的干扰,避免因异常点导致告警阈值偏移。

3.2.1 清洗规则清单

  • 去重:基于交易ID或指标唯一键,在窗口内去重,防止重复上报导致指标虚高。
  • 空值填充:对于缺失的数值型指标,采用“前值填充”或“默认值(如 -1)”标记,不直接丢弃。
  • 异常值截断:对明显超出物理上限的值(如 CPU > 100%、金额为负数)进行截断或标记为无效。
  • 时间戳对齐:将乱序到达的日志按事件时间(而非采集时间)重新排序,确保窗口聚合正确。
  • 格式标准化:统一时间戳格式为 Unix 毫秒或 ISO 8601,统一金额单位为“分”。
清洗示例:某交易日志中金额字段出现字符串 "12.34元",清洗层需将其转换为整数 1234(单位:分),若转换失败则标记为“格式异常”并写入死信队列,不参与阈值计算。

3.3 采集链路稳定性设计

数据采集链路本身需要具备高可用与容错能力,否则阈值引擎将面临“无数据可算”的风险。下图展示了标准采集链路的架构与关键容错节点。

实时风控数据采集链路架构 交易日志源 系统指标源 业务指标源 采集适配层(Kafka Connect / Prometheus / Flume) 数据清洗层(去重 / 空值填充 / 异常截断 / 时间戳对齐) 时序数据库 / 消息队列 阈值引擎 / 巡检服务 容错设计:采集层支持重试与背压;清洗层输出死信队列;存储层采用多副本与读写分离

3.4 采集质量监控与告警

即使采集链路设计再完善,也必须对采集本身进行监控。建议对以下指标设置基础告警,确保数据源“活着且正常产出”:

  • 采集延迟:从事件产生到进入清洗层的时间差,超过 30s 触发警告。
  • 采集丢失率:单位时间内采集端接收量与源端产出量的比值,丢失率 > 1% 触发告警。
  • 清洗异常率:清洗层标记为“格式异常”或“丢弃”的记录占比,超过 5% 需人工介入。
  • 数据空洞:连续 2 个采集周期无数据到达,立即触发 P0 告警。
常见陷阱:不要只关注“采集成功”而忽略“采集延迟”。在交易高峰期,Kafka 消费积压可能导致数据延迟 10 分钟以上,此时阈值引擎基于过时数据计算出的告警阈值完全不可用。务必为采集延迟设置独立的告警规则。

3.5 清洗后的数据格式规范

清洗后的数据应统一为结构化的指标事件,便于阈值引擎直接消费。以下是一个清洗后的交易日志示例格式:

{
  "event_id": "txn_20250321143000_abc123",
  "event_type": "transaction",
  "timestamp_ms": 1742562600000,
  "fields": {
    "amount_cents": 123400,
    "merchant_id": "M10086",
    "risk_score": 0.87,
    "is_approved": true
  },
  "tags": {
    "region": "cn-east",
    "cluster": "prod-a",
    "version": "v3.2.1"
  },
  "quality": {
    "cleaned": true,
    "original_format": "json",
    "cleaning_rules_applied": ["dedup", "timestamp_align", "unit_convert"]
  }
}

该格式包含元数据(event_id、timestamp)、业务字段(fields)、环境标签(tags)以及清洗记录(quality),确保阈值引擎在计算时能够追溯数据来源与清洗过程。

3.6 采集规范检查清单

在接入新的数据源或调整采集配置时,建议对照以下清单逐项确认:

检查项 验收标准 优先级
数据源是否携带 TraceID 每条日志/指标可关联到唯一请求链路 P0
时间戳是否统一为事件时间 采集时间与事件时间分离,窗口聚合基于事件时间 P0
采集端是否配置重试与背压 网络抖动时自动重试 3 次,背压阈值明确 P1
清洗层是否输出死信队列 格式异常数据不丢失,可回溯分析 P1
采集延迟告警是否已配置 延迟 > 30s 触发告警,延迟 > 5min 触发 P0 P0
数据格式是否包含 quality 字段 清洗记录可追溯,便于排查阈值异常 P2

完成上述采集规范与清洗策略的落地后,阈值引擎将获得稳定、干净的数据输入。下一阶段将基于这些数据,进行告警阈值的统计建模与动态调优。