阿里云云原生架构实践
上QQ阅读APP看书,第一时间看更新

2.2.3 可观测原则

与监控、业务探活、APM(Application Performance Management,应用性能管理)等系统提供的被动能力不同,可观测性更强调主动性,在云计算这样的分布式系统中,主动通过日志、链路跟踪和度量等手段,让一次App点击所产生的多次服务调用耗时、返回值和参数都清晰可见,甚至可以下钻到每次第三方软件调用、SQL请求、节点拓扑、网络响应等信息中。运维、开发和业务人员通过这样的观测能力可以实时掌握软件的运行情况,并获得前所未有的关联分析能力,以便不断优化业务的健康度和用户体验。

随着云计算的全面发展,企业的应用架构发生了显著变化,正逐步从传统的单体应用向微服务过渡。在微服务架构中,各服务之间松耦合的设计方式使得版本迭代更快、周期更短;基础设施层中的Kubernetes等已经成为容器的默认平台;服务可以通过流水线实现持续集成与部署。这些变化可将服务的变更风险降到最低,提升了研发的效率。

在微服务架构中,系统的故障点可能出现在任何地方,因此我们需要针对可观测性进行体系化设计,以降低MTTR(故障平均修复时间)。

要想构建可观测性体系,需要遵循如下三个基本原则。

1.数据的全面采集

指标(Metric)、链路跟踪(Tracing)和日志(Logging)这三类数据是构建一个完整的可观测性系统的“三大支柱”。而系统的可观测性就是需要完整地采集、分析和展示这三类数据。

(1)指标

指标是指在多个连续的时间周期里用于度量的KPI数值。一般情况下,指标会按软件架构进行分层,分为系统资源指标(如CPU使用率、磁盘使用率和网络带宽情况等)、应用指标(如出错率、服务等级协议SLA、服务满意度APDEX、平均延时等)、业务指标(如用户会话数、订单数量和营业额等)。

(2)链路跟踪

链路跟踪是指通过TraceId的唯一标识来记录并还原发生一次分布式调用的完整过程,贯穿数据从浏览器或移动端经过服务器处理,到执行SQL或发起远程调用的整个过程。

(3)日志

日志通常用来记录应用运行的执行过程、代码调试、错误异常等信息,如Nginx日志可以记录远端IP、发生请求时间、数据大小等信息。日志数据需要集中化存储,并具备可检索的能力。

2.数据的关联分析

让各数据之间产生更多的关联,这一点对于一个可观测性系统而言尤为重要。出现故障时,有效的关联分析可以实现对故障的快速定界与定位,从而提升故障处理效率,减少不必要的损失。一般情况下,我们会将应用的服务器地址、服务接口等信息作为附加属性,与指标、调用链、日志等信息绑定,并且赋予可观测系统一定的定制能力,以便灵活满足更加复杂的运维场景需求。

3.统一监控视图与展现

多种形式、多个维度的监控视图可以帮助运维和开发人员快速发现系统瓶颈,消除系统隐患。监控数据的呈现形式应该不仅仅是指标趋势图表、柱状图等,还需要结合复杂的实际应用场景需要,让视图具备下钻分析和定制能力,以满足运维监控、版本发布管理、故障排除等多场景需求。

随着云原生技术的发展,基于异构微服务架构的场景会越来越多、越来越复杂,而可观测性是一切自动化能力构建的基础。只有实现全面的可观测性,才能真正提升系统的稳定性、降低MTTR。因此,如何构建系统资源、容器、网络、应用、业务的全栈可观测体系,是每个企业都需要思考的问题。