基于日志分析的模型异常行为监控踩坑记录
问题背景
在生产环境部署的推荐系统模型,突然出现准确率下降50%的问题,但业务方无法定位原因。通过排查发现,模型输出的日志中存在大量异常值,但缺乏有效的监控告警机制。
具体监控指标配置
# prometheus监控配置
- job_name: 'model_monitor'
metrics_path: '/metrics'
static_configs:
- targets: ['localhost:8000']
metric_relabel_configs:
# 异常行为检测指标
- source_labels: [model_output]
target_label: model_output
regex: '(.*)'
replacement: '${1}'
# 响应时间异常
- source_labels: [response_time_ms]
target_label: response_time_ms
action: replace
regex: '(.*)'
replacement: '${1}'
关键告警配置
# alertmanager配置
- name: model_performance_alert
rules:
# 输出值异常告警
- alert: ModelOutputAnomaly
expr:
(model_output > quantile(0.95, model_output) + 3 * stddev(model_output))
for: 5m
labels:
severity: critical
category: model_behavior
annotations:
summary: "模型输出值异常"
description: "当前输出值超出正常范围,详情请查看{{ $labels.instance }}"
# 响应时间告警
- alert: ModelLatencyHigh
expr:
rate(response_time_ms[5m]) > 500
for: 2m
labels:
severity: warning
category: model_performance
复现步骤
- 模拟异常数据输入:
curl -X POST http://localhost:8000/predict -d '{"input": [999999999999999]}' - 查看prometheus指标:
http://localhost:9090/graph?g0.expr=model_output - 观察告警状态:
http://localhost:9093/alerts
踩坑总结
最初使用简单的阈值监控,发现无法识别模型输出的统计异常。后来通过添加标准差和分位数计算,才真正实现对异常行为的精准捕捉。

讨论