smtp_require_tls: 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。
重启AlertManager修改 AlertManager 启动命令,将本地alertmanager.yml文件挂载到容器内指定位置,是配置生效,命令如下所示:
docker run -d --name alertmanager -p 9093:9093 \ -v /root/prometheus/alertmanager/:/etc/alertmanager/ \ prom/alertmanager:latest 触发报警之前我们定义的 rule 规则为监测 job="linux" Node 是否活着,那么就可以停掉node-exporter服务来间接起到 Node Down 的作用,从而达到报警条件,触发报警规则。
使用命令 docker stop 容器id,停止服务后,等待 60s 之后可以看到 Prometheus target 里面 linux 状态为 unhealthy 状态,等待 60s 后,alert 页面由绿色 node-up (0 active) Inactive 状态变成了黄色 node-up (1 active) Pending 状态,继续等待 60s 后状态变成红色 Firing 状态,向 AlertManager 发送报警信息,此时 AlertManager 则按照配置规则向接受者发送邮件告警。
停掉服务后,我们来看状态的变化,首先是Inactive状态,AlertManager也没有报警信息,如下所示:
等待60s后,再次查看服务状态,变成了Pending状态,如下所示:
继续等待 60s,变成了Firing状态,如下所示:
并且AlertManager 有报警信息,如下所示:
查看自己的邮件,收到了邮件推送,如下所示:
服务一直处于停止状态,会一直推送消息,5分钟一次,如下所示:
说到这里,对有些时间节点有点不理解,这里有几个地方需要解释一下:
• 每次停止/恢复服务后,60s 之后才会发现 Alert 状态变化,是因为 prometheus.yml中 global -> scrape_interval: 60s 配置决定的,如果觉得等待 60s 时间太长,可以修改小一些,可以全局修改,也可以局部修改。例如局部修改 linux 等待时间为 5s。
• Alert 状态变化时会等待 15s 才发生改变,是因为host.rules中配置了for: 15s状态变化等待时间。
• 报警触发后,每隔 5m 会自动发送报警邮件(服务未恢复正常期间),是因为alertmanager.yml中route -> repeat_interval: 5m配置决定的。
在刚才的邮件内容中,基本信息有,但不直观,那可不可以自定义模板内容呢?答案是有的,我们继续来看。
自定义模板自定义一个邮件模板,在/root/prometheus/alertmanager/目录下,vim email.tmpl配置如下:
{{ define "email.from" }}1111111111@qq.com{{ end }} {{ define "email.to" }}222222222222@foxmail.com{{ end }} {{ define "email.html" }} {{ range .Alerts }} =========start==========<br> 告警程序: prometheus_alert <br> 告警级别: {{ .Labels.severity }} 级 <br> 告警类型: {{ .Labels.alertname }} <br> 故障主机: {{ .Labels.instance }} <br> 告警主题: {{ .Annotations.summary }} <br> 告警详情: {{ .Annotations.description }} <br> 触发时间: {{ .StartsAt.Format "2006-01-02 08:08:08" }} <br> =========end==========<br> {{ end }} {{ end }}