3. 数据采集与预处理:告警指标数据源
告警阈值优化的基础是高质量、高时效的指标数据。本章聚焦于如何从日志、API、数据库三类数据源采集原始指标,并通过清洗、缺失值处理与异常值检测,构建干净、可靠的告警指标数据集。
3.1 告警指标数据源
风控哨兵系统通常从以下三类数据源获取原始指标:
| 数据源类型 | 典型数据 | 采集方式 | 时效性 |
|---|---|---|---|
| 日志 | 应用日志、系统日志、安全日志 | Filebeat / Fluentd / Logstash | 秒级~分钟级 |
| API | 业务接口响应时间、错误率、吞吐量 | HTTP 轮询 / Webhook | 秒级~分钟级 |
| 数据库 | 交易流水、用户行为、风控结果 | JDBC / CDC (Debezium) | 分钟级~小时级 |
实践建议:日志数据适合高频、低延迟的告警指标(如 QPS、错误率);API 数据适合业务层面的关键指标(如支付成功率);数据库数据适合离线分析或低频阈值校准(如日交易量)。
3.2 数据清洗
原始数据通常包含格式错误、重复记录、无效字段等问题。清洗流程分为以下步骤:
- 格式标准化:统一时间戳格式(如 ISO 8601)、数值单位(如毫秒转秒)、枚举值映射(如 "success"/"fail" → 1/0)。
- 去重:基于唯一标识(如 traceId、eventId)删除重复记录,保留最新一条。
- 字段过滤:剔除无关字段(如调试信息、内部 IP),仅保留告警指标所需的维度与度量。
- 类型转换:将字符串数字转为数值类型,将时间字符串转为时间戳。
# 示例: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 数据预处理流程总览
下图展示了从数据源到干净指标集的完整预处理流水线:
3.6 预处理质量检查清单
在将数据送入阈值优化模块前,建议逐项确认以下检查点:
- 完整性:缺失率是否低于预设阈值(如 5%)?
- 一致性:时间戳是否连续?是否存在跳跃或重复?
- 准确性:异常值是否已标记或剔除?是否误删了业务异常?
- 时效性:数据延迟是否在可接受范围内(如 < 1 分钟)?
自动化建议:将上述预处理流程封装为可复用的 ETL 管道(如 Airflow DAG),每次阈值优化前自动执行,确保数据质量可追溯、可复现。