首页 > 其他分享 >Prometheus告警的艺术

Prometheus告警的艺术

时间:2022-10-19 16:39:01浏览次数:53  
标签:Alertmanager 配置 server Prometheus 艺术 规则 告警

告警是整个监控系统中重要的组成部分,在Prometheus监控体系中,指标的采集存储与告警是分开的。告警规则是在Prometheus server端定义的,告警规则被触发后,才会将信息发送给独立组件Alertmanager上,经过对告警的处理后,最终通过接收器(如Email)通知用户。

在使用Prometheus进行告警时,首要的问题是,什么时候应该发出告警?一个好的告警是在正确的时刻、因正确的理由、踏着正确的节奏发送,并在其中放入真实有用的信息。我们发出告警的时刻一定是重要的系统或服务出现异常,导致最终用户体验不佳或无法正常使用服务,并需要人工检查。要针对最终用户的潜在痛点进行告警,才能使告警的数量保持较小,从而防止对系统或服务进行过度监控。保持小而重要的告警数量,是告警的一个关键原则,也就是说告警应该是重要的、可操作的和真实的

其次是告警要包含哪些内容?对于面向最终用户提供内容的在线服务,通常尽可能在高延迟和错误率等条件下发出告警;对于容量建议告警,应检测容量何时耗尽,从而导致停机;对于批处理作业,在作业最近未成功时发出告警。当然大家对于告警内容的设定要适应自身应用环境,特别是线上重要业务接口类内容。告警应该链接到相关的仪表盘和控制台,这些仪表盘和控制台中的信息可以回答关于被警报的服务的基本问题,以便随叫随到的管理员可以快速解读潜在问题。

Prometheus server与Alertmanager是相互分离的两个组件。我们使用Prometheus server采集各类监控指标,然后基于PromQL对这些指标定义阈值告警规则(Rules)。Prometheus server对告警规则周期性地进行计算,如果满足告警触发条件,便生成一条告警信息,并将其推送到Alertmanager组件。收到告警信息后,Alertmanager会处理告警,进行分组(grouping)并将它们路由(routing)到正确的接收器(receiver),如Email、PagerDuty和HipChat等,最终把异常事件的通知发送给接收者。

分组机制(Grouping)是指,AlertManager将同类型的告警进行分组,合并多条告警到一个通知中。在实际环境中,特别是云计算环境中的业务线之间密集耦合时,若出现多台设备宕机,可能会导致成百上千个告警被触发。在这种情况下使用分组机制,可以将这些被触发的告警合并为一个告警进行通知,从而避免瞬间突发性地接收大量的告警通知,使得管理员无法对问题进行快速定位。

Alertmanager的抑制机制(Inhibition)是指,当某告警已经发出,停止重复发送由此告警引发的其他异常或故障的告警机制。在生产环境中,例如IDC托管机柜中,若每个机柜接入层仅仅是单台交换机,那么该机柜接入交换机故障会造成机柜中服务器非UP状态告警;再有服务器上部署的应用不可访问也会触发告警。此时,可以配置Alertmanager忽略由交换机故障造成的机柜所有服务器及其应用不可访问而产生的告警。

告警静默(Silences)提供了一个简单的机制,可以根据标签快速对告警进行静默处理。对传入的告警进行匹配检查,如果接收到的告警符合静默的配置,Alertmanager则不会发送告警通知。管理员可以直接在Alertmanager的Web界面中临时屏蔽指定的告警通知。

看到alertmanager配置文件格式通常包括global(全局配置)templates(告警模板)route(告警路由)receivers(接收器)inhibit_rules(抑制规则)等主要配置项模块。

  • global即全局配置,在Alertmanager配置文件中,只要全局配置项中配置的选项内容均为公共设置,便可以作为其他配置项的默认值,也可以被其他配置项中的设置覆盖掉。
  • route告警路由模块描述了在收到Prometheus server生成的告警后,将告警发送到receiver指定的目的地址的规则。
  • receivers接收器是一个统称,每个receiver需要设置一个全局唯一名称,并且对应一个或者多个通知方式,包括电子邮箱、微信、PagerDuty、HipChat和Webhook等。
  • inhibit_rule模块中设置实现告警抑制功能,我们可以指定在特定条件下要忽略的告警条件。可以使用此选项设置首选项,例如优先处理某些告警,如果同一组中的告警同时发生,则忽略其他告警。

Prometheus从收集监控目标信息开始,到触发一条告警的过程

1)定义规则

在Prometheus配置文件中,配置scrape_interval:15s(默认值是1min)为收集监控目标信息的采集周期,并且配置对应的告警规则。scrape_interval可以是全局设置,也可以是单metric定义。

2)周期计算

对相应的表达式进行计算时,在Prometheus配置文件中配置evaluation_interval:15s(默认值是1min)为告警规则计算周期,evaluation_interval只是全局计算周期值。

3)告警状态转换。·

  • 当首次发现告警规则条件成立,即表达式为真,并且没有满足告警规则中for子句中指定的持续时间时,告警状态切换为PENDING。
  • 若下一个计算周期中,表达式仍然为真,并且满足告警规则中for子句中指定的持续时间时,告警状态转换成FIRING,即为active,告警被Prometheus发送到Alertmanager组件。
  • 若下下个计算周期,表达式还是为真,并且满足告警规则中for子句中指定的持续时间时,持续发送告警到Alertmanager组件。
  • 直到某个计算周期,表达式为假,告警状态会变为inactive,并且会有一个resolve被发送给Altermanger,用于说明此告警已解决。

标签:Alertmanager,配置,server,Prometheus,艺术,规则,告警
From: https://blog.51cto.com/key3feng/5775939

相关文章