我们经常听到Grafana云询问如何更好地编写提醒的指导方针的用户综合监测度量,并在合成监视检测到问题时得到通知。
我们已经在Grafana Cloud合成监控中发布了一个预定义警报。我们发送的预定义警报将在probe_all_success_summetric,并利用警报灵敏度配置创建多个Grafana Cloud警报规则。看看合成监测警报文件获取详细信息。
预定义警报使用记录规则probe_all_success_sum并与sm_check_info为了得到alert_sensitivity标签。方法创建警报规则记录规则使用用户定义的阈值。
然后可以使用这些警报表达式构建警报规则。请参阅普罗米修斯文档了解更多细节。
警报表达式
我们使用PromQL表达式来获取数据、缩放或使用promQL函数执行计算。
以下是Grafana Cloud用户寻求帮助的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账户?现在就免费注册并查看我们慷慨的永远免费提供和每个用例的计划。