服务等级目标SLO概述

阿里云服务网格ASM提供了开箱即用的基于服务等级目标SLO(Service Level Objectives)的监控和告警能力,能够监控应用服务之间调用的延迟和错误率特征等。本文介绍SLO的相关概念。

SLO是什么?

服务等级指标SLI(Service Level Indicator)是衡量服务健康状况的指标。SLO是指服务等级的目标值或范围值,由一个或多个服务等级指标SLI组成。

SLO提供了一种形式化的方式来描述、衡量和监控微服务应用程序的性能、质量和可靠性。SLO为应用开发和平台团队、运维团队提供了一个共享的质量基准,可作为衡量服务水平质量以及持续改进的参考。使用SLI组合定义的SLO能够帮助团队以更精确的方式描述服务健康状况。

SLO示例如下:

  • 每分钟平均QPS > 100,000/s

  • 99%访问延迟 < 500ms

  • 99%每分钟带宽 > 200 MB/s

SLI类型和合规目标

ASM支持的SLI类型如下:

  • 服务可用性:服务成功响应的时间比例,对应的SLI插件类型为availability。HTTP响应码为429或以5XX(以5开头的状态码)会被判断为不可用。

  • 延迟时间:服务返回请求的响应所需的时间(单位为毫秒),对应的SLI插件类型为lantency。您可自定义延迟上限,高于上限的响应会被判断为不合格。

除了定义SLI之外,您还需要定义希望从服务中实现的合规目标。一般来说,合规目标需设置在合理范围内。例如,如果您的用户无法分辨服务的延迟时间是200毫秒还是600毫秒,请使用更高的值作为SLO中的延迟时间阈值。

设置合规目标时,也需要考虑服务的最终用户要求。不同的应用服务所需的目标也会不同,主要取决于用户对应用服务本身的实际可用性诉求。例如,有些非关键业务系统的目标可用性为99%(每年大约3天的停机时间),而关键服务的系统可能需要99.999%的可用性(每年约5分钟的停机时间)。

合规期

除了为SLI定义目标之外,SLO还指定衡量SLI的时间段。例如,某一天内的99%可用性与一个月内的99%可用性不同。第一个SLO不允许14分钟以上的连续停机时间(24小时 * 1%),第二个SLO允许连续停机时间长达约7小时(30天 * 1%)。

为简化定义,目前支持的时间段有7、14、28和30天。

错误预算

SLO的错误预算表示服务在不违反SLO的情况下,还能够承受的故障余量。因此,错误预算可以表示为:1 - SLO。

SLO示例如下:

  • SLI错误:请求状态代码

  • 期限:30天

  • SLO:99.9%

  • 错误预算:(100% - 99.9%) = 0.1%

  • 30天内的总请求数:10000

  • 允许的错误请求数:(10000 * 0.1%) = 10

若要满足SLO的要求,每30天最多允许的错误请求数为10个。设置错误预算,可以帮助您更好地规划和管理任务。例如,部署一个新版本时:

  • 当错误预算即将消耗殆尽时,应避免更新。

  • 当合规期即将结束、错误预算充足时,进行更新。此时违反SLO的概率较低。

错误预算将会按照滚动窗口进行更新,滚动窗口时间跨度和合规期相同。

  • 错误预算≥0:表示滚动窗口内SLO合规。

  • 错误预算<0:表示滚动窗口内SLO不合规。

燃烧率

燃烧率是错误预算的消耗速度。燃烧率等于当前错误率和期望的最大错误率的比值。燃烧率越高表示故障越严重。燃烧率对应制定告警规则至关重要,告警规则将基于燃烧率来触发告警。

计算公式为:燃烧率=错误率 ÷ (1 - SLO)

假设合规期为30天:

  • 燃烧率为1:如果维持当前的错误率,整个合规期将消耗100%的错误预算(30天消耗全部错误预算)。

  • 燃烧率为2:如果维持当前的错误率,整个合规期将消耗200%的错误预算(15天消耗全部错误预算)。

  • 燃烧率为60:如果维持当前的错误率,整个合规期将消耗6000%的错误预算(12个小时消耗全部错误预算)。

告警规则

告警规则能够根据故障的严重程度,在故障发生时及时发出不同等级的提醒,帮助您在错误预算被过多消耗之前及时响应。

ASM基于“多窗口多燃烧率告警策略”生成告警规则,适用于大多数场景。多燃烧率策略下,短时间内的高故障率或持续时间较长的低故障率,都会触发告警。短时间内的高故障率和低故障率且持续时间较长的故障才能触发告警,避免不必要的告警分散运维人员的精力从而错过真正关键的问题。多窗口能够在计算一段时间的故障率时同时设置一个短时间窗口,当短时间窗口内的故障率低于阈值时结束告警。设置短时间窗口可以保障故障处理后,及时解除告警。

以设置30天的SLO为例:

  • 当1小时内错误预算消耗2%(即该小时内错误率高于阈值的14.4倍)或6小时内消耗5%(阈值的6倍)时,会触发一个Page级别的告警;1天内错误预算消耗10%(阈值的3倍)或3天内错误预算消耗10%(阈值)时,会触发一个Ticket级别的告警。

  • 短时间窗口设置为1/12。

假设在3天内错误率保持为阈值的两倍,在第三天故障解除。短时间窗口能够使告警在6小时后解除。若无短时间窗口,即使不存在故障,告警也会持续3天。