Prometheus (Prometheus) monitor
Preparing the environment:
Three docker host (centos7):
docker01: 172.16.1.30
Deployment Services: Prometheus Server, Grafana, the Node Exporter, cAdvrisor
docker02: 172.16.1.31
Deployment Services: Node Exporter, cAdvrisor
docker03: 172.16.1.32
Deployment Services: Node Exporter, cAdvrisor
Note: Because the test environment, so temporarily turn off the firewall, disable selinux, if it is issued by the external network server, can not turn off the firewall, you can set firewalld and iptables rules.
- Prometheus server: Prometheus master server, listen port: 9090
- Node Exporter: Host information collection hardware and operating system, listening port: 9100
- vAdvrisor: container is responsible for collecting information on running Host, listening port: 8080
- Grafana: Prometheus monitor used to display the user interface.
Project operations:
1, the deployment of Node Export (collect dockerhost information)
# Three dockerhost need in order to deploy:
(1)下载镜像prom/node-exporter镜像:
[root@sqm-docker02 ~]# docker pull prom/node-exporter
(2)运行Node Exporter容器(挂载系统目录)
[root@sqm-docker02 ~]# docker run -d -p 9100:9100 -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)($|/)"
- Parameter --net = host: Thus Prometheus server may communicate directly with the Node Exporter
# Check whether the normal operation of the vessel:
After all three deployment is complete, log into the web page validation:
Enter the URL (three hosts can): http://172.16.1.30:9100/
Come in the future, you can see all the information code, very unfriendly, because we have not yet deployed graphical (Grafana).
2,部署cAdvisor(收集container信息)
#依次在三台dockerhost上分别部署
(1)下载google/cadvisor镜像
[root@sqm-docker01 ~]# docker pull google/cadvisor
(2)运行cAdvisor镜像:
[root@sqm-docker01 ~]# 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
//查看容器是否正常运行:
登陆web网页验证:
URL:http://172.16.1.30:8080
可以检测到dockerhost的各种信息。
3,部署Prometheus server:(普罗米修斯的主服务)
只部署在docker01上:
(1)下载Prometheus镜像:
[root@sqm-docker01 ~]# docker pull prom/prometheus
(2)获取普罗米修斯的配置文件,先运行一个基于普罗米修斯的镜像:
[root@sqm-docker01 ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
(3)拷贝prometheus容器内配置文件到当前目录下:
[root@sqm-docker01 ~]# docker cp prometheus:/etc/prometheus/prometheus.yml /root/
修改该.yml文件:
[root@sqm-docker01 ~]# vim prometheus.yml
添加本机和另外两台docker主机上服务的监控地址:端口
(4)删除刚刚创建的Prometheus容器(只为拷贝配置文件)
[root@sqm-docker01 ~]# docker stop prometheus
[root@sqm-docker01 ~]# docker rm prometheus
(5)运行一个Prometheus容器:
[root@sqm-docker01 ~]# docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus --net=host prom/prometheus
//查看容器是否正常运行:
登陆Prometheus web页面:
URL:http://172.16.1.30:9090
确保监控到刚刚配置文件中添加三台dockerhost的主机及端口,并且状态为up。
4,部署Grafana:(提供友好的图形化界面)
在Prometheus server上进行部署:
(1)下载Grafana镜像:
[root@sqm-docker01 ~]# docker pull grafana/grafana
(2)运行Grafana:(设置登陆密码为123.com)
[root@sqm-docker01 ~]# mkdir grafana-storage
[root@sqm-docker01 ~]# chmod 777 -R grafana-storage/
[root@sqm-docker01 ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana
如果出现以上报错,需要重新加载进程,并且重启docker服务。
确保容器已经运行:
访问web界面(图形化):
URL:http://172.16.1.30:3000
默认用户名:admin 密码:123.com
登陆界面如下:
(3)接下来我们在图形化web界面上进行部署:
点击首页上名称为“add data source”图标---------->选择“Prometheus”点击进入到以下界面
设置成功后,接下来进入Grafana的官网: https://grafana.com/
下载监控模板
下载成功后,回到Grafana管理的图形化界面。
点击导入刚刚下载的josn文件:
、
导入成功后,可以看到以下监控界面:
当然你也可以导入其他模板,可以在刚才的官网上下载其他模板。
3,实现Prometheus邮箱报警:
肯定是在Prometheus server进行部署啦
(1)下载Alertmanager告警镜像
[root@sqm-docker01 ~]# docker pull prom/alertmanager
(2)运行alertmanager:
[root@sqm-docker01 ~]# docker run --name alertmanager -d -p 9093:9093 prom/alertmanager
测试能否访问web界面:
URL:http://172.16.1.30:9093/
(3)拷贝它配置文件:
如果不知道它的配置文件路径,则需要进入容器进行查看:[root@sqm-docker01 ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml /root/
删除刚刚创建的容器:(只为了拷贝配置文件)
[root@sqm-docker01 ~]# docker stop alertmanager
[root@sqm-docker01 ~]# docker rm alertmanager
修改该.yml配置文件:
[root@sqm-docker01 ~]# vim alertmanager.yml
设置实现报警的邮箱信息:
注意:上面定义的smtp邮件协议,qq邮箱是465,如果填写的是其他邮箱,则需要填写相对应的smtp端口号。
- 配置项解释:
- global: 全局配置。报警策略,报警渠道等。
- route: 分发策略。
- receivers: 接收者。
- inhibit_rules: 抑制策略。当存与另一组匹配的警报,抑制规则将禁止与一组匹配的警报。
(4)重新运行容器:
[root@sqm-docker01 ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
//确保容器正常运行:
(5)设置Alertmanager报警规则:
[root@sqm-docker01 ~]# mkdir -p prometheus/rules
[root@sqm-docker01 ~]# cd prometheus/rules/
编写规则文件:
[root@sqm-docker01 rules]# vim node-up.rules
以上是自己自定义编写的,当然也可以登陆Prometheus官网,搜索规则模板进行编写:
//接下来修改普罗米修斯配置文件:
[root@sqm-docker01 ~]# vim prometheus.yml
删除刚刚运行的普罗米修斯容器:
[root@sqm-docker01 ~]# docker stop prometheus
prometheus
[root@sqm-docker01 ~]# docker rm prometheus
prometheus
//需要重新运行容器,将规则目录挂载到容器中:
[root@sqm-docker01 ~]# 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
确保容器正常运行后,登陆网页进行查看:
确保能够看到刚才编写的规则。
(6)测试邮箱报警:
接下来模拟其中一台主机上的某个服务宕机掉,验证qq邮箱是否能够收到邮件:
[root@sqm-docker01 ~]# docker stop cadvisor
cadvisor
登陆Prometheus界面可以看到该服务down:
当服务宕机后,邮箱收到该报警邮件,提示为“FIRING”
如果当你的服务又恢复了正常运行,依然后触发报警规则,会给你发送邮件,提示容器已修复“RESOLVED”(如下图)
(7)搭建报警信息模板:
[root@sqm-docker01 ~]# mkdir alertmanager-tmpl
[root@sqm-docker01 ~]# cd alertmanager-tmpl/
[root@sqm-docker01 alertmanager-tmpl]# vim email.tmpl
编写模板脚本:(填写报警的qq邮箱)
{{ define "email.from" }}[email protected]{{ end }}
{{ define "email.to" }}[email protected]{{ 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@sqm-docker01 ~]# vim alertmanager.yml
#注意缩进:
//删除原来的容器:
[root@sqm-docker01 ~]# docker stop alertmanager
[root@sqm-docker01 ~]# docker rm alertmanager
//重新运行容器(重新挂载文件)
[root@sqm-docker01 ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl:/etc/alertmanager-tmpl prom/alertmanager
确保容器已正常运行:
接下来停掉一个容器,模拟宕机:
状态为down:
// qq mailbox receives an alarm message:
// Similarly, if after your service resumed normal operations, will send alarm messages:
So far Prometheus deployed monitoring, alarm and successful implementation of the mailbox. . .
-------- end of this article so far, thanks for reading --------