1. 模块功能
- 
    
异常检测:发现用户可见数据的异常
 - 
    
异常响应:采用报警与工单来推进异常模块修复
 - 
    
异常修复:受损数据修复
 
这个流程,和网络安全监控是非常像的。网络基础安全是从运维部门细分出来的,方法的继承自然不奇怪了。 观察运维近些年的发展,能给安全建设带来些启发,比如说:SRE、AIOps、自动化编排、混沌工程、云原生可观测性。
2. 实现方法
2.1 数据采集
- 
    
指标数据采集
 - 
    
日志采集
 - 
    
数据包采集
 - 
    
事件数据采集
 - 
    
策略配置采集
 
2.2 数据计算
- 
    
大数据计算资源获取:如果有得力的数据团队支撑是最好的
 - 
    
关键指标数据计算:按不同时间粒度/指标纬度聚合
 
2.3 异常检测
- 
    
离线异常检测:离线异常检测是个技术深且场景通用的模块,后续会在github上开源算法模块
 - 
    
多平台数据横向对比:对比不同的数据源,避免陷入信息茧房
 
2.4 异常响应
- 
    
紧急告警:对需要立即处理的异常进行告警
 - 
    
工单系统:对不需要立即处理的异常事件分发给指定工作人员,并跟踪处理流程
 - 
    
运维预案:告警操作手册,故障分析报告,用于知识沉淀
 
2.5 异常修复
- 
    
缺失数据补全
 - 
    
异常数据修正
 
和明星塌方了,出演视频要换脸,需要一帧帧地修复,是个低频但累人的工作。我总结了有以下几种方法:
- 
    
重算,从原子数据恢复成业务数据,采用和实时计算一样的逻辑,适用于原子数据存在的场景
 - 
    
替换,用前一天同一时刻时间的数据覆盖,适用于周期数据
 - 
    
构造,按场景构造,如果是攻击趋势,就构造成尖刺状
在早期是一秒一秒数据填的,后来开始用随机数补,用拟合预测的方式补, 像碗儿匠一样想把数据修的像没坏过。
 
3. 技术点
- SRE
    
- 《SRE-Google运维解密》
 - 《Google系统架构揭秘-构建安全可靠的系统》
 
 - 时间序列分析
    
- AIOP-KPI监控
 
 
4. 失败分析
4.1 数据工程的失败
- 
    
端数据采集的失败:花费了大量时间在做数据的搬运与预处理
- 
        
数据寻址难:存储在不同机器上,但缺少有效的机器资源统一管理
 - 
        
数据一致性难:基础数据格式变更快、并无有效通知
 - 
        
数据埋点规范未有效推进:数据埋点优先级低,研发忽略
 
 - 
        
 - 
    
基础数据计算平台能力未能充分利用
- 大数据计算平台资源限制:申请到的计算资源有限(资源获取能力差)
 
 - 
    
异常检测策略
- 异常检测策略跟不上需求迭代速度
 - 对异常的解释不足以支撑问题归因
 
 
4.2 异常没那么重要
- 大量未处理的异常事件累积,处理人员麻了
 
5. 个人收获
5.1 SRE技巧
- 监控技巧:
    
- 监控指标定义原则:延迟+吞吐量+错误记录 (Weave Cloud的RED方法)
 - TICK技术栈
 
 - 告警技巧:准确率低于 50% 报警是不能使用
 - 分诊响应:按数据资产重要性、异常量级(异常指标是不是特别大)、异常范围(是不是多个资产有异常)、异常持续时间进行分级响应
 
5.2 研发技巧
- 使用airflow作为工作流引擎,将数据计算任务编排起来,做到策略自动化编排
 - 异常检测技巧:时序趋势异常 RLS filter、prophet
 
5.3 非技术因素技巧
- 
    
少自己造轮子,充分利用公司提供的基础支撑服务
e.x. 我现在采用低代码应用平台来搭建工单系统/报表系统
 - 需求收敛,有多少人做多少事
 - 业务异常是否频出和业务团队工程化程度有很大关系,如果没有能力改变基础建设,就聚焦在最关键的模块
 - 根因定位的前提是模块错误日志有采集,如果没有,请放弃
 - 向优秀的产品化的解决方案学习,但牢记资源有限的情况下需求收敛
 - 异常处理需要轮岗,长期看到系统的错误,容易对团队失去信心
 - 工作中能接触到重要的东西才是核心