3. 数据采集与预处理:告警指标数据源

告警阈值优化的基础是高质量、高时效的指标数据。本章聚焦于如何从日志、API、数据库三类数据源采集原始指标,并通过清洗、缺失值处理与异常值检测,构建干净、可靠的告警指标数据集。

3.1 告警指标数据源

风控哨兵系统通常从以下三类数据源获取原始指标:

数据源类型 典型数据 采集方式 时效性
日志 应用日志、系统日志、安全日志 Filebeat / Fluentd / Logstash 秒级~分钟级
API 业务接口响应时间、错误率、吞吐量 HTTP 轮询 / Webhook 秒级~分钟级
数据库 交易流水、用户行为、风控结果 JDBC / CDC (Debezium) 分钟级~小时级
实践建议:日志数据适合高频、低延迟的告警指标(如 QPS、错误率);API 数据适合业务层面的关键指标(如支付成功率);数据库数据适合离线分析或低频阈值校准(如日交易量)。

3.2 数据清洗

原始数据通常包含格式错误、重复记录、无效字段等问题。清洗流程分为以下步骤:

  1. 格式标准化:统一时间戳格式(如 ISO 8601)、数值单位(如毫秒转秒)、枚举值映射(如 "success"/"fail" → 1/0)。
  2. 去重:基于唯一标识(如 traceId、eventId)删除重复记录,保留最新一条。
  3. 字段过滤:剔除无关字段(如调试信息、内部 IP),仅保留告警指标所需的维度与度量。
  4. 类型转换:将字符串数字转为数值类型,将时间字符串转为时间戳。
# 示例:Python 数据清洗伪代码
import pandas as pd

def clean_raw_data(df):
    # 1. 格式标准化:统一时间戳
    df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
    # 2. 去重
    df = df.drop_duplicates(subset=['trace_id'], keep='last')
    # 3. 字段过滤
    df = df[['timestamp', 'service', 'latency_ms', 'error_code']]
    # 4. 类型转换
    df['latency_ms'] = pd.to_numeric(df['latency_ms'], errors='coerce')
    return df

3.3 缺失值处理

缺失值在指标数据中常见,处理策略需根据缺失比例与业务含义选择:

缺失比例 推荐策略 适用场景
< 5% 删除缺失行 数据量充足,缺失随机
5% ~ 20% 前向填充 / 均值填充 时间序列指标,短期波动可忽略
> 20% 标记为“不可用”或使用插值 避免引入偏差,保留缺失标记
注意:对于告警指标,不建议使用复杂模型填充缺失值,以免掩盖真实异常。优先使用前向填充(ffill)或直接标记缺失时段。
# 示例:缺失值处理
df['latency_ms'].fillna(method='ffill', inplace=True)  # 前向填充
df['error_count'].fillna(0, inplace=True)               # 零填充

3.4 异常值检测

异常值会严重干扰阈值计算,需在预处理阶段识别并处理。常用方法包括:

  • IQR 四分位法:适用于非正态分布,识别 Q1-1.5*IQR 和 Q3+1.5*IQR 之外的值。
  • Z-Score 法:适用于近似正态分布,|Z| > 3 视为异常。
  • 移动平均偏差:适用于时间序列,当前值偏离滑动均值超过 3σ 视为异常。
关键原则:异常值不一定是“错误”,可能是真实告警信号。预处理阶段仅剔除明显的数据采集异常(如负延迟、超物理上限),保留业务异常供后续阈值模型判断。
# 示例:IQR 异常值检测
Q1 = df['latency_ms'].quantile(0.25)
Q3 = df['latency_ms'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df_clean = df[(df['latency_ms'] >= lower_bound) & (df['latency_ms'] <= upper_bound)]

3.5 数据预处理流程总览

下图展示了从数据源到干净指标集的完整预处理流水线:

数据采集与预处理流程 日志数据 API 数据 数据库数据 数据清洗 缺失值处理 异常值检测 干净告警指标集 预处理关键点 • 清洗:去重、格式标准化、字段过滤 • 缺失:前向填充 / 均值填充 / 标记 • 异常:IQR / Z-Score / 移动平均偏差

3.6 预处理质量检查清单

在将数据送入阈值优化模块前,建议逐项确认以下检查点:

  • 完整性:缺失率是否低于预设阈值(如 5%)?
  • 一致性:时间戳是否连续?是否存在跳跃或重复?
  • 准确性:异常值是否已标记或剔除?是否误删了业务异常?
  • 时效性:数据延迟是否在可接受范围内(如 < 1 分钟)?
自动化建议:将上述预处理流程封装为可复用的 ETL 管道(如 Airflow DAG),每次阈值优化前自动执行,确保数据质量可追溯、可复现。