当前位置:   article > 正文

Docker搭建 grafana prometheus mysql监控体系(二)

Docker搭建 grafana prometheus mysql监控体系(二)

Docker实战三板斧

上期我们以Jenkins为例,一边实战一边了解Docker的基础命令,这期,我们将带大家使用Docker搭建三个平时测试工作中非常有用的小工具,学会这三板斧后,你就可以说对Docker不是浅尝即止在理论阶段,而是真正有一定了解,也能为你的工作,真正的解决一部分问题。

  • 使用Docker搭建prometheus+grafana的服务器监控
  • 使用Docker搭建prometheus+grafana的Mysql监控
  • 使用Docker搭建分布式UI自动化环境

Docker启动prometheus

启动下载好的node_exporter文件

nohup ./node_exporter >> node_exporter.log 2>&1 &
  • 1

填写prometheus.yml配置文件内容

global:
#监控时间,每隔15s去exporter去pull数据
  scrape_interval:     15s
  evaluation_interval: 15s
#抓取目标设置
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
#targets里面是监控的ip地址
    - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    static_configs:
    - targets: ['docker.testing-studio.com:9100']
  - job_name: 'mysql'
    static_configs:
    - targets: ['docker.testing-studio.com:9104']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

使用命令启动prometheus

docker run --name prometheus -d -p 9090:9090 -v `pwd`/prometheus.yml:/etc/prometheus/prometheus.yml -v `pwd`/rules/:/etc/prometheus/ prom/prometheus --config.file=/etc/prometheus/prometheus.yml
  • 1

输入ip和端口号进入prometheus的前端界面,然后进入Targets页面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cOMWKM8k-1577675074532)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p139)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eYgOV7El-1577675074533)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p140)]

在首页输入命令,然后点击execute,命令有

cpu使用率:100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) 
内存使用率:100*(node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / node_memory_MemTotal_bytes

磁盘使用:100.0 - 100 * ((node_filesystem_avail_bytes{mountpoint=~"/", device!="rootfs"} / 1000 / 1000 ) / (node_filesystem_size_bytes{mountpoint=~"/", device!="rootfs"} / 1024 / 1024))
  • 1
  • 2
  • 3
  • 4

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ftv96AD1-1577675074533)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p141)]
不过这个展示界面不够友好,而且不好保存,所以在业内,我们常常将prometheus+grafana配合使用
启动grafana

docker run --name grafana -d -p 8011:3000 grafana/grafana
  • 1

进入grafana界面,初始账号密码为admin/admin
进入Add data sourcs->选择prometheus
配置prometheus

字段名含义
Nameprometheus
URL启动的prometheus的地址(localhost可能会报错

import模板
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rx6IWqdw-1577675074534)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p142)]
grafana dashboard内填写
https://grafana.com/grafana/dashboards/8919
Prometheus Data Source字段选择prometheus
点击 Import,就搭建成功了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BZ2uyHM1-1577675074534)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p143)]

注意,前方有坑
1.如果被监控的node_exporter是mac的话,要去prometheus官网下载mac版本的node_exporter执行,且mac需要修改一些配置参数。
2.如果修改了prometheus.yml 需要重启镜像

Prometheus监控MySQL

  1. 下载prom/mysqld-exporter镜像
docker pull prom/mysqld-exporter
  • 1
  1. 启动mysql服务
docker run --name some-mysql -v /home/ubuntu/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1qaz9ol. -p 8888:3306  -d mysql:5.5
  • 1
  1. 启动mysqld-exporter镜像
docker run --name some-mysql -v /home/ubuntu/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1qaz9ol. -p 8888:3306  -d mysql:5.5
docker run -d --name mysql-exporter -p 9104:9104 -e DATA_SOURCE_NAME="root:1qaz9ol.@(47.95.238.18:8888)/mysql" prom/mysqld-exporter
  • 1
  • 2

注意:-e 之后的参数要填对,分别对应 用户名/密码@(ip:端口号)/mysql

  1. 在prometheus.yml的配置文件中添加mysql的配置,并docker restart prometheus ,重新加载prometheus的配置(可以参考上面的步骤2

  2. 进入prometheus页面,查看Targets中mysql是否启动成功
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nTtSh5qA-1577675074535)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p149)]

  3. 按照上面的docker启动prometheus过程,配置好之后进去grafana页码,然后选择data source,进入prometheus,输入prometheus的url,选择“Save&Test”
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p9GBydZ2-1577675074536)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p147)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QYRmea7M-1577675074536)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p151)]

  4. 导入mysql模板到grafana,mysql的模板id为6239,其他步骤和前面搭建服务器监控是一样的哦。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3JnUGgnX-1577675074537)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p152)]
下面是mysql的监控效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SMMgFgTw-1577675074538)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p158)]

Docker+Selenium分布式UI自动化

如果我们的Web UI自动化测试用例有上千条,执行时间常常需要1~2天,我们用什么方法可以节省这个执行时间呢?
接下来我们就通过分布式UI自动化,即启动多个浏览器执行UI自动化测试用例,且每个浏览器执行的UI自动化测试用例都是不同的。这样子,就可以大大提升我们的UI自动化测试的效率。

分布式UI自动化架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9HYsDVmU-1577675074538)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p153)]
UITest层会将测试请求发送到GridHub层,而GridHub则会将这些测试请求转换为测试任务下发到每一个Node节点(在每台机器上面我们可以装一个或多个Node节点。),随后Node节点驱动浏览器进行自动化测试。测试完成后,Node节点将测试结果发送到GridHub上面,GridHub再将结果转发回我们的测试程序UITest中。

Selenium镜像介绍

底层镜像,可以做定制化

  • selenium/base: Base image which includes Java runtime and Selenium Server JAR file

  • selenium/node-base: Base image for Grid Nodes which includes a virtual desktop environment

  • selenium/hub: Image for running a Grid Hub

谷歌、火狐浏览器的非可视化镜像

  • selenium/node-chrome: Grid Node with Chrome installed, needs to be connected to a Grid Hub
  • selenium/node-firefox: Grid Node with Firefox installed, needs to be connected to a Grid Hub

具有远程UI服务的可视化镜像(调试作用)

  • selenium/node-chrome-debug: Grid Node with Chrome installed and runs a VNC server, needs to be connected to a Grid Hub
  • selenium/node-firefox-debug: Grid Node with Firefox installed and runs a VNC server, needs to be connected to a Grid Hub

简易版镜像,不需要GridHub和Node架构:

  • selenium/standalone-chrome: Selenium Standalone with Chrome installed
  • selenium/standalone-firefox: Selenium Standalone with Firefox installed
  • selenium/standalone-chrome-debug: Selenium Standalone with Chrome installed and runs a VNC server
  • selenium/standalone-firefox-debug: Selenium Standalone with Firefox installed and runs a VNC server

文档链接:

  • https://github.com/SeleniumHQ/docker-selenium
实战演示

使用docker启动GridHub

docker run --name=hub -p 5001:4444 -e GRID_TIMEOUT=0 -e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true -e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 -e GRID_BROWSER_TIMEOUT=15000 -e GRID_TIMEOUT=30000 -e GRID_CLEAN_UP_CYCLE=30000 -d selenium/hub:3.7.1-beryllium
  • 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7m9bRF3P-1577675074538)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p154)]

docker启动Node

docker run --name=chrome -p 5902:5900 -e NODE_MAX_INSTANCES=6 -e NODE_MAX_SESSION=6 -e NODE_REGISTER_CYCLE=5000 -e DBUS_SESSION_BUS_ADDRESS=/dev/null -v /dev/shm:/dev/shm --link hub -d selenium/node-chrome-debug:3.7.1-beryllium
  • 1

如果想启动多个Node,可以重新修改一下端口映射比如,将5902:5900修改为5903:5900这时候我们就可以发现图片中又显示了一个Node信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-imPIdn4A-1577675074539)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p155)]

如果想在一个Node中启动多个浏览器,我们可以更改这两个字段的数量,比如我们将6修改为7NODE_MAX_INSTANCES=7;NODE_MAX_SESSION=7,这时候我们可以看到有7个谷歌浏览器的logo
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rh40FyaI-1577675074539)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p157)]

准备一个自动化测试脚本,以Java为例

  def get_driver():
    chrome_options = webdriver.ChromeOptions()
    # 解决DevToolsActivePort文件不存在的报错
    chrome_options.add_argument('--no-sandbox')  
    # 指定浏览器分辨率
    chrome_options.add_argument('window-size=1920x3000') 
    # 谷歌文档提到需要加上这个属性来规避bug
    chrome_options.add_argument('--disable-gpu') 
    # 隐藏滚动条, 应对一些特殊页面
    chrome_options.add_argument('--hide-scrollbars') 
    # 不加载图片, 提升速度
    chrome_options.add_argument('blink-settings=imagesEnabled=false')  
     # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
    chrome_options.add_argument('--headless') 
    chromedriver = PATH("/home/ubuntu/chromedriver/chromedriver")
    chrome_capabilities = {
        "browserName": "chrome",  # 浏览器名称
        "platform": "ANY",  # 平台,这里可以是windows、linux、andriod等等
        "webdriver.chrome.driver": chromedriver
    }
    driver = webdriver.Remote('http://134.175.28.202:5001/wd/hub', desired_capabilities=chrome_capabilities,options =chrome_options)
    print("打开百度")
    driver.get("https://www.baidu.com/")
    print("试验成功")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

运行脚本
查看运行结果,成功!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UwiFjg5U-1577675074541)(evernotecid://AAC7D5BC-71C4-4E87-83E8-9011C690F76D/appyinxiangcom/26964881/ENResource/p176)]
注意:如果服务器系统不支持可视化不加这条会启动失败chrome_options.add_argument('--headless')

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/587339
推荐阅读
相关标签
  

闽ICP备14008679号