Docker------prometheus(普罗米修斯)之部署监控及邮件报警(2)

案例环境:(全部关闭防火墙,禁用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: '[email protected]'                 ###发送者信息
  smtp_smarthost: 'smtp.qq.com:465'             ###qq邮箱的SMTP服务器地址
  smtp_auth_username: '[email protected]'		###接收者信息
  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: '[email protected]'					###发送者信息
    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机状态,则发送邮件。

在网页上验证查询报警规则:

Docker------prometheus(普罗米修斯)之部署监控及邮件报警(2)_第1张图片Docker------prometheus(普罗米修斯)之部署监控及邮件报警(2)_第2张图片

为验证监控报警我们先在docker2服务器上关闭服务,测试一下是否会触发报警:

登录邮箱会收到信息!

Docker------prometheus(普罗米修斯)之部署监控及邮件报警(2)_第3张图片

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" }}[email protected]{{ end }}					#go语言,谷歌开发。
{{ define "email.to" }}[email protected]{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========
告警程序: prometheus_alert
告警级别: {{ .Labels.severity }} 级
告警类型: {{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
触发时间: {{ .StartsAt.Format "2019-08-04 16:58:15" }}
=========end==========
{{ end }} {{ end }} 编辑完成后,保存退出,编辑alertmanager配置文件。 [root@docker01 ~]# vim alertmanager.yml 只添加有注释的: global: resolve_timeout: 5m smtp_from: '[email protected]' smtp_smarthost: 'smtp.qq.com:465' smtp_auth_username: '[email protected]' 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" }}[email protected]{{ 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服务器上关闭服务,测试一下是否会触发报警:

Docker------prometheus(普罗米修斯)之部署监控及邮件报警(2)_第4张图片

这样报警信息一目了然。

至此,Prometheus的报警插件AlertManager部署完成。

 

你可能感兴趣的:(docker)