1. 相关概念概述
如图所示,点击切换菜单标志,可以看到警报相关子选项。
-
警报规则:通过PromQL语句定义告警规则,即达到怎样的状态触发告警。
-
联络点: 设置当警报规则实例触发时,如何通知联系人,支持的方式有发送邮件,钉钉机器人消息,slack,webhook等。
-
通过策略: 定义警报如何路由到联络点。例如如何匹配告警示例,设置关联联络点,设置group,通知时间控制。
-
静默:设置静默时间段,再指定的时间阻止一个或多个警报通知。
-
组:查看来自 Alertmanager(警报管理器)实例的分组警报。
-
管理员: Alertmanager配置设置与查看。
2. 设置告警
设置告警没有固定的流程,我们按照菜单从上至下的顺序依次进行创建和设置。
2.1 创建警报规则
2.1.1 Rule name
我们设置一个发现有pod异常的警报规则,设置警报规则名:pod_abnormal
2.1.2 Define query and alert condition
设置查询语句和警报触发条件。如图所示:
选择数据源:Prometheus
查询语句为:cluster:pod_abnormal:sum,这是一个prometheus的recording rule返回异常的pod数量,这个语句返回内容没有label所以label fillters不设置。grafana页面功能很全,设置其他告警内容的话可以根据页面提示选择需要的指标和label过滤所需的数据。
grafana同一个警报规则下支持设置多个数据源的数据查询,点击Add query即可添加另一个数据源及查询语句。
然后设置Expressions(表达式),指定警报触发的条件,Expressions支持一些类型:
Reduce: 将所选时间范围内的时间序列值聚合为单个值,支持的Function包含Min、Max、Last等具体含义可看页面解释。
Math:对时间序列和数字数据执行自由形式的数学函数/操作。可用于预处理时间序列数据或为数字数据定义警报条件。
Resample:将时间范围重新对齐到一组新的时间戳,这在比较来自不同数据源的时间序列数据时非常有用,否则时间戳不会对齐。其中包括Downsample(下采样)和Upsample(上采样)。
Downsample(下采样)是将高频率数据转换为低频率数据的过程。在Grafana中,可以通过Downsample选项将原始数据按照指定的时间间隔进行聚合,以得到更低频率的数据。例如,可以将每分钟的数据Downsample为每小时的数据,以减少数据的噪声和波动。Downsample通常用于数据预处理、数据可视化和数据压缩等场景。
Upsample(上采样)是将低频率数据转换为高频率数据的过程。在Grafana中,可以通过Upsample选项将原始数据按照指定的时间间隔进行插值,以得到更高频率的数据。例如,可以将每小时的数据Upsample为每分钟的数据,以获取更详细的信息。Upsample通常用于数据可视化和数据分析等场景。
Threshold:检查是否有任何时间序列数据符合阈值条件。阈值表达式允许您比较两个单个值。当条件为假时返回0,如果条件为真则返回1。以下阈值函数可用:
-
Is above (x > y)
-
Is below (x < y)
-
Is within range (x > y1 AND x < y2)
-
Is outside range (x < y1 AND x > y2)
Classic condition:检查是否有任何时间序列数据与警报条件匹配,无论有多少时间序列满足条件,经典的条件表达式查询总是只产生一个警报实例。经典条件的存在主要是出于兼容性的原因,应该尽可能避免。
2.1.3 Set alert evaluation behavior
设置评估行为:
Folder:包括设置警报规则所属目录,
Evaluation group:设置警报规则评估组。Evaluation group可以选择已有组或者新建组,新建组可以设置组名和评估时间间隔。
Pending period:在警报规则触发之前,警报规则可能违反条件的时间段。可以设置合适的时间,防止误触告警。
2.1.4 Add annotations
可以添加一些注解在告警通知,例如触发告警的原因,告警规则的消息描述等。
Runbook URL功能允许将警报规则与相关的运行手册(runbook)关联起来。运行手册是一个包含有关如何处理特定警报的详细信息的网页。通过提供Runbook URL,可以让团队成员在收到警报时快速访问相关的运行手册,并按照其中的指导来解决问题。
以下是Grafana中Runbook URL的作用和使用场景:
-
提供警报处理指南:运行手册通常包含有关如何诊断和解决特定警报的详细信息。通过提供Runbook URL,可以让团队成员在收到警报时快速访问这些指南,并按照其中的指导来解决问题。
-
促进团队协作:在处理警报时,团队成员通常需要协作并共享信息。通过提供Runbook URL,可以让团队成员轻松访问共享的运行手册,并在其中记录和处理警报的相关信息。
-
提高效率:处理警报通常需要快速而准确地采取行动。通过提供Runbook URL,可以让团队成员避免在查找和处理警报时浪费时间,从而提高工作效率。
-
监控和报告:运行手册通常包含有关警报的监控和报告信息。通过提供Runbook URL,可以让团队成员轻松访问这些信息,并更好地了解警报的状态和趋势。
2.1.5 Configure notifications
添加自定义标签来改变告警通知的路由方式。通知策略根据标签匹配到相关的警报规则,进而发送告警通知。
此处我们设置pod=abnormal
2.1.6 保存退出
2.2 联络点
联络点页面包含创建联络点和创建通知模板两个部分,因为创建联络点是需要引用通知模板,所以我们先创建通知没模板,然后在创建联络点。
2.2.1 创建通知模板
创建通知模板内容很多,很灵活可参考官方文档,我们创建一个简单的例子:
Template name : 模板名,PodAbnormal
Payload data:告警实例的具体内容,通过Select alert instances可以选择添加已有告警,实例内容数据用于预览创建的告警模板生成的实际内容。
Content: 模板具体的内容,使用go模板语法实现:
{{ define "PodAbnormal.title" }}
{{ len .Alerts.Firing }} firing alert(s), {{ len .Alerts.Resolved }} resolved alert(s)
{{ end }}
{{ define "PodAbnormal.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{ range $i, $alert := .Alerts.Firing }}
[告警项目]:{{ index $alert.Labels "alertname" }}
[告警详情]:{{ index $alert.Annotations "description" }}
[触发时间]:{{ (.StartsAt).Format "2006-01-02 15:04:05" }}
{{ end }}{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{ range $i, $alert := .Alerts.Resolved }}
[项目]:{{ index $alert.Labels "alertname" }}
[告警详情]:{{ index $alert.Annotations "description" }}
[状态]:恢复正常
[开始]:{{ (.StartsAt).Format "2006-01-02 15:04:05" }}
[恢复]:{{ (.EndsAt).Format "2006-01-02 15:04:05" }}
{{ end }}{{- end }}
{{ end }}
2.2.2 创建联络点
点击Add contact point进入添加联络点页面:
Name: 联络点的名字。
Integration:选择联络点类型,支持钉钉,Email, Slack等等。此处示例设置钉钉机器人。
Optional DingDing settings:钉钉消息相关设置
-
MessageType: 支持Link和ActionCard两种类型。
-
Title:设置标题,可以直接输如或者引用已创建的模板内容
-
message: 设置消息内容,可以直接输如或者引用已创建的模板内容
Notification settings:是否禁用当告警状态返回false时发送的解析消息[OK]
2.2.3 保存退出
点击 save contact point
2.3 通知策略
通知策略用来确定警报如何路由到联络点。
可以看到已有一个Default policy,Default policy会路由所有的告警示例,所有的策略都是基于Default policy或者他的子策略的,策略是树状方式路由的。子策略可以覆盖父策略的组定义,及时间控制策略。可以通过label细化父策略的匹配范围。
2.3.1 创建通知策略
点击默认策略的New nested policy进入策略创建页面:
Matching labels:设置匹配警告规则的标签,与2.1.5相同设置为pod=abnormal。
Contact point:联络点选择上一节创建的DingTalk。
Continue matching subsequent sibling nodes:选择是否继续匹配子策略。
Override grouping:设置是否覆写父策略分组信息。
Override general timings:设置是否覆写父策略警报时间控制设置。
Mute timings:设置静默时间,引用静默时间需要提前创建好静默。
2.3.2 保存退出
点击Save policy。
3. 收到告警消息
4. 静默
静默用来设置在指定时间范围内即使有告警示例也不发送告警消息。
4.1 创建静默
点击Create silence进入创建静默页面:
Silence start and end:设置静默的起止时间段。
Matching labels:设置匹配的警报示例,同样这里设置为pod=abnormal。
Comment :给静默添加信息。
Affected alert instances:预览此静默影响到的Alerts。
4.2 保存退出
点击Save slience.