涨薪技术|Prometheus自定义告警模板及屏蔽告警通知
在Prometheus告警管理中自定义告警模板(Alert Templates) 是实现告警信息标准化、结构化输出的核心机制。通过合理设计模板可以显著提升告警的可读性、可维护性及与下游系统(如邮件、IM、运维平台)的集成效率。1自定义告警模板默认情况下Alertmanager使用了系统自带的默认通知模板模板源码可以从下方地址获得。https://github.com/prometheus/alertmanager/blob/master/template/default.tmplAlertmanager的通知模板基于Go的模板系统。Alertmanager也支持用户定义和使用自己的模板一般来说有两种方式可以选择。第一种基于模板字符串用户可以直接在Alertmanager的配置文件中使用模板字符串例如:receivers: - name: slack-notifications slack_configs: - channel: #alerts text: https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}第二种方式自定义可复用的模板文件例如可以创建自定义模板文件custom-template.tmpl如下所示{{ define slack.myorg.text }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}}通过在Alertmanager的全局设置中定义templates配置来指定自定义模板的访问路径:# Files from which custom notification template definitions are read. # The last component may use a wildcard matcher, e.g. templates/*.tmpl. templates: [ - filepath ... ]在设置了自定义模板的访问路径后用户则可以直接在配置中使用该模板receivers: - name: slack-notifications slack_configs: - channel: #alerts text: {{ template slack.myorg.text . }} templates: - /etc/alertmanager/templates/myorg.tmpl2屏蔽告警通知Alertmanager提供了方式可以帮助用户控制告警通知的行为包括预先定义的抑制机制和临时定义的静默规则。抑制机制Alertmanager的抑制机制可以避免当某种问题告警产生之后用户接收到大量由此问题导致的一系列的其它告警通知。例如当集群不可用时用户可能只希望接收到一条告警告诉他这时候集群出现了问题而不是大量的如集群中的应用异常、中间件服务异常的告警通知。在Alertmanager配置文件中使用inhibit_rules定义一组告警的抑制规则inhibit_rules: [ - inhibit_rule ... ]每一条抑制规则的具体配置如下target_match: [ labelname: labelvalue, ... ] target_match_re: [ labelname: regex, ... ] source_match: [ labelname: labelvalue, ... ] source_match_re: [ labelname: regex, ... ] [ equal: [ labelname, ... ] ]当已经发送的告警通知匹配到target_match和target_match_re规则当有新的告警规则如果满足source_match或者定义的匹配规则并且已发送的告警与新产生的告警中equal定义的标签完全相同则启动抑制机制新的告警不会发送。例如定义如下抑制规则- source_match: alertname: NodeDown severity: critical target_match: severity: critical equal: - node例如当集群中的某一个主机节点异常宕机导致告警NodeDown被触发同时在告警规则中定义了告警级别severitycritical。由于主机异常宕机该主机上部署的所有服务中间件会不可用并触发报警。根据抑制规则的定义如果有新的告警级别为severitycritical并且告警中标签node的值与NodeDown告警的相同则说明新的告警是由NodeDown导致的则启动抑制机制停止向接收器发送通知。临时静默除了基于抑制机制可以控制告警通知的行为以外用户或者管理员还可以直接通过Alertmanager的UI临时屏蔽特定的告警通知。通过定义标签的匹配规则(字符串或者正则表达式)如果新的告警通知满足静默规则的设置则停止向receiver发送通知。进入Alertmanager UI点击New Silence显示如下内容创建静默规则用户可以通过该UI定义新的静默规则的开始时间以及持续时间通过Matchers部分可以设置多条匹配规则(字符串匹配或者正则匹配)。填写当前静默规则的创建者以及创建原因后点击Create按钮即可。通过Preview Alerts可以查看预览当前匹配规则匹配到的告警信息。静默规则创建成功后Alertmanager会开始加载该规则并且设置状态为Pending,当规则生效后则进行到Active状态。活动的静默规则当静默规则生效以后从Alertmanager的Alerts页面下用户将不会看到该规则匹配到的告警信息。