可观察性
我们必须假设,当未知问题出现时,我们可能不在现场:可能是深夜,也可能正在处理其他事情,等等。
即使我们在问题开始出现的那一刻注意到了问题,通常也不可能或不切实际地将调试器连接到生产环境中运行的进程(假设你一开始就知道应该查看哪个进程),而且性能下降可能会同时影响 多个系统。
我们唯一可以依赖的理解和调试未知问题的方法是遥测数据: 关于我们正在运行的应用程序的信息,这些信息会被自动收集,之后可以进行检查,以解答有关系统在某个时间点状态的问题。 什么问题?
好吧,如果这是一个未知的未知问题,我们事先并不知道需要提出哪些问题来隔离其根本原因——这就是关键所在。
我们的目标是拥有一个可观察的应用程序
引用自 Honeycomb 的可观察性指南:
可观察性是指能够针对你的环境提出任意问题,而无需 (——这是关键部分——) 提前知道你想问什么。
“任意”这个词用得有点过头了——就像所有绝对的表述一样,如果我们从字面上理解它,可能需要投入不合理的时间和金钱。
实际上,我们也会乐意选择一个具有足够可观察性的应用程序,以便我们能够提供我们向用户承诺的服务水平。
简而言之,要构建一个可观察的系统,我们需要:
- 对我们的应用程序进行检测,以收集高质量的遥测数据;
- 能够使用工具和系统,高效地对数据进行切片、切块和操作,以找到问题的答案。
我们将讨论一些可用于实现第二点的选项,但详尽的讨论超出了本书的范围。
在本章的其余部分,我们将重点讨论第一点。