博客/工程

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

2022年1月11日7分钟

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

我们已经在Grafana Cloud合成监控中发布了一个预定义警报。我们发送的预定义警报将在probe_all_success_summetric,并利用警报灵敏度配置创建多个Grafana Cloud警报规则。看看合成监测警报文件获取详细信息。

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

然后可以使用这些警报表达式构建警报规则。请参阅普罗米修斯文档了解更多细节。

警报表达式

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

以下是Grafana Cloud用户寻求帮助的5个常用表达:

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

在这里,我们将写入Grafana Cloud alert (Alertmanager)表达式。

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

1.正常运行时间

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

表达式:

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(!=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:] !

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 annotations: summary: " SM check on {{$labels. SM的错误率很高。实例}}和{{$标签。job}}" description: "SM Check {{$labels. "实例}}和{{$标签。作业}}的错误率超过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 . exr: 1 - (sum by (instance, job) (rate(probe_all_success_count{}[10m]
是带有条件/阈值的promQL表达式(在本例中为> 10).警报规则需要一个带条件的表达式。

您可以接受这个表达式并使用Grafana探索.如果你得到的数据是有条件的,那就意味着警报会触发。您可以测试警报表达式并调整阈值。

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

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

提示:你可以看看警报{}Prometheus时间序列,以查看哪些警报是活动的(挂起或触发)。

如果你想了解更多,请查看我们的会议Grafana云的综合监测来自GrafanaCONline 2021。

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