智能运维里的时间序列

QCon2017 PPT下载

1. 智能运维里的时间序列 异常检测•根源分析•预测 赵宇辰 / 销售易技术VP
2. 智能运维里的时间序列 • 性能监控里的时间序列 • 传统方法 • AI + 时间序列 • 异常检测 • 根源分析 • 总结
3. 性能监控里的时间序列 常见的时间序列/metrics: • Block Time (ms), Average Block Time (ms) • Calls, Number of Calls • Calls/min, Calls per Minute • CPU Used (ms), JVM CPU Burnt (ms/min) • Errors/min, Errors per Minute • Response Time (ms), Average Response Time (ms), Avg. Time per Call • Slow Transactions, Number of Slow Calls • Stalled Transactions, Stall Count • Wait Time (ms), Average Wait time (ms)
4. 性能监控里的时间序列 常见的时间序列类型: • Backends /后端 • End User Monitoring /用户UE • Mobile/手机 • Service End Points/服务端 • Overall Application Performance/全局 • Business Transaction Performance /业务相关 • Application Infrastructure Performance/基础设施 • Errors /错误
5. 性能监控里的时间序列 常见的时间序列计算: • 原始数值(observation) • 最小值/最大值(min/max) • 总和(sum) • 平均值(avg) • 数量(count) • 百分比(%) • 百分位数(percentile)
6. 智能运维里的时间序列 • 性能监控里的时间序列 • 传统方法 • AI + 时间序列 • 异常检测 • 根源分析 • 总结
7. 传统方法 方法一:固定阈值 • 如果value > 阈值X,发出警报 • 如果value < 阈值Y,发出警报
8. 传统方法 方法二:动态阈值 • 计算 (1)平均值 μ (2)方差 σ • 正常取值区间:μ ±2σ • 如果value在区间外,发出警报
9. 传统方法往往效果不好
10. 原因1: 忽视周期性(seasonality)
11. 周期性的时间序列 例子: • 每两小时的定时任务(cron job) • 每两周升级计划
12. 周期性的时间序列 在平均值附近,传统方法不会发出警报, 但是否真的没有异常?
13. 原因2: 忽视趋势(trend)
14. 时间序列里的趋势 时间序列里往往包含趋势: • 增长的趋势 • 降低的趋势 传统方法(固定阈值/历史平均值) • 用过去的数据作为标准 历史数据 的平均值 • 造成误判(false positive) 历史数据 now
15. 原因3: 数据是不完美的
16. 理论看上去很美 • 计算 (1)平均值 μ (2)方差 σ • 正常取值区间:μ ±2σ • 如果value在区间外,发出警报 基于normal distribution的假设
17. 即便数据符合normal distribution… 假设每个metric每一分钟有一个值(比如errors per min, avg latency per min等) • 每天有:1 x 60 x 24 = 1,440 数据点 • 假设我们用μ ±3σ区间 • 根据normal distribution定义,99.7% 的数据在该范围内 • 1,440 x 99.7% = 1435.68个数据点被认为正常 • 系统认为1,440-1435.68 = 4.32个数据点为异常 这意味着: • 即使完全正常,每天每个metric会收到4.32个错误警报提醒(false alarms)!
18. 原因4: 数据孤岛
19. 数据孤岛 • 每个metric被单独考虑 • 系统里有成千上万个metric • 彼此相互联系/关联 • 能否把所有的metrics联合起来一起考虑? Photo Credit: Argos @ Uber
20. 智能运维里的时间序列 • 性能监控里的时间序列 • 传统方法 • AI + 时间序列 • 异常检测 • 根源分析 • 总结
21. Moving Average Based • 对历史值赋予不同权重 • Autoregressive Integrated Moving Average (ARIMA) • 几乎所有的time series包里都有实现 • 缺点: • 需手动设置参数 • assumption较为简单
22. Exponential Smoothing Based • Double exponential (Holt-Linear): • 能追踪level和trend • Triple exponential: • 能追踪level和trend • 还能追踪seasonality • 缺点: • 需手动设置参数
23. 分解(decomposition) Based • DFT (Discrete Fourier Transform)/傅立叶分解 • 对周期性数据效果较好 • 对spike model能力较弱
24. 分解(decomposition) Based • DWT (Discrete Wavelet Transform)/小波分解 • 速度快,压缩能力强 • 对spike等异常非常有效 • 在分解后的模块(比如小波分解后的components) 上再进行auto regression
25. 深度学习(Deep Learning) Based • Feedforward Neural Network • Recurrent Neural Network (e.g., LSTM) • Convolutional Neural Network LSTM 例子: • 1 input • a hidden layer with 4 LSTM neurons • an output layer
26. 矩阵(Matrix) Based 用sliding window构建矩阵,假设矩阵为low rank 分解矩阵后重建,差异大的地方为异常 • Principle Component Analysis • SVD • Robust PCA • Auto-Encoder Neural Network • Convolutional Auto-Encoder Neural Network
27. 业界应用 • Twitter: Seasonal Hybrid ESD (S-H-ESD) https://blog.twitter.com/2015/introducing-practical-and-robust-anomaly-detection-in-a-time-series • Netflix: Robust PCA http://techblog.netflix.com/2015/02/rad-outlier-detection-on-big-data.html • Numenta: neural network http://numenta.com/press/2015/11/10/numenta-anomaly-benchmark-nab-evaluates-anomaly-detectiontechniques/ • Anodot: online machine learning algorithm http://www.anodot.com/ • Linkedin: exponential smoothing https://github.com/linkedin/luminol • Uber: multivariate non-linear model https://eng.uber.com/argos/ Credit: Yi Hong @ AppDynamics
28. 这么多方法,选哪个呢?
29. 自动模型选取:Ensemble Learning 权重 异常/ 非异常 • 多个模型同时预测 • 根据历史数据调整不同模型权重 • 无需人工选取/调整 • 自动得到一个共同决策
30. • 异常检测 • 产生警报
31. 智能运维里的时间序列 • 性能监控里的时间序列 • 传统方法 • AI + 时间序列 • 异常检测 • 根源分析 • 总结
32. 所有metrics集合
33. 异常的metrics 正常的metrics
34. 基于相关性的RCA 异常的metrics • 从异常的metrics里找到最相关的metric • 算法:Pearson correlation • 生产环境例子: 警报metric: Overall Response Time 最相关的metric(相关度0.9876): es_data-02 QueryPhase Slow Calls
35. 基于决策树的RCA 异常的metrics 正常的metrics • 将异常/正常metrics分成labeled data • 算法:decision tree(或其他classifier) • 总结出异常metrics的规律 • 生产环境例子: 生成的Rules: • EsIndexCluster=prd28-7 && node=indexer_insert_001_prd28 • Application=prd28-analytics && EsIndexCluster=prd28-2 && transactionName=InsertEventIndexingStage • EsIndexCluster=prd28-1 && tier=indexer_prd28 RCA: • ES Cluster = prd28, stage = insert, tier = indexer
36. AI + 性能监控 异常检测 根源分析 被动式 (reactive) 实时 (real time) 预测 前瞻性 (proactive)
37. 智能运维里的时间序列 - 总结 • 性能监控里的时间序列 • 传统方法 • • • AI + 时间序列 • 异常检测 固定阈值 • Moving average based 基于平均值的动态阈值 • Exponential Smoothing Based • 分解(decomposition) Based • 深度学习(Deep Learning) Based • 为什么传统方法不work? • 忽视周期性 • 矩阵(Matrix) Based • 忽视趋势 • 自动模型选取:Ensemble Learning • 数据不完美 • 数据孤岛 • • 根源分析 • 基于相关性的RCA • 基于决策树的RCA 预测