软件测试|简单易学的性能监控体系prometheus+grafana搭建教程

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 软件测试|简单易学的性能监控体系prometheus+grafana搭建教程

快速了解普罗米修斯

普罗米修斯是用 go 语言编写的软件并且利用了 go 语言的交叉编译特性编译成了纯二进制文件, 运行的时候不需要额外安装依赖。 直接从官网上下载就可以。 下载地址: https://prometheus.io/download/ 这里面除了普罗米修斯的主程序意外, 一些 额外的组件,比如 pushgateway, alertmanager 以及各种官方 exporter 的下载包都可以在这里找到。 由于我们现在部署普罗米修斯都是容器化部署的, 所以这里我选择用 docker 进行部署。

docker run --name=prometheus  -d -p 9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml  prom/prometheus

部署方式很简单, 只不过需要通过-v 来挂载一个配置文件到容器里。 至于这个配置文件, 大概张下面这个样子:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    static_configs:
    - targets: ['localhost:9100']
  - job_name: 'mysql'
    static_configs:
    - targets: ['localhost:9104']
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['localhost:8091']
  - job_name: 'pushgateway'
    static_configs:
    - targets: ['localhost:9091']
      labels:
        instance: pushgateway

上面便是一个普罗米修斯的配置文件 其中 global 是全局的配置,上面配置了我们每隔 15s 便向各个 exporter 抓取一次监控数据,而 scrape_configs 配置的是普罗米修斯主服务要去抓取的各个 exporter 的配置。 普罗米修斯是标准的 pull 架构, 主服务并不负责监控任务, 真正负责监控的是各种不同的 exporter。 比如要监控一个 linux 服务器的各项性能指标,则需要在那台服务器上部署一个 node_exporter。然后在普罗米修斯的配置文件上配置上这个 node_exporter 的地址即可。 普罗米修斯的主服务自然会周期性的去拉监控数据并保存在本地。 PS: 普罗米修斯本身就是一个时序数据库,所有监控数据都是带有时间戳的。 我们在普罗米修斯的 UI 上或者通过 grafana, HTTP 接口等查询监控数据的时候, 都是主服务直接查询本地的时序数据库返回的结果。 下面是服务启动后便可通过 9090 端口访问主服务的 UI 界面:

在这里插入图片描述

如图如果我们部署了在每台机器 上 都部署了 node_exporter, 就会通过 PromQL(普罗米修斯自己定义的一个类 SQL 语言,后面再讲)查询到当前的性能信息。 上图用了 node_load15 这个语句从所有 node_exporter 获取到的数据中查询到了当前所有机器的 15 分钟内 CPU 的平均负载。 至于部署 node_exporter 的方法也很 简单, 可以二进制包部署也可以 docker 部署。 就在上面的链接里能下载的到。

总用量 16524
-rw-r--r-- 1 work work    11357 5月  29 2019 LICENSE
-rwxr-xr-x 1 work work 16900416 5月  29 2019 node_exporter
-rw-r--r-- 1 work work      463 5月  29 2019 NOTICE

上面就是下载了 node_exporter 解压后的结果。 其中 node_exporter 就是个二进制文件 , 直接运行就可以了。

在这里插入图片描述

上面是普罗米修斯的架构图。 刚才说过普罗米修斯是 pull 架构, 主服务会根据配置的时间参数周期性的拉取各个 exporter 提供的接口来抓取数据。 但是这样的架构有两个缺陷:

  • 需要 exporter 是一个持续运行着的并且对外暴露 http 接口的服务, 可是有些时候我们的监控数据的收集不能满足这样的条件
  • 主服务周期性的抓取数据, 就会有事件遗漏的可能性。 比如我们要监控 k8s 集群中 pod 的事件, 如果有 pod 挂掉需要监控到这个数据。 但是很多 pod 的重启时间是很快的, 可能 10s 就完成了重启, 而普罗米修斯的主服务在 pod crash 的期间没有调用 exporter 抓取数据,那么这个事件就会遗漏掉监控不到。 PS:大部分的 exporter 的逻辑都是反应当前这一时刻的系统状态,不会保存历史状态。 所以一旦事件过去了, 主程序才来抓取 exporter, 就无法采样到这个事件的数据了。

基于以上两个原因, 普罗米修斯又推出了上图中右边的 pushgateway 和相关的 client。 pushgateway 可以理解为一种特别的 exporter, 主服务还是根据配置周期性的抓取数据。 只不过, pushgateway 本身并不监控数据,它的数据都来自使用普罗米修斯开源的 client 开发的程序上 。 这些程序不用像 exporter 一样需要是持续运行的服务,它可是任何形式的程序,只要它按自己的逻辑收集到监控数据后, 通过主动 push 的方式发送给 pushgateway 就好了。 通过这个机制就补全了普罗米修斯没有主动 push 机制的缺点。 在做测试项目的时候 , 我们往往在测试程序中把收集到的测试数据通过 push 到 pushgateway 上, 这样 就可以让测试自定义的监控能力无缝的对接到产品提供的普罗米修斯上了(产品里一般都是会部署 pushgateway 的)。

对接 grafana

普罗米修斯本身并不擅长可视化的能力, 所以对应的可视化报表一般都是交给 grafana。 所以可以先部署一个 grafana。

docker run --name grafana -d
-p 8000:3000 grafana/grafana

然后按照下面的步骤进行配置:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

granfa 的配置非常的复杂, 所以一般我们都是在社区找一个开源的模板 import 进来然后自己改吧改吧。 比如可以在https://grafana.com/grafana/dashboardsnode_exporter 的模板。然后引入到 grafana 中。比如我们搜到下面的模板,中搜到 把 id 复制过来,或者直接下载模板 json。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

通过如此配置就可以快速搭建一个可用的仪表盘了。

相关文章
|
1月前
|
Web App开发 Java 测试技术
《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程)
【2月更文挑战第13天】《手把手教你》系列基础篇之(四)-java+ selenium自动化测试- 启动三大浏览器(下)基于Maven(详细教程) 上一篇文章,宏哥已经在搭建的java项目环境中实践了,今天就在基于maven项目的环境中给小伙伴们 或者童鞋们演示一下。
62 1
|
1月前
|
Web App开发 Java 测试技术
《手把手教你》系列基础篇之(三)-java+ selenium自动化测试- 启动三大浏览器(上)(详细教程)
【2月更文挑战第12天】《手把手教你》系列基础篇之(三)-java+ selenium自动化测试- 启动三大浏览器(上)(详细教程) 前边宏哥已经将环境搭建好了,今天就在Java项目搭建环境中简单地实践一下: 启动三大浏览器。按市场份额来说,全球前三大浏览器是:IE.Firefox.Chrome。因此宏哥这里主要介绍一下如何启动这三大浏览器即可,其他浏览器类似的方法,照猫画虎就可以了。
40 1
|
16天前
|
Web App开发 前端开发 Java
《手把手教你》系列技巧篇(九)-java+ selenium自动化测试-元素定位大法之By name(详细教程)
【4月更文挑战第1天】 这篇教程介绍了如何使用Selenium Webdriver通过name属性来定位网页元素,作为系列教程的一部分,之前讲解了id定位,后续还会有其他六种定位方法。文中以百度搜索为例,详细说明了定位搜索框(name="wd")并输入关键词“北京宏哥”的步骤,包括手动操作流程、编写自动化脚本以及代码实现。此外,还提供了查看和理解Selenium源码的方法,强调了`open implementation`选项用于查看方法的具体实现。整个过程旨在帮助读者学习Selenium的元素定位,并实践自动化测试。
37 0
|
29天前
|
Web App开发 存储 JavaScript
《手把手教你》系列技巧篇(八)-java+ selenium自动化测试-元素定位大法之By id(详细教程)
【2月更文挑战第17天】本文介绍了Web自动化测试的核心——元素定位。文章首先强调了定位元素的重要性,指出找不到元素则无法进行后续操作。Selenium提供八种定位方法,包括By id、name、class name等。其中,By id是最简单快捷的方式。文章还阐述了自动化测试的步骤:定位元素、操作元素、验证结果和记录测试结果。此外,讨论了如何选择定位方法,推荐优先使用简单稳定的方式,如id,其次考虑其他方法。最后,作者提供了Chrome浏览器的开发者工具作为定位元素的工具,并给出了通过id定位的代码示例。
50 0
|
12天前
|
前端开发 Java 测试技术
《手把手教你》系列技巧篇(十二)-java+ selenium自动化测试-元素定位大法之By link text(详细教程)
【4月更文挑战第4天】本文介绍了link text在自动化测试中的应用。Link text是指网页中链接的文字描述,点击可跳转至其他页面。文章列举了8种常用的定位方法,其中着重讲解了link text定位,并通过实例展示了如何使用Java代码实现点击百度首页的“奥运奖牌榜 最新排名”链接,进入相应页面。如果link text不准确,则无法定位到元素,这说明linkText是精准匹配,而非模糊匹配。文章还提到了partial link text作为link text的模糊匹配版本,将在后续内容中介绍。
35 4
|
10天前
|
XML 前端开发 Java
《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
【4月更文挑战第6天】按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath。xpath 的定位方法, 非常强大。使用这种方法几乎可以定位到页面上的任意元素。xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。XPath 是XML 和Path的缩写,主要用于xml文档中选择文档中节点。基于XML树状文档结构,XPath语言可以用在整棵树中寻找指定的节点。
41 0
|
29天前
|
Web App开发 安全 Java
《手把手教你》系列技巧篇(七)-java+ selenium自动化测试-宏哥带你全方位吊打Chrome启动过程(详细教程)
【2月更文挑战第16天】本文介绍了如何通过查看源码理解Selenium启动Chrome浏览器的过程。首先,展示了启动Chrome的Java代码,包括设置系统属性、创建WebDriver实例、最大化窗口、设置隐性等待、打开网站、获取页面标题以及关闭浏览器。文章还讲解了包(package)、import导入、setProperty设置系统属性、WebDriver接口、driver实例、manage方法、get方法加载网页以及quit方法退出浏览器的基本概念和作用。适合没有Java基础的读者了解Selenium与Java的交互方式。
45 3
|
7天前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法之By css上卷(详细教程)
【4月更文挑战第9天】本文介绍了CSS定位方式的使用,包括它的优势和8种常用的定位方法。CSS定位相比XPath定位更快、更稳定。文章通过示例详细讲解了如何使用CSS定位元素,包括通过id、name、class name、tag name、link text、partial link text以及XPath进行定位。还提供了Java代码示例来演示如何在自动化测试中使用这些定位方法。
37 1
|
1月前
|
前端开发 Java 测试技术
《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)
【2月更文挑战第14天】《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程) 前面几篇宏哥介绍了两种(java和maven)环境搭建和三大浏览器的启动方法,这篇文章宏哥将要介绍第一个自动化测试脚本。前边环境都搭建成功了,浏览器也驱动成功了,那么我们不着急学习其他内容,首先宏哥搭建好的环境中创建首个完整的自动化测试脚本,让小伙伴或者童鞋们提前感受感受,也是为了激起大家的学习兴趣。宏哥的个人经验是:自动化脚本编写比较容易,最大的困难去如何去写测试断言。自动化测试,最重要的还是落在测试上面,而不是自动化,自动化只是手段。
38 1
《手把手教你》系列基础篇(五)-java+ selenium自动化测试- 创建首个自动化脚本(详细教程)
|
1月前
|
SQL 关系型数据库 OLAP
PostgreSQL从小白到高手教程 - 第46讲:poc-tpch测试
PostgreSQL从小白到高手教程 - 第46讲:poc-tpch测试
83 3