博客/工程

Grafana Cloud中5个用户请求的合成监控警报

2022年1月11日 7分钟

我们经常听到Grafana云询问如何编写更好的提醒的指导方针的用户综合监测度量并在综合监控检测到问题时获得通知。

我们已经在Grafana Cloud合成监控中发布了预定义的警报。发送的预定义警报将在probe_all_success_sum度量,并使用警报敏感性配置来创建多个Grafana Cloud警报规则。看看合成监控提醒医生获取详细信息。

预先定义的警报使用上的记录规则probe_all_success_sum并与sm_check_info为了得到alert_sensitivity标签。方法创建警报规则记录规则使用用户定义的阈值。

然后可以使用这些警报表达式来构建警报规则。请参阅普罗米修斯文档欲知详情。

警报表达式

我们使用PromQL表达式来获取数据、缩放或使用promQL函数执行计算。

以下是我们的Grafana Cloud用户正在寻求帮助的前五个表达:

  1. 正常运行时间-目标完成的时间百分比。
  2. 可达性—所有检查成功的百分比。
  3. 平均延迟-所有检查收到响应的平均时间。
  4. 出错率-总错误率是多少?
  5. 探针错误率-每个探测器在观察给定目标时的误差百分比是多少?

在这里,我们将编写Grafana Cloud警报(Alertmanager)表达式表示最需要的合成监测指标。

我们将使用10分钟[10米]时间段内的警报作为示例,但这可以更改为任何长度的时间。

1.正常运行时间

该警报在目标关闭时触发(即,所有探测的检查都失败)。

表达式:

Sum_over_time ((ceil(sum by(实例,作业)(idelta(probe_all_success_sum{}[10m])) / sum by(实例,作业)(idelta(probe_all_success_count{}[10m]) / count_over_time((sum by(实例,作业)(idelta(probe_all_success_count{}[10m])) [10m:])

当这个表达式不等于1(!=1)时,这将意味着目标已关闭,并且没有探测能够到达目标。

如果至少有一个探测器能够到达目标并成功检查目标(即检查需要通过),则该警报将不会触发。

您可以配置一个检查,使所有探测都100%失败,以测试这个表达式。为此,使用重定向的目标,并将检查配置为不跟随重定向。所有探测都将100%失败,或者使用一个不存在的目标。

例子提醒:当所有探测无法到达目标时发出警报

Sum_over_time ((ceil(sum by (instance, job) (idelta(probe_all_success_sum{}[10m])) / sum by (instance, job) (idelta(probe_all_success_count{}[10m])) / count_over_time((sum by (instance, job) (idelta(probe_all_success_count{}[10m])) [10m:]) != 1

2.可达性

可达性是在该时间段内所有检查成功的百分比。

在本例中,根据定义警报阈值的方式,我们有两个可能的警报表达式。

表达式1:

Sum by (instance, job) (delta(probe_all_success_sum{}[10m])) / Sum by (instance, job) (delta(probe_all_success_count{}[10m]))

该表达式返回0 - 1范围内的可达性,其中1表示100%可达。如果您希望在可达性下降到90%时发出警报,则可以使用0.9作为阈值。

例子提醒:可达性低于90%时发出警报

Sum by (instance, job) (delta(probe_all_success_sum{}[10m])) / Sum by (instance, job) (delta(probe_all_success_count{}[10m])) < 0.9

表达式2:

100 * (sum by (instance, job) (delta(probe_all_success_sum{}[10m])) / sum by (instance, job) (delta(probe_all_success_count{}[10m]))))

此表达式返回0 - 100范围内的可达性。在本例中,我们将指标缩放100以实现这一目标。这里可以直接使用百分比数字作为阈值。

例子提醒:可达性低于90%时发出警报

100 * (sum by (instance, job) (delta(probe_all_success_sum{}[10m])) / sum by (instance, job) (delta(probe_all_success_count{}[10m]))) < 90

3.平均延迟

表达式1:

Sum by (instance, job) (rate(probe_all_duration_seconds_sum{}[10m])) / Sum by (instance, job) (rate(probe_all_duration_seconds_count{}[10m]))

这个表达式返回以秒为单位的延迟,因此我们需要以秒或秒的几分之一来定义警报阈值。

例子提醒:当延迟超过1秒时发出警报

Sum by (instance, job) (rate(probe_all_duration_seconds_sum{}[10m])) / Sum by (instance, job) (rate(probe_all_duration_seconds_count{}[10m])) > 1

例子提醒:当延迟超过500毫秒时发出警报

Sum by (instance, job) (rate(probe_all_duration_seconds_sum{}[10m])) / Sum by (instance, job) (rate(probe_all_duration_seconds_count{}[10m])) > 0.5

表达式2:

1000 * (sum by (instance, job)(rate(probe_all_duration_seconds_sum{}[10m])) / sum by (instance, job)(rate(probe_all_duration_seconds_count{}[10m])))

这个表达式返回以毫秒为单位的延迟,毫秒可以用作警报阈值。在这里,我们将相同的表达式缩放1000以获得以毫秒为单位的结果。

例子提醒:当延迟超过500毫秒时发出警报

1000 * (sum by (instance, job) (rate(probe_all_duration_seconds_sum{}[10m])) / sum by (instance, job) (rate(probe_all_duration_seconds_count{}[10m])) > 500

4.出错率

表达式1:

1 - (sum by (instance, job) (rate(probe_all_success_sum{}[10m])) / sum by (instance, job) (rate(probe_all_success_count{}[10m])))

该表达式返回0 - 1范围内的错误率。对于警报,我们需要定义0-1范围内的阈值。

例子提醒:错误率超过10%时报警

1 - (sum by (instance, job) (rate(probe_all_success_sum{}[10m])) / sum by (instance, job) (rate(probe_all_success_count{}[10m])) > 0.1

表达式2:

100 * (1 - (sum by (instance, job) (rate(probe_all_success_sum{}[10m])) / sum by (instance, job) (rate(probe_all_success_count{}[10m])))) .

此警报表达式按100进行缩放。现在错误率在0-100范围内。我们可以使用百分比作为警报阈值。

例子提醒:错误率超过10%时报警

100 * (1 - (sum by (instance, job) (rate(probe_all_success_sum{}[10m])) / sum by (instance, job) (rate(probe_all_success_count{}[10m])))) > 10

5.探针错误率

探针的错误率与错误率相同,只是我们将探针包括在分解数据的总和中,并为每个探针获得一个度量。

表达式1:

1 - (sum by (instance, job, probe) (rate(probe_all_success_sum{}[10m])) / sum by (instance, job, probe) (rate(probe_all_success_count{}[10m])))

这个表达式返回0 - 1范围内的错误率,并且这个错误率适用于每个探测。对于警报,我们需要定义0-1范围内的阈值。

例子提醒:当探针错误率超过50%时发出警报

1 - (sum by (instance, job, probe) (rate(probe_all_success_sum{}[10m])) / sum by (instance, job, probe) (rate(probe_all_success_count{}[10m])) > 0.5

表达式2:

100 * (1 - (sum by (instance, job, probe) (rate(probe_all_success_sum{}[10m])) / sum by (instance, job, probe) (rate(probe_all_success_count{}[10m])))) .

此警报表达式按100进行缩放。现在每个探针的错误率在0-100范围内。我们可以使用百分比作为警报阈值。

例子提醒:当探针错误率超过50%时发出警报

100 * (1 - (sum by (instance, job, probe) (rate(probe_all_success_sum{}[10m])) / sum by (instance, job, probe) (rate(probe_all_success_count{}[10m])))) > 50

预警规则

要构建警报,我们需要在该表达式中添加一个条件。当条件计算为true时(即返回一些数据),我们的警报被认为是活动的。

告警规则示例:

alert: SMHighErrorRateAbove10Per expr: 100 * (1 - (sum by (instance, job) (rate(probe_all_success_sum{}[10m]))/sum by (instance, job) (rate(probe_all_success_count{}[10m])))) > 10 for: 5m注释:summary: "High error rate on SM check on {{$labels. "实例}}和{{$标签。description: "SM检查{{$标签。实例}}和{{$标签。Job}}的错误率超过10%"

在这个示例警报规则中,当所有探测的任何检查的错误率在过去10分钟内超过10%时,我们将发出警报。

警告:SMHighErrorRateAbove10Per
是我们的警报名称

Expr: 100 * (1 - (sum by (instance, job) (rate(probe_all_success_sum{}[10m]))/sum by (instance, job) (rate(probe_all_success_count{}[10m]))))
是我们的promQL表达式(带有条件/阈值)。

Expr: 100 * (1 - (sum by (instance, job) (rate(probe_all_success_sum{}[10m]))/sum by (instance, job) (rate(probe_all_success_count{}[10m])))) > 10 .执行以下命令
是带有条件/阈值的promQL表达式(>在这里是10).警报规则需要一个带条件的表达式。

您可以获取这个表达式并使用Grafana探索.如果您返回有条件的数据,这意味着警报将触发。您可以测试警报表达式并调整阈值。

: 5米
定义表达式求值为true(即返回数据)后等待的时间。在本例中,表达式至少需要计算为true 5分钟,警报才会触发。警报将停留在等待状态5分钟,之后将过渡到发射状态。

注释:
此部分可用于定义附加信息,如警报描述、运行簿链接或仪表板链接。您可以使用本节中的模板来显示警报标签或其他详细信息。

提示:你可以看看警报{}普罗米修斯时间序列,以查看哪些警报是活动的(挂起或启动)。

如果你想了解更多,请查看我们关于Grafana Cloud中的合成监测来自GrafanaCONline 2021。

没有Grafana Cloud账户?现在免费注册并查看我们慷慨的永远免费的产品和每个用例的计划。