经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Docker » 查看文章
docker09-Prometheus
来源:cnblogs  作者:林奋斗的成长之路  时间:2021/3/1 8:48:46  对本文有异议

环境准备:

主机名称
IP
安装组件
Prometheus
192.168.1.1
NodeEXporter、cAdvisor、Prometheus Server、Grafana
node1
192.168.1.2
NodeEXporter、cAdvisor
node2
192.168.1.4
NodeEXporter、cAdvisor

注意事项:

全部关闭防火墙,禁用selinux。

需要部署的组件:

Prometheus Server: 普罗米修斯的主服务器。

NodeEXporter: 负责收集Host硬件信息和操作系统信息。

cAdvisor: 负责收集Host上运行的容器信息。

Grafana: 负责展示普罗米修斯监控界面。

1、3个节点,全部部署node-EXporter,和cAdvisor.

//部署node-EXporter,收集硬件和系统信息。
       
  1. docker run -d -p 9100:9100 --name exporter -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

  效果图:http://192.168.1.1:9100/  http://192.168.1.2:9100/  http://192.168.1.4:9100/

 PS:注意,这里使用了--net=host不等于host网络,作用是Prometheus Server可以直接与Node-EXporter通信。

//部署安装cAdvisor,收集节点容器信息。

  1. docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -p 8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor
 访问测试:http://IP:8080/

 

 

2、在Prometheus上部署Prometheus Server服务。

在部署prometheus之前,我们需要对它的配置文件进行修改,所以我们先运行一个容器,先将其配置文件拷贝出来。

  1. #运行普罗米修斯容器
  2. [root@Prometheus ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
  3. WARNING: Published ports are discarded when using host network mode
  4. 0015d42a6f0348ff5ba6c0dd7e51cf9bac8656be346b6f433293754002012e8c
  5. #copy配置文件到宿主机
  6. [root@Prometheus ~]# docker cp prometheus:/etc/prometheus/prometheus.yml ./
    #修改宿主机copy的配置文件
    [root@Prometheus ~]# vim prometheus.yml
  1. static_configs:
  2. - targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.1.5:8080','192.168.1.5:9100','192.168.1.6:8080','192.168.1.6:9100']
PS: 这里指定了prometheus的监控项,包括它也会监控自己收集到的数据。

//重新运行prometheus容器,并且挂载修改的yml文件

  1. [root@Prometheus ~]# docker rm -f prometheus
  2. prometheus
  3. [root@Prometheus ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  4. WARNING: Published ports are discarded when using host network mode
  5. 2857c1a73e934ad117f0bb6be59c3cec6efe701b776df59df8f54248bcd539d2
    #测试访问:IP:9090

三、在prometheus主机上,部署grafana服务,用来展示prometheus收集到的数据。

  1. [root@Prometheus ~]# mkdir grafana-storage
  2. [root@Prometheus ~]# chmod 777 -R grafana-storage/
  3. [root@Prometheus ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana
  4. b95a4c30105ed9a0b8448da49efd4e11e4505f04e2f7a4b454f0e9910bbc4e48
  5. #上述命令中的“-e”选项是为了设置默认的登录用户admin,密码为“123.com”。
  6. #如果启动容器的过程中,提示iptables等相关的错误信息,
  7. #则需要执行命令systemctl restart docker,重启docker服务,然后重新运行容器
  8. #但是需要注意,若运行容器时没有增加“--restart=always”选项的话,
  9. #那么在重启docker服务后,还需将所有容器手动重启。
  10. #重启所有容器命令“docker ps -a -q | xargs docker start”
    #访问测试:IP:3000

 

 //设置Grafana,添加数据来源(prometheus)

 

 

 

 

 

 PS:看到这个提示,说明prometheus和grafana服务的是正常连接的。此时,虽然grafana收集到了数据,但怎么显示它,仍然是个问题,grafana支持自定义显示信息,不过要自定义起来非常麻烦,不过好在,grafana官方为我们提供了一些模板,来供我们使用。

https://grafana.com/grafana/dashboards

  

 

 导入模板用两种方法:JSON、id!

JSON如下:

 

 

 

 

 

 效果图:

四、配置AlertManager

接下来,我们需要启动 AlertManager 来接受 Prometheus 发送过来的报警信息,并执行各种方式的告警。同样以 Docker 方式启动AlertManager,最简单的启动命令如下

 

  1. #运行报警邮件管理容器
  2. [root@Prometheus ~]# docker run --name alertmanager -d -p9093:9093 prom/alertmanager:latest
  3. #copy配置文件
  4. [root@Prometheus ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml .
  5. #讲原来的yml改名称,修改刚copy的配置文件
  6. [root@Prometheus ~]# cp alertmanager.yml alertmanager.ymlbak
这里 AlertManager 默认启动的端口为 9093,启动完成后,浏览器访问http://:9093 可以看到默认提供的 UI 页面,不过现在是没有任何告警信息的,因为我们还没有配置报警规则来触发报警。  

 

AlertManager 配置邮件告警

AlertManager 默认配置文件为 alertmanager.yml,在容器内路径为/etc/alertmanager/alertmanager.yml
  1. docker cp alertmanager:/etc/alertmanager/alertmanager.yml /root/
简单介绍一下主要配置的作用:
  • global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等
  • route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。
  • receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。
  • inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。
那么,我们就来配置一下使用 Email 方式通知报警信息,这里以 QQ 邮箱为例,当然在配置QQ邮箱之前,需要我们登录QQ邮箱,打开SMTP服务,并获取授权码。  
  1. #写入自己的QQ邮箱与效验码
  2. [root@Prometheus ~]# vim /root/alertmanager.yml
  3. global:
  4. resolve_timeout: 5m
  5. smtp_from: '2050753687@qq.com'
  6. smtp_smarthost: 'smtp.qq.com:465'
  7. smtp_auth_username: '2050753687@qq.com'
  8. smtp_auth_password: 'rxtfqkwfafoidcea'
  9. smtp_require_tls: false
  10. smtp_hello: 'qq.com'
  11. route:
  12. group_by: ['alertname']
  13. group_wait: 5s
  14. group_interval: 5s
  15. repeat_interval: 5m
  16. receiver: 'email'
  17. receivers:
  18. - name: 'email'
  19. email_configs:
  20. - to: '2050753687@qq.com'
  21. send_resolved: true
  22. inhibit_rules:
  23. - source_match:
  24. severity: 'critical'
  25. target_match:
  26. severity: 'warning'
  27. equal: ['alertname', 'dev', 'instance']
  1. #重新运行
  2. [root@Prometheus ~]# docker rm -f alertmanager
  3. alertmanager
  4. [root@Prometheus ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
  5. 8c56092d9ef2946f88c10e2e648e62df33bbbc2ac8d9cd503c8700e4445686a0

 //访问查看

 

  五、Prometheus 配置 AlertManager 告警规则

接下来,我们需要在 Prometheus 配置 AlertManager 服务地址以及告警规则,新建报警规则文件 node-up.rules 如下

 

  1. [root@Prometheus ~]# mkdir -p prometheus/rules
  2. [root@Prometheus ~]# cd prometheus/rules/
  3. [root@Prometheus rules]# vim node-up.rules
  4. [root@Prometheus rules]# cat node-up.rules
  5. groups:
  6. - name: node-up
  7. rules:
  8. - alert: node-up
  9. expr: up{job="prometheus"} == 0
  10. for: 15s
  11. labels:
  12. severity: 1
  13. team: node
  14. annotations:
  15. summary: "{{ $labels.instance }} 已停止运行超过 15s!"
然后,修改 prometheus.yml 配置文件,添加 rules 规则文件  
  1. # Alertmanager configuration
  2. alerting:
  3. alertmanagers:
  4. - static_configs:
  5. - targets:
  6. - 192.168.1.1:9093
  7. # - alertmanager:9093
  8.  
  9. # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
  10. rule_files:
  11. - "/usr/local/prometheus/rules/*.rules"
  12. # - "first_rules.yml"
  13. # - "second_rules.yml"

 

  1. [root@Prometheus rules]# docker rm -f prometheus
  2. [root@Prometheus rules]# docker run -d -p 9090:9090 -v/root/prometheus.yml:/etc/prometheus/prometheus.yml -v/root/prometheus/rules:/usr/local/prometheus/rules --name prometheus --net=host prom/prometheus
此时在prometheus主页上可以看到相应规则  

 

触发报警发送 Email

然后开始模拟node1节点 exporter组件失败
  1. [root@node1 ~]# docker stop exporter
  2. exporter

 

 切换到QQ邮箱

 

AlertManager 配置自定义邮件模板

 看到上边默认发送的邮件模板,虽然所有核心的信息已经包含了,但是邮件格式内容可以更优雅直观一些,那么,AlertManager 也是支持自定义邮件模板配置的,首先新建一个模板文件 email.tmpl。

 

  1. [root@master rules]# cd /root/prometheus/
  2. [root@master prometheus]# ls
  3. rules
  4. [root@master prometheus]# mkdir alertmanager-tmpl
  5. [root@master prometheus]# vim /root/prometheus/alertmanager-tmpl/email.tmpl
  6. #编辑模板,注意QQ写自己登录查看的!
  7. [root@master prometheus]# cat /root/prometheus/alertmanager-tmpl/email.tmpl
  8. {{ define "email.from" }}2050753687@qq.com{{ end }}
  9. {{ define "email.to" }}2050753687@qq.com{{ end }}
  10. {{ define "email.to.html" }}
  11. {{ range .Alerts }}
  12. =========start==========<br>
  13. 告警程序: prometheus_alert<br>
  14. 告警级别: {{ .Labels.severity }} 级<br>
  15. 告警类型: {{ .Labels.alertname }}<br>
  16. 故障主机: {{ .Labels.instance }}<br>
  17. 告警主题: {{ .Annotations.summary }}<br>
  18. 触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} <br>
  19. =========end==========<br>
  20. {{ end }}
  21. {{ end }}

上边模板文件配置了 email.from、email.to、email.to.html 三种模板变量,可以在 alertmanager.yml 文件中直接配置引用。这里email.to.html 就是要发送的邮件内容,支持 Html 和 Text 格式,这里为了显示好看,采用 Html 格式简单显示信息。下边 {{ range .Alerts }}是个循环语法,用于循环获取匹配的 Alerts 的信息,下边的告警信息跟上边默认邮件显示信息一样,只是提取了部分核心值来展示。然后,需要增加 alertmanager.yml 文件 templates 配置如下:  

  1. global:
  2. resolve_timeout: 5m
  3. smtp_from: '2050753687@qq.com'
  4. smtp_smarthost: 'smtp.qq.com:465'
  5. smtp_auth_username: '2050753687@qq.com'
  6. smtp_auth_password: 'rxtfqkwfafoidcea'
  7. smtp_require_tls: false
  8. smtp_hello: 'qq.com'
  9. templates:
  10. - '/etc/alertmanager-tmpl/*.tmpl'
  11. route:
  12. group_by: ['alertname']
  13. group_wait: 5s
  14. group_interval: 5s
  15. repeat_interval: 5m
  16. receiver: 'email'
  17. receivers:
  18. - name: 'email'
  19. email_configs:
  20. - to: '{{ template "email.to" }}'
  21. html: '{{ template "email.to.html" . }}'
  22. send_resolved: true
  23. inhibit_rules:
  24. - source_match:
  25. severity: 'critical'
  26. target_match:
  27. severity: 'warning'
  28. equal: ['alertname', 'dev', 'instance']
[root@master /]# vim /root/alertmanager.yml

然后,修改 AlertManager 启动命令,将本地 email.tmpl 文件挂载到容器内指定位置并重启。

  1. [root@master /]# docker rm -f alertmanager
  2. [root@master /]# docker run -d --name alertmanager -p9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl/email.tmpl:/etc/alertmanager-tmpl prom/alertmanager
  3. #注意挂载的路径是文件夹不是文件!!!

重启完毕后,同样模拟触发报警条件(停止 node-exporter 服务),也是可以正常发送模板邮件出来的,这次就是我们想要的风格啦!  

 

 

 

 

  
 
 
 
 
 
 

原文链接:http://www.cnblogs.com/lin-strive/p/14449410.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号