我已经读过几次Google SRE书,但是我需要一些澄清,确切说明如何设置刻录率,以及了解触发警报需要多长时间。

我的大多数问题特别是来自该书的这一部分:https://landing.google.com/sre/workbook/chapters/alerting-on-slos/#4-alert-on-burn-rate


在表5-4中,燃烧率为1时99.9%SLO的错误率等于0.1%。我只想确认-这0.1%来自100%-99.9%,其中99.9%是SLO。这是否意味着,如果某些服务的SLO值低得离谱(例如90%SLO),那么它们的烧录率为1的错误率将是10%。我会正确解释吗?
在下面的句子中,这本书说的是


对于基于燃烧率的警报,触发警报所需的时间为(1-SLO /错误率)*警报窗口大小*刻录率。


因此,如果我的SLO为95%,错误率为1(假设过去1个小时内出现的所有请求都是错误)。假设我的燃烧率为1。如果将这些值插入公式中,我将得到

(100-95/1) * 1 hour * 1 = 5.


这就是我的困惑所在。这是五个小时吗?您是否将1小时转换为60分钟来获取分钟?普罗米修斯发出第一条警报需要多长时间?

此外,如果要花5个小时才能发出警报,检测时间是否还为时不晚?也许一些有关如何使用此公式计算一些实际值的具体示例将非常有帮助。


下一个公式,


错误警报触发时消耗的预算是:(刻录率*警报窗口大小)/时间段。


请澄清一下-如果我的燃烧率是1且警报窗口大小是1个小时,这意味着在5个小时内,我将消耗掉(1 * 1)/ 5 =我的错误预算的20%。

这是对的吗?



表5-8提出了以下建议:如果长窗口为1小时,短窗口为5分钟,且刻录速度为14.4,消耗的错误预算为2%,则发送警报。

在上图中,它表明5分钟(10%)的错误率高于1小时的错误率。如果刻录率相同= 14.4,为什么它们的错误率会不同?我对此很难理解。

它还说,根据此信息,将需要5分钟来发出警报。这对于任何SLO都是正确的吗?还是仅对于99.9%的SLO才是真的?


最后,我们只想澄清一下:本章中的示例使用以下记录规则,该规则是针对每个请求的错误率。


job:slo_errors_per_request:ratio_rate1h {job =“ myjob”}>(14.4 * 0.001)


如果我想识别类似的东西延迟-即延迟超过2秒的所有请求的比率,则应为以下PromQL:

(sum by (job, le) (rate(latency_quantile{job="myjob", le="2"}[1h])) 
/
sum by (job, le) (rate(request_count{job="myjob"}[1h]))) > (14.4 * 0.001)


看起来正确吗?

最重要的是,我希望这一章得到作者的认可,因为它具有一些复杂的实现,并提供了一些更具体的示例,尤其是有关公式和燃烧率的示例。表格和图表中指定的一些示例很有意义。但是有些需要更多的说明才能理解细微差别(例如,指定14.4的刻录率转换为错误预算的2%,这是因为当您除以30 / 14.4时,会得到50个小时的错误预算,而1小时是这50小时的2%。)

评论

如果@ steven-thurgood(以及任何其他非常了解这些内容的人)可以提供帮助,那就太好了。

请说明SLO代表的位置

#1 楼


是的,您的解释正确。

用百分比表示SLO时,也应该用百分比表示错误率。因此,在您的示例中,错误率1为100%。这样就可以得出等式:

(100-95/100) * 1 hour * 1 = 0.05 hours = 3 minutes



该等式中的时间段是您为SLO选择的报告时间段。您没有提到选择哪个时间段。工作簿中的示例为30天。如果在示例中使用30天(720小时)的时间,则在触发警报之前的3分钟内,您将花费大约0.14%的错误预算:

( 1 * 1 hour ) / 720 hours = 0.14%



费率不同,因为它们是在不同时间段内测得的。 (请注意,该图使用对数标度,因此实际误差率和5m测量的峰值为15%,而不是10%。)


考虑要测量的一种错误开始后的一分钟:


5m测量中将看到4分钟无错误,加上一分钟的15%错误,这总错误率为3%。
60m的测量结果将显示59分钟无错误,再加上一分钟15%的错误,这就是0.25%的总体错误率。


然后在错误开始5分钟后: br />

5m的测量将出现5分钟的15%错误,因此总发生率为15%。
60m的测量将看到55分钟的无错误加上5分钟的错误15%的错误,因此总体比率为1.25%。这实际上仍然太低而无法触发警报,因此实际上要花5分钟以上的时间。



使用之前的等式,到警报时间为5.76分钟:

5.76 = (0.001/0.15) * 60 * 14.4




您的PromQL似乎在看好事件,而不是坏事件,因为le =“ 2”选择器用于存储桶计数等待时间小于或等于(le)2秒。您可能想为好事件创建一个单独的“ good_latency_rate1h”记录规则,然后使用类似“(1-good_latency_rate1h)>(14.4 * 0.001)”的警报表示。