案例环境:(全部关闭防火墙,禁用selinux)
Docker容器:ip | 需要安装的组件 |
Docker:192.168.1.40 | nodeExporter Prometheus server Cadvisor grafana alertmanager
|
docker2:192.168.1.50 | nodeExporter Cadvisor |
docker3:192.168.1.100 | nodeExporter Cadvisor |
基于Docker------prometheus(普罗米修斯)之部署组件及模板(1)的部署环境。在docker1上部署AlertManager报警插件。
配置alertmanager
alertmanager:用来接收prometheus发送的报警信息,并且执行设置好的报警方式,报警内容。
Prometheus的报警方式有好几种方式,像是邮箱、钉钉、微信等。
我这里选择由邮箱来报警。
需要AlertManager的镜像。
[root@docker1 ~]# docker images
prom/alertmanager latest 30594e96cbe8 3 months ago 53.2MB
先运行一个容器,将配置文件导出到本地。
[root@docker1 ~]# docker run -d --name alertmanager -p 9300:9300 prom/alertmanager
[root@docker1 ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml /root
#将容器中的配置文件复制到本地
[root@docker1 ~]# vim alertmanager.yml
修改配置文件:
修改后的配置文件如下:
[root@docker ~]# cat alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '576075690@qq.com' ###发送者信息
smtp_smarthost: 'smtp.qq.com:465' ###qq邮箱的SMTP服务器地址
smtp_auth_username: '576075690@qq.com' ###接收者信息
smtp_auth_password: 'phiujjtmgeflbeef' ###使用qq邮箱生成的授权码
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '576075690@qq.com' ###发送者信息
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
AlertManager.yml配置文件:
global:全局配置,包括报警解决后的超时时间、SMTP相关配置、各种渠道通知的API地址等新消息。
route:用来设置报警的分发策略。
receivers:配置告警消息接收者信息。
inhibit_rules:抑制规则配置,当存在于另一组匹配的警报时,抑制规则将禁用于一组匹配的警报。
删除刚刚运行的容器(alertmanager)。
[root@docker1 ~]# docker rm -f alertmanager
Alertmanager
重新运行容器:
[root@docker1 ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
Prometheus配置alertmanager报警规则:
[root@docker1 ~]# mkdir -p prometheus/rules
[root@docker1 ~]# cd prometheus/rules/
[root@docker1 rules]# cat node-up.rules
groups:
- name: node-up
rules:
- alert: node-up
expr: up{job="prometheus"} == 0 #必须与prometheus中配置文件(yml文件)中的 - job_name: 'prometheus' 一样。
for: 15s
labels:
severity: 1
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
具体的规则怎么写,在官网文档上有规则模板:
https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
配置完报警规则后,编辑prometheus的配置文件(本地挂载的)
[root@docker01 ~]# vim prometheus.yml
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.1.40:9093 #修改这一行。必须格外注意配置文件的格式,注意缩进。
rule_files:
- "/usr/local/prometheus/rules/*.rules" #添加,这是容器内的路径,是我们刚刚定义的报警规则。
# - "first_rules.yml"
# - "second_rules.yml"
删除prometheus的容器:
[root@docker01 ~]# docker rm -f prometheus
prometheus
重新运行prometheus容器:
[root@docker01 ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules/node-up.rules:/usr/local/prometheus/rules/node-up.rules prom/prometheus
创建监控规则,使用email报警方式。监控服务运行状态,如果服务节点down机状态,则发送邮件。
在网页上验证查询报警规则:
为验证监控报警我们先在docker2服务器上关闭服务,测试一下是否会触发报警:
登录邮箱会收到信息!
Altermanager配置自定义邮件模板
[root@docker01 ~]# cd prometheus/
[root@docker01 prometheus]# mkdir alertmanager-tmpl
[root@docker01 prometheus]# ls
alertmanager-tmpl rules
[root@docker01 prometheus]# cd alertmanager-tmpl/
[root@docker01 alertmanager-tmpl]# vim email.tmpl
{{ define "email.from" }}576075690@qq.com{{ end }} #go语言,谷歌开发。
{{ define "email.to" }}576075690@qq.com{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警级别: {{ .Labels.severity }} 级<br>
告警类型: {{ .Labels.alertname }}<br>
故障主机: {{ .Labels.instance }}<br>
告警主题: {{ .Annotations.summary }}<br>
触发时间: {{ .StartsAt.Format "2019-08-04 16:58:15" }} <br>
=========end==========<br>
{{ end }}
{{ end }}
编辑完成后,保存退出,编辑alertmanager配置文件。
[root@docker01 ~]# vim alertmanager.yml
只添加有注释的:
global:
resolve_timeout: 5m
smtp_from: '576075690@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '576075690@qq.com'
smtp_auth_password: 'kerrsgkynyzbeahh'
smtp_require_tls: false
smtp_hello: 'qq.com'
templates: #添加此行
- '/etc/alertmanager-tmpl/*.tmpl' #添加此行 #容器内的路径,需要去挂载一下。
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to" }}' #修改,必须和email.tmpl中的{{ define "email.to" }}576075690@qq.com{{ end }} 对应。
html: '{{ template "email.to.html" . }}' #修改,必须和email.tmpl中的{{ define "email.to.html" }} 名字对应
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
保存退出,将alertmanager容器删除,重新运行。
[root@docker01 ~]# docker rm -f alertmanager
alertmanager
重新运行alertmanager容器,并挂载模板文件。
[root@docker01 ~]# docker run -d --name alertmanger -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl:/etc/alertmanager-tmpl prom/alertmanager
7810946fb44e790d453bb6ce7676a2c722766c2d03d9d96f4c1caa5c17efe605
为验证监控报警我们先在docker2服务器上关闭服务,测试一下是否会触发报警:
这样报警信息一目了然。
至此,Prometheus的报警插件AlertManager部署完成。