天天看点

Prometheus alertmanager模块

overview

alertmanager与prometheus是相互分离的两个部分。prometheus服务器根据报警规则将警报发送给alertmanager,然后alertmanager将silencing、inhibition、aggregation等消息通过电子邮件、paperduty和hipchat发送通知。

设置警报和通知的主要步骤:

安装配置alertmanager

配置prometheus通过<code>-alertmanager.url</code>标志与alertmanager通信

在prometheus中创建告警规则

alertmanager简介及机制

alertmanager处理由类似prometheus服务器等客户端发来的警报,之后需要删除重复、分组,并将它们通过路由发送到正确的接收器,比如电子邮件、slack等。alertmanager还支持沉默和警报抑制的机制。

分组是指当出现问题时,alertmanager会收到一个单一的通知,而当系统宕机时,很有可能成百上千的警报会同时生成,这种机制在较大的中断中特别有用。

例如,当数十或数百个服务的实例在运行,网络发生故障时,有可能服务实例的一半不可达数据库。在告警规则中配置为每一个服务实例都发送警报的话,那么结果是数百警报被发送至alertmanager。

但是作为用户只想看到单一的报警页面,同时仍然能够清楚的看到哪些实例受到影响,因此,人们通过配置alertmanager将警报分组打包,并发送一个相对看起来紧凑的通知。

分组警报、警报时间,以及接收警报的receiver是在配置文件中通过路由树配置的。

抑制是指当警报发出后,停止重复发送由此警报引发其他错误的警报的机制。

例如,当警报被触发,通知整个集群不可达,可以配置alertmanager忽略由该警报触发而产生的所有其他警报,这可以防止通知数百或数千与此问题不相关的其他警报。

抑制机制可以通过alertmanager的配置文件来配置。

沉默是一种简单的特定时间静音提醒的机制。一种沉默是通过匹配器来配置,就像路由树一样。传入的警报会匹配re,如果匹配,将不会为此警报发送通知。

沉默机制可以通过alertmanager的web页面进行配置。

alertmanager的配置

alertmanager通过命令行flag和一个配置文件进行配置。命令行flag配置不变的系统参数、配置文件定义的禁止规则、通知路由和通知接收器。

要查看所有可用的命令行flag,运行<code>alertmanager -h</code>。

alertmanager在运行时加载配置,如果不能很好的形成新的配置,更改将不会被应用,并记录错误。

要指定加载的配置文件,需要使用<code>-config.file</code>标志。该文件使用yaml来完成,通过下面的描述来定义。括号内的参数是可选的,对于非列表的参数的值设置为指定的缺省值。

路由块定义了路由树及其子节点。如果没有设置的话,子节点的可选配置参数从其父节点继承。

每个警报进入配置的路由树的顶级路径,顶级路径必须匹配所有警报(即没有任何形式的匹配)。然后匹配子节点。如果continue的值设置为false,它在匹配第一个孩子后就停止;如果在子节点匹配,continue的值为true,警报将继续进行后续兄弟姐妹的匹配。如果警报不匹配任何节点的任何子节点(没有匹配的子节点,或不存在),该警报基于当前节点的配置处理。

示例:

抑制规则,是存在另一组匹配器匹配的情况下,静音其他被引发警报的规则。这两个警报,必须有一组相同的标签。

顾名思义,警报接收的配置。

alertmanager会使用以下的格式向配置端点发送http post请求:

报警规则

报警规则允许你定义基于prometheus语言表达的报警条件,并发送报警通知到外部服务。

报警规则通过以下格式定义:

for子句使得prometheus等待第一个传进来的向量元素(例如高http错误的实例),并计数一个警报。如果元素是active,但是没有firing的,就处于pending状态。

labels(标签)子句允许指定一组附加的标签附到警报上。现有的任何标签都会被覆盖,标签值可以被模板化。

annotations(注释)子句指定另一组未查明警报实例的标签,它们被用于存储更长的其他信息,例如警报描述或者链接,注释值可以被模板化。

prometheus可以周期性的发送关于警报状态的信息到alertmanager实例,然后alertmanager调度来发送正确的通知。该alertmanager可以通过<code>-alertmanager.url</code>命令行flag来配置。

继续阅读