Docker监控——Prometheus

云计算

博文大纲:
一、Docker的监控
二、prometheus简介
三、Prometheus组成及架构
四、部署prometheus
1)环境准备
2)部署prometheus
3)配置Peometheus监控实现报警

托里网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
一、Docker的监控 (1)docker自带的监控命令
[root@localhost ~]# docker top wordpress_wordprss_1          //查看容器的使用状态
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                5601                5569                0                   20:53               ?                   00:00:00            apache2 -DFOREGROUND
33                  6073                5601                0                   20:54               ?                   00:00:00            apache2 -DFOREGROUND
33                  6074                5601                0                   20:54               ?                   00:00:00            apache2 -DFOREGROUND
33                  6075                5601                0                   20:54               ?                   00:00:00            apache2 -DFOREGROUND
33                  6076                5601                0                   20:54               ?                   00:00:00            apache2 -DFOREGROUND
33                  6077                5601                0                   20:54               ?                   00:00:00            apache2 -DFOREGROUND
33                  6096                5601                0                   20:54               ?                   00:00:00            apache2 -DFOREGROUND
33                  6098                5601                0                   20:54               ?                   00:00:00            apache2 -DFOREGROUND
33                  6099                5601                0                   20:54               ?                   00:00:00            apache2 -DFOREGROUND
33                  6100                5601                0                   20:54               ?                   00:00:00            apache2 -DFOREGROUND
33                  6155                5601                0                   20:57               ?                   00:00:00            apache2 -DFOREGROUND
[root@localhost ~]# docker stats wordpress_wordprss_1 
[root@localhost ~]# docker logs wordpress_wordprss_1 
//这三条都是容器本身自带的监控命令
(2)sysdig
[root@localhost ~]# docker run -it --rm --name sysdig --privileged=true --volume=/var/run/docker.sock:/host/var/run/docker.sock --volume=/dev:/host/dev --volume=/proc:/host/proc:ro --volume=/boot:/host/boot:ro --volume=/lib/modules:/host/lib/modules:ro --volume=/usr:/host/usr:ro sysdig/sysdig
//创建一个容器并自动进入容器中
//--rm:随着退出容器而被删除;
//--privileged=true:赋予特殊权限;
root@711dbeb59fdd:/# csysdig                 //执行这条命令

如图:

图中可以使用键盘和鼠标进行操作!

(3)scope
[root@localhost ~]#  curl -L git.io/scope -o /usr/local/bin/scope
[root@localhost ~]#  chmod +x /usr/local/bin/scope     //下载安装脚本
[root@localhost ~]#  scope launch           //以容器方式启动
……………………
Weave Scope is listening at the following URL(s):
  * http://172.21.0.1:4040/
  * http://192.168.122.1:4040/
  * http://172.22.0.1:4040/
  * http://172.20.0.1:4040/
  * http://172.18.0.1:4040/
  * http://172.19.0.1:4040/
  * http://192.168.1.1:4040/
//根据末尾的提示信息进行访问

如图:

根据图中的提示,自行可以点击进行测试!

如果要监控两台的话:主机名必须进行区分方法如下:

[root@dockerA ~]#  curl -L git.io/scope -o /usr/local/bin/scope
[root@dockerA ~]#  chmod +x /usr/local/bin/scope
[root@dockerA ~]# scope launch 192.168.1.1 192.168.1.2       //选择指定本地的IP,再指定对方的IP
[root@dockerA ~]# docker run -itd --name http httpd      //运行一个容器进行测试
[root@dockerB ~]#  curl -L git.io/scope -o /usr/local/bin/scope
[root@dockerB ~]#  chmod +x /usr/local/bin/scope
[root@dockerB ~]# scope launch 192.168.1.2 192.168.1.1
[root@dockerB ~]# docker run -itd --name nginx nginx

访问(dockerA、dockerB任意一台即可)测试:

二、prometheus简介

Prometheus是一套开源的系统监控报警框架。它以给定的时间间隔从已配置的目标收集指标,评估规则表达式,显示结果,并在发现某些情况为真时触发警报。

作为新一代的监控框架,Prometheus具有以下特点 :

强大的多维度数据模型:
(1)时间序列数据通过metric名和键值对来区分;
(2)所有的metrics都可以设置任意的多维标签;
(3)数据模型更随意,,不需要刻意设置为以点分隔的字符串;
(4)可以对数据模型进行聚合、切割和切片操作;
(5)支持双精度浮点类型,标签可以设为全unicode(统一码); 灵活、强大的查询语句:在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作; 易于管理:不依赖于分布式存储; 使用 pull 模式采集时间序列数据; 可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端; 可以通过服务发现或者静态配置去获取监控的 targets; 有多种可视化图形界面; 易于伸缩。;
三、Prometheus组成及架构

Prometheus包含了许多组件,其中许多组件都是可选的,常用的组件有:

Prometheus Server:用于收集和存储时间序列数据; Client Library:客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server; Push Gateway:主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics; Exporters:用于暴露已有的第三方服务的 metrics 给 Prometheus; Alertmanager:从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对端的接受方式,发出报警;
…………等等,还有好多,这里就列出几个常用的组件!

Prometheus官方文档中的架构图:


官方的架构图中,主要模块块包括:Prometheus server, exporters, Pushgateway, PromQL, Alertmanager 以及图形界面;

大致的工作流程是:
(1)Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics;
(2)Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报;
(3)Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警;
(4)在图形界面中,可视化采集数据;

四、部署prometheus 1)环境准备


注意:上述三台服务器上必须具备最基本的docker环境,上述环境的docker版本为18.09.0!

上述环境所需组件的作用如下:

Prometheus server:普罗米修斯的主服务器(端口:9090); NodeEXporter:负责收集Host硬件信息和操作系统信息,(端口:9100); cAdvisor:负责收集Host上运行的容器信息(端口:8080); Grafana:负责展示普罗米修斯监控界面(3000); Alertmanager:用来接收Prometheus发送的报警信息,并且执行设置好的报警方式,报警内容(同样也是在dockerA主机上部署,端口:9093);

各组件的关系:NodeEXporter、cAdvisor负责收集信息发送给 Prometheus server,在由 Prometheus server交给Grafana进行图形化的显示。如需报警,则由prometheus向Alertmanager组件发送信息!

实验环境,为了简单起见,关闭防火墙、SELinux,实际环境中需开启相应的端口!

2)部署prometheus (1)运行node-exporter容器

NodeEXporter主要负责收集Host硬件信息和操作系统信息!

[root@dockerA ~]# docker run -d --name node -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)($|/)
//使用prom/node-exporter 镜像创建一个名为node的容器,用于收集硬件和系统信息;
//--net=host表示Prometheus server可以直接与node-exporter通信;
//并映射9100端口

执行完成后,客户端使用浏览器进行访问,如图:

访问到以上页面表示node-exporter这个组件安装成功!

由于这个NodeEXporter组件需要在三台docker host主机上,所以以上命令就需要在另外两台主机上都执行。执行完成后,自行使用浏览器访问测试!

(2)运行cAdvisor容器

cAdvisor主要负责收集Host上运行的容器信息!

[root@dockerA ~]# 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

客户端访问测试:

访问到上述页面则表示cAdvisor这个组件安装成功!

同样这个cAdvisor组件也是需要在三台docker host上全部安装的!所以以上命令也需在另外两台主机上执行,执行完成后,自行测试!

(3)运行Prometheus server容器(只需在dockerA主机上执行即可!)

Prometheus是普罗米修斯的主服务器!

在部署Prometheus之前,需要对它的配置文件进行修改,所以首先运行一个Prometheus容器将其配置文件复制到本地,便于进行修改。

[root@dockerA ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
//运行一个Prometheus容器是为了将它的配置文件拿到本地
[root@dockerA ~]# docker cp prometheus:/etc/prometheus/prometheus.yml .
//将Prometheus容器中的主配置文件复制到本地
[root@dockerA ~]# vim prometheus.yml      //编辑主配置文件
    - targets: [\'localhost:9090\',\'localhost:8080\',\'localhost:9100\',\'192.168.1.2:8080\',\'192.168.1.2:9100\',\'192.168.1.3:8080\',\'192.168.1.3:9100\']
//这项原本是存在的,只需修改即可!    
 //用于指定监控本机的9090、8080、9100这三个端口,另外添加另外两台docker主机的8080、9100这两个端口。
 //8080端口运行的是cAdvisor服务
 //9100端口运行的是node-exporter服务
 //9090端口运行的就是Prometheus服务
[root@dockerA ~]# docker rm prometheus -f      //将刚才运行的容器删除
prometheus
[root@dockerA ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
//重新运行一个prometheus容器,将刚才修改完成的配置文件挂载到容器中

客户端访问测试:

(4)运行grafana容器(同样只需在dockerA主机上运行即可!)

grafana主要负责展示普罗米修斯监控界面,给我们提供良好的图形化界面!

[root@dockerA ~]# mkdir grafana-storage
[root@dockerA ~]# chmod 777 -R grafana-storage
//创建一个目录,赋予777的权限
[root@dockerA ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e GF_SECURITY_ADMIN_PASSWORD=123.com grafana/grafana
//“-e”选项表示修改容器内部的环境变量,将admin用户的密码更改为123.com;

客户端访问测试:

上述配置完成后,我们就需要配置它以什么样的形式来给我们展示了,可以自定义,但是很麻烦,我选择直接去grafana官网寻找现成的模板。如图:

将grafana官方的模板导入到我们的grafana容器提供的web页面中,方法有两种方式:

1)第一种方式:

在grafana官网选择自己喜欢的模板,点击进入,如图:

下载后,回到自己搭建的grafana容器提供的web页面中,如图:




但是仔细看的话,会发现这个模板有些信息都检测不到,所以这里就是为了展示一种方式导入模板的方式。个人建议推荐使用第二种方式!

2)第二种方式:

选择合适的模板后,记录其ID号,如图:

记录下模板的ID号之后,同样回到自己搭建的grafana容器提供的web页面中,如图:

至此web界面的监控就部署完成了!

3)配置Peometheus监控实现报警

Prometheus的报警方式有好几种,比如:邮箱、微信、钉钉等,本次案例采用邮箱告警的方式。

(1)运行alertmanager容器

Alertmanager组件主要是用来接收Prometheus发送的报警信息,并且执行设置好的报警方式,报警内容;

只需在dockerA主机上部署即可!方法如下:

[root@dockerA ~]# docker run -d --name alertmanager -p 9093:9093 prom/alertmanager
//随便运行一个容器,其目的就是将容器中服务的配置文件拿到本地
[root@dockerA ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml .
//将altermanager服务的yml配置文件拿到本地
[root@dockerA ~]#  vim alertmanager.yml     //编辑配置文件
global:
  resolve_timeout: 5m
  smtp_from: \'1454295320@qq.com\'                 #发送者信息
  smtp_smarthost: \'smtp.qq.com:465\' 
  smtp_auth_username: \'1454295320@qq.com\'            #接收者信息
  smtp_auth_password: \'gfuxsudyqyulbaad\'              #使用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: \'1454295320@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:抑制规则配置,当存在与另一组匹配的警报时,抑制规则将仅用于一组匹配的;
[root@dockerA ~]# docker rm -f alertmanager        //将原本的alertmanager 容器删除
[root@dockerA ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
//重新运行alertmanager 容器,并将配置文件挂载到容器中
//建议运行容器之后,使用docker ps | grep alertmanager 确保容器正常运行
//如果配置文件编写错误,那么这个容器是无法启动的
(2)配置alertmanager报警规则
[root@dockerA ~]# mkdir -p prometheus/rules && cd prometheus/rules
//创建目录用于存放规则的目录
[root@dockerA rules]# vim node-up.rules         //编写规则
groups:
- name: node-up               //自定义名称
  rules:
  - alert: node-up
    expr: up{job=prometheus} == 0               
// job的名称必须和prometheus配置文件中的 - job_name: \'prometheus\'对应
    for: 15s
    labels:
      severity: 1
      team: node
    annotations:
      summary: {{ $labels.instance }} 已停止运行超过 15s!

可以根据以上配置文件进行修改,若想自己编写报警规则,可以参考它的官方文档,如图:

(3)关联Prometheus
[root@dockerA ~]# vim prometheus.yml 
  8 alerting:
  9   alertmanagers:
 10   - static_configs:
 11     - targets:
 12        - 192.168.1.1:9093            //此行将原本的内容更改为alertmanager容器的IP+端口

 13 
 14 # Load rules once and periodically evaluate them according to the global \'evaluat    ion_interval\'.
 15 rule_files:
 16   - /usr/local/prometheus/rules/*.rules           //这一行需要手动添加,指定容器内的路径
 [root@dockerA ~]# docker rm -f prometheus           //修改完配置为文件后,需要将容器删除,重新运行一台新的容器
[root@dockerA ~]# 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
//指定步骤(2)编写的rule文件的路径,

为防止格式可能会出现错误,附上截图一张,如下:

至此,如果prometheus页面中的target有异常(比如宕机),那么就会给你的邮箱发送报警信息。

我手动停掉容器,收到的邮件如下:

为了追求美观,我们采取设置一下报警信息的模板!

(4)设置报警信息模板
[root@dockerA ~]# cd prometheus
[root@dockerA prometheus]# mkdir alertmanager-tmpl
[root@dockerA prometheus]# cd alertmanager-tmpl/
[root@dockerA prometheus]#  vim email.tmpl
{{ define email.from }}1454295320@qq.com{{ end }}
{{ define email.to }}1454295320@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 }}
[root@dockerA ~]# vim alertmanager.yml 
global:
  resolve_timeout: 5m
  smtp_from: \'1454295320@qq.com\'
  smtp_smarthost: \'smtp.qq.com:465\'
  smtp_auth_username: \'1454295320@qq.com\'
  smtp_auth_password: \'flnuwdktcbzwffag\'
  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 }}\'       //必须和模板中对应             html: \'{{ template email.to.html . }}\'       //必须和模板中对应
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: \'critical\'
    target_match:
      severity: \'warning\'
    equal: [\'alertname\', \'dev\', \'instance\']
[root@dockerA ~]# docker rm alertmanager -f
//删除容器
[root@dockerA ~]# 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的,就会给你发送新的邮件,恢复正常后,也会发送邮件,同样,邮件中的内容格式是有误的,但是你可以正常接收到报警信息,若想要更改其报警模板,可以参考官方文档

邮箱收到的报警信息如下:

比原本的效果要好很多!就简单介绍一下这一个吧,有兴趣可以参考官网的文档,自行进行编写!

————————————本文到此结束,感谢阅读————————————

名称栏目:Docker监控——Prometheus
标题来源:https://www.cdcxhl.com/article10/choego.html

成都网站建设公司_创新互联,为您提供网站设计公司动态网站自适应网站网站改版全网营销推广外贸建站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司