那么警报是如何发出的呢?Prometheus以一个固定时间间隔来评估所有规则,这个时间由evaluate_interval定义,我们将其设置为15秒。在每个评估周期,Prometheus运行每个警报规则中定义的表达式并更新警报状态。警报可能有以下三种状态:
·Inactive:警报未激活。
·Pending:警报已满足测试表达式条件,但仍在等待for子句中指定的持续时间。
·Firing:警报已满足测试表达式条件,并且Pending的时间已超过for子句的持续时间。Pending到Firing的转换可以确保警报更有效,且不会来回浮动。没有for子句的警报会自动从Inactive转换为Firing,只需要一个评估周期即可触发。带有for子句的警报将首先转换为Pending,然后转换为Firing,因此至少需要两个评估周期才能触发。到目前为止,警报的生命周期如下:
·节点的CPU不断变化,每隔一段由scrape_interval定义的时间被Prometheus抓取一次,对我们来说是15秒。
·根据每个evaluation_interval的指标来评估警报规则,对我们来说还是15秒。
·当警报表达式为true时(对于我们来说是CPU超过80%),会创建一个警报并转换到Pending状态,执行for子句。
·在下一个评估周期中,如果警报测试表达式仍然为true,则检查for的持续时间。如果超过了持续时间,则警报将转换为Firing,生成通知并将其推送到Alertmanager。
·如果警报测试表达式不再为true,则Prometheus会将警报规则的状态从Pending更改为Inactive。
global:
smtp_smarthost: 'smtp.163.com:465' #此处我用的163的邮箱左右告警通知邮箱
smtp_from: 'yitian_hm123@163.com'
smtp_auth_username: 'yitian_hm123@163.com'
smtp_auth_password: '************'
smtp_require_tls: false
templates:
- 'template/*.tmpl'
route:
group_by: ['alertname','instance']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'email'
routes:
- match:
severity: critical
receiver: pager
- match_re:
severtity: warning|critical
receiver: support_team
receivers:
- name: 'email'
email_configs:
- to: 'yitian881112@126.com'
- name: 'support_team'
email_configs:
- to: '591710882@qq.com'
- name: 'pager'
email_configs:
- to: '591710882@qq.com'
- to: 'yitian881112@126.com'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
如上配置,当发生告警的时候根据告警的级别通过路由进行匹配,如果cirtical会发给对应的收件人类型,在每个收人对象下面可以配置多个收件邮箱、
下面简单解释下关于邮箱配置一些字段
929/5000
默认的SMTP From报头字段。
[smtp_from: ]
#用于发送邮件的默认SMTP智能主机,包括端口号。
#端口号通常是25,或587的SMTP通过TLS(有时称为STARTTLS)。
#示例:smtp.example.org: 587
[smtp_smarthost: ]
# SMTP服务器的默认主机名。
[smtp_hello: | default = "localhost"]
# SMTP认证使用cramp - md5, LOGIN和PLAIN。如果为空,则Alertmanager不验证到SMTP服务器。
[smtp_auth_username: ]
# SMTP认证使用LOGIN和PLAIN。
[smtp_auth_password: ]
# SMTP认证使用PLAIN。
[smtp_auth_identity: ]
# SMTP认证使用cam - md5。
[smtp_auth_secret: ]
#默认SMTP TLS要求。
#注意,Go不支持到远程SMTP端点的未加密连接。
[smtp_require_tls: | default = true]