按照《SRE:Google运维解密》中描述的, 分布式系统监控的四类黄金指标是:延迟(Latency)、流量(Traffic)、错误(Errors)、饱和度(Saturation)。
从下图可以看到,对每一个系统来说,监控指标覆盖了:输入、输出、和系统自身。
指标监控项
按照这个分类,在不同场景下,有不同的监控项:
监控关注点和策略
这些监控项都需要时序指标异常检测技术,除此之外,它们还有自己的特征:
1、 流量类
流量类主要关注点在:
- 异常流量:突增或突降、同比环比不一致。
- 历史峰值,以及基于历史流量预测未来流量。
相关技术解决策略:
- 百度是如何做智能流量异常检测,基于鲁棒回归的预测算法,可以不受异常点的影响,精准地预测流量水位值;基于泊松分布的检测算法,可以从概率的角度对流量建模,能够使用简单的恒定阈值来精准地检测流量异常。
2、 错误类
常态错误是不可取的,这部分要么应该归入某种业务状态,要么就要分析解决。
- 可归入业务状态的,需要看某种状态的走势,就回到流量类的异常走势分析了。
- 错误类的,要分析发生的原因,并看如何避免问题发生。
错误率突升或者成功率突降代表系统自身的处理逻辑可能存在问题,这类指标的异常检测利用了二项式分布,参看:《还记得概率课本中的二项分布吗?在我们的网络判障中发挥了大作用!》
3、 延迟类
- 服务接口有超时等待、超时重试相关设置,这部分的时间是底线时间。
- 由于
吞吐量 = 流量 * 平均耗时
,一旦耗时增大,服务的处理能力会下降,如果正好是高峰期,有扛不住的隐患。
基于上面两条认知,延迟类我们要看:
- 平均耗时。
- 基于业务特征,选择看 TP95,TP99,TP999 ... 耗时。
对于耗时大于一定阈值的,要做分析和解决,比如典型的数据库慢查询。
4、 饱和度类
负荷程度如何?由最短板所决定。比如:在内存受限的系统中,即为内存;在I/O受限的系统中,即为I/O。
很多系统在达到100% 利用率之前性能会严重下降,所以合理的利用率目标也是很重要的。