监控系统应该解决两个问题∶什么东西出故障了,以及为什么出故障。
"什么东西出故障了"即为现象(symptom)∶"为什么"则代表了原因(可能只是中间原因,并不是根源问题)。表6-1列出了一些现象,以及它们对应的原因。
表6-1∶ 现象与原因的示例
"现象"和"原因"的区分是构建信噪比高的监控系统时最重要的概念。
Google大量依赖白盒监控,黑盒监控用得虽然不多,但都是在关键地方使用。黑盒监控与白盒监控最简单的区别是∶黑盒监控是面向现象的,代表了目前正在发生的——而非预测会发生的——问题,即"系统现在有故障"。白盒监控则大量依赖对系统内部信息的检测,如系统日志、抓取提供指标信息的HTTP节点等。白盒监控系统因此可以检测到即将发生的问题及那些重试所掩盖的问题等。
这里应该注意,在一个多层系统中,某一个服务的现象是另外一个服务的原因。例如,数据库性能问题。数据库读操作很缓慢是数据库SRE检测到的一个现象。然而,对前端SRE来说,他们看到的是网站缓慢,数据库读操作的缓慢则是原因。因此,白盒监控有时是面向现象的,有时是面向原因的,这取决于白盒系统所提供的信息。
当收集用于调试的遥测数据时,白盒监控是必不可少的。如果Web服务器看起来在那些依赖数据库的请求上很慢时,我们需要同时知道Web服务器检测到的数据库速度与数据库自己检测到的速度。否则,无法区分出到底是数据库问题还是Web服务器与数据库服务器之间的网络问题。
黑盒监控可以保证系统只在某个问题目前正在发生,并且造成了某个现象时才会发出紧急警报。另外一方面,针对那些还没有发生,但是即将发生的问题,黑盒监控通常是没用的。
|