1.3.4 可观测性
可观测性(observability)是来自控制理论领域的一个属性。在考虑一个系统的时候,可观测性指的是我们能够在多大程度上根据它的外部输出推断其内部状态。在软件工程方面,系统可能是单个应用,也可能是作为一个整体的分布式系统。外部输出可以是度量指标、日志或跟踪信息。图1.6展示了可观测性是如何运行的。
图1.6 可观测性指的是从应用的外部输出推断其内部状态。可管理性指的是通过外部输入改变其内部状态和输出。在这两种情况下,应用制品没有发生任何变化,它是不可变的
Twitter的可观测性工程团队识别了可观测性的四大支柱[10]。
[10] A. Asta, “Observability at Twitter: technical overview, part 1”, http://mng.bz/pO8G。
■ 监控:监控指的是测量应用的特定方面,以获取其整体的健康状况并识别故障。在本书中,我们将会利用Spring Boot Actuator提供的监控特性,并将Prometheus与Spring集成,以导出应用的相关度量指标。
■ 告警/可视化:只有将收集到的系统状态数据用于采取某些行动时,我们才能说这些数据是真正有用的。在监控应用的时候,如果识别出了故障,应该触发告警并采取一些操作来处理它。我们会使用特定的仪表盘将收集到的数据进行可视化,并将其绘制在相关的图表中,目标是在一个良好的画面中展示系统的行为。在本书中,我们将会学习如何使用Grafana来可视化从云原生应用中收集到的数据。
■ 分布式系统的跟踪基础设施:在分布式系统中,仅仅跟踪每个子系统的行为是不够的,重要的是要跟踪流经不同子系统的数据。在本书中,我们将会集成Spring和OpenTelemetry,并使用Grafana Tempo来收集和可视化跟踪信息。
■ 日志聚合/分析:对于推断软件的行为以及在出现问题时对其进行调试来说,跟踪应用的主要事件是非常重要的。在云原生系统中,日志应该进行聚合和收集,以便更好地了解系统行为,并且这样才有可能运行分析工具以挖掘这些数据中的信息。在本书中,我将会详细讨论日志。我们将使用Fluent Bit、Loki和Grafana来收集和可视化日志,并学习在云原生场景下使用日志的最佳实践。