当前位置: 首页 > news >正文

【Docker】性能测试监控平台搭建:InfluxDB+Grafana+Jmeter+cAdvisor

前言

在做性能测试时,如果有一个性能测试结果实时展示的页面,可以极大的提高我们对系统性能表现的掌握程度,进而提高我们的测试效率。但是我们每次打开Jmeter都会有几个硕大的字提示别用GUI模式进行负载测试,而且它自带的监视器效果实在一般:在Windows下渲染效果不好,在linux环境(非GUI环境)下更是无法使用,这一点我在之前的文章中有过简单的描述。

所以,在做性能测试时,为Jmeter构建一个可视化的监控环境平台是非常有价值的。这也是这篇博客的目的。

首先我们来看一下最后的成品,监控了TPS、并发、请求成功率、失败率、请求&接收数据大小、平均响应时长、95%的请求平均响应时长等等。(这里面的各个板块都是可自定义配置的,无论多花里花哨都可以[奸笑脸])

业务服务监控:精确到具体的接口

Mysql监控:精确到具体的查询函数

Redis监控:精确到具体的cache操作

组件简介

首先我们一起来简单了解下今天需要用到的这几个工具。

InfluxDB

一个开源的时序数据库,使用GO语言开发,特别适合用于处理和分析资源监控数据这种时序相关数据。

cAdvisor

Google用来监测单节点的资源信息的监控工具。Kubernetes中也缺省地将其作为单节点的资源监控工具,各个节点缺省会被安装上Cadvisor。

Grafana

一款可视化度量分析和可视化套件,常用于可视化基础设施和应用程序分析,与Kibana类似,UI更加灵活,且插件丰富。

Jmeter

Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。

镜像安装+启动

虽然直接部署、配置grafana、InfluxDB并不复杂,但是使用docker部署会有更好的环境可移植性,也更简单,所以选择使用docker进行部署。

如果我们确定自己想要的镜像版本,可以直接指定版本执行docker run来运行,从而忽略掉拉取镜像的过程,本文就是使用的这种方法。

但是有一点需要注意,如果没有指定镜像版本直接运行docker rundocker主进程首先会在本地查找,如未发现合适的镜像,会直接到远程镜像仓库(可以指定私有仓库)拉取最新版本(tag:latest)。

安装influxDB

docker run -d \-p 8083:8083 \-p 8086:8086 \--expose 8090 \--expose 8099 \--name influxsrv \tutum/influxdb

安装cadvisor

docker run \--volume=/:/rootfs:ro \--volume=/var/run:/var/run:rw \--volume=/sys:/sys:ro \--volume=/var/lib/docker/:/var/lib/docker:ro \-p 8080:8080 \--detach=true --link influxsrv:influxsrv \--name=cadvisor \google/cadvisor:latest \-storage_driver=influxdb \-storage_driver_db=cadvisor \-storage_driver_host=influxsrv:8086

安装granfana

docker run -d \-p 3000:3000 \-e INFLUXDB_HOST=localhost \-e INFLUXDB_PORT=8086 \-e INFLUXDB_NAME=cadvisor \-e INFLUXDB_USER=root -e INFLUXDB_PASS=root \--link influxsrv:influxsrv \--name grafana \
grafana/grafana

各个参数含义

参数含义
-d容器在后台运行
-p将容器内端口映射到宿主机端口,格式为 宿主机端口:容器内端口;8083是influxdb的web管理工具端口,8086是influxdb的HTTP API端口
--expose可以让容器接受外部传入的数据
--name指定容器名称
--link--link [name/id]:alias, name和id是源容器的name和id,alias是源容器在link下的别名;在--link标签下,接收容器就是通过设置环境变量和更新/etc/hosts文件来获取源容器的信息,并与之建立通信和传递数据的。
--volume把一个本地主机的目录当做数据卷挂载在容器上,[host-dir]:[container-dir]:[rw/ro],挂载点可以让多个容器共享。
  • storage| storage_driver/指定数据库类型、storage_driver_db/指定数据库实例、storage_driver_host/指定数据库host

镜像名称后面加冒号接tag,能指定docker版本,安装完成之后执行docker ps会看到下面的信息

 

也可以执行docker exec -it container-id /bin/bash进入容器内部查看信息,比如我们拉取的grafana镜像的grafana版本是5.3.4

influxdb配置

登录influxdb

我们在上面执行了docker run之后,其实服务就已经起来了,所以现在可以直接使用8083这个已经映射好的influxdb的web管理端口进行influxd的配置管理。

直接访问http://host-ip:8083/进入配置管理界面。点击配置管理界面右上角的 配置按钮图标 进入配置配置管理后台,使用root/root登录。

创建cAdvisor应用数据库

在上图中我们可以看到influxdb提供了一些查询/操作数据的语句模版,这对我们这些不太熟悉它的人写SQL非常有帮助。

比如我们选择模板CREATE DATABASE,在输入框会出现CREATE DATABASE "db_name",把db_name 替换成我们的数据源cadvisor,回车,我们的数据库就创建完成了。接下来我们继续执行下面的SQL来完成用户的创建和授权:

CREATE USER "cadvisor" WITH PASSWORD 'cadvisor'
grant all privileges on "cadvisor" to "cadvisor"

执行成功会有 Success! (no results to display) 的提示。

执行docker run 的命令的时候会生成的一串数字

查看cAdvisor信息

其实在上面我们执行docker run安装cAdvisor的时候,cAdvisor就已经完成了,我们访问http://host-ip:8080/containers/能看到下面的信息

 

granfana配置

我们在前面已经完成了grafana的部署启动,访问http://host-ip:3000使用admin/admin即可登录配置管理后台,如果不想修改密码可以选择跳过。

 

配置Granfana数据源

选择数据库类型为influxdb,host为http://influxsrv:8086,填写cadvisor的账户密码:

保存之后,点击保存并测试:

添加Dashboard

点击左侧的 + 号,选择Dashboard,选择graph

进入心界面后,选择title,选择编辑

在展示数据配置界面选择一个数据源,比如内存,点击保存,即可完成该数据的动态展示:

在配置界面Axes选项卡中配置相关的显示单位。可以根据实际的情况选择监控的单位。,因为我们监控的内存,所以选择的是相关的单位。

至此, 所有配置步骤完成,简单配置了两个图像:

配置Jmeter监控

是不是很奇怪怎么说了那么久还是没有说到怎么配置Jmeter的监控?其实做完前面的事情,我们的测试环境就已经搭建完了,在接入数据库之前我们可以使用前面的方法在influxdb建一张叫Jmeter的表,然后在启动测试之前选择添加一个后端监听器,并选择为 influxdb ,数据库连接配置修改为我们搭建的真实host就可以运行测试了,数据都会写入Jmeter这张表,剩下的就是如何配置第一张图那样的花里胡哨的东西把它展示出来:

下图是我简单选择的几个维度生成的监控图像,红框标出的是可以选择的各种指标,还有一部分没有罗列出来,可以根据实际情况进行选择:

总结

前面介绍的都是压力机的配置,实际上性能测试还需要搭建性能测试环境、进行代码埋点等。

代码埋点我们是通过写一些公共的类库,比如在操作redis、DB的方法的封装中添加;

压测环境部署我们使用的是helm(基于k8s)封装chart文件夹的方式完成的,可以快速的集成,再结合Jenkins快速的完成性能自动化的持续集成。


资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

相关文章:

【Docker】性能测试监控平台搭建:InfluxDB+Grafana+Jmeter+cAdvisor

前言 在做性能测试时,如果有一个性能测试结果实时展示的页面,可以极大的提高我们对系统性能表现的掌握程度,进而提高我们的测试效率。但是我们每次打开Jmeter都会有几个硕大的字提示别用GUI模式进行负载测试,而且它自带的监视器效…...

wordpress日主题Ripro9.0最新二开修正源码下载+美化包和插件

日主题Ripro9.0最新二开升级修正源码美化包和插件,RiPro9.0的二开版本新模板,包含2个美化包和全屏水印以及防复制插件。 模板和美化包路径:\wp-content\themes 插件路径:\wp-content\plugins,有兴趣的自行去体验吧...

fib Model Code史海拾贝

文章目录 0. 背景1. 强度等级不一致(20230807)1.1 问题描述(20230807)1.2 问题探索 0. 背景 本文主要记录在学习了解ModelCode的过程中产生的问题。当然,主要是我个人认为有意思的地方。欢迎有共同兴趣的网友留言一起…...

6.7.tensorRT高级(1)-使用onnxruntime进行onnx模型推理过程

目录 前言1. python-ort2. C-ort总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 tensorRT 高级-使用 onnxruntime 进行 on…...

360未来安全研究院笔试题

笔试时间:2020.04.16,15:00-17:30。 岗位:Linux 安全开发工程师(实习生) 题型: 能力测试——逻辑题(20个5分=100分) 专业测试——客观题(40个2分=80分) 专业测试——在线编程题(2个25分=50分) 逻辑题 一共40道题目,很多逻辑推断题,包含数字找规律和图片找…...

Linux SSH 远程连接主机,并执行命令

应用场景 当需要远程到另一台Linux上,并在另一台机器上执行 Shell 命令,则需要注意命令的书写格式 示例说明 远程到 192.158.157.47 机器上,并执行命令 cd /tmp && ./zabbixagent_install.sh && echo Success 1、错误方式…...

FAST协议详解1 不同数据类型的编码与解码

一、概述 FAST协议里不同的数据类型在编码时有非常大的区别,比如整数只需要将二进制数据转为十进制即可,而浮点数则需要先传小数点位数,再传一个整数,最后将二者结合起来才是最终结果。本篇使用openfast自设了一些数据并编码成FA…...

黑马大数据学习笔记5-案例

目录 需求分析背景介绍目标需求数据内容DBeaver连接到Hive建库建表加载数据 ETL数据清洗数据问题需求实现查看结果扩展 指标计算需求需求指标统计 可视化展示BIFineBI的介绍及安装FineBI配置数据源及数据准备 可视化展示 P73~77 https://www.bilibili.com/video/BV1WY4y197g7?…...

网络编程——TCP/IP协议族(IP协议、TCP协议和UDP协议……)

TCP/IP协议族 一、IP协议 1、IP协议简介 IP协议又称网际协议 特指为实现在一个相互连接的网络系统上从源地址到目的地传输数据包(互联网数据包)所提供必要功能的协议,是网络层中的协议。 2、特点 不可靠:它不能保证IP数据包能成功地到达它的目的地,仅…...

Oracle SQL存储过程能够返回表吗

使用Oracle游标返回表数据 在Oracle存储过程中,我们可以使用游标来返回表的数据。游标是一种类似于指针的数据类型,可以用来遍历和操作结果集。以下是一个示例的Oracle存储过程,通过游标返回表数据: CREATE OR REPLACE PROCEDUR…...

2 Vue使用v-bind来代替{{}}取值

注意!当两个具有共同id的标签都要从数据层拿值时,需要使用div标签,赋予他们共同的id,不然其中有一个会拿不到数据! v-bind用来绑定前标签的属性,然后对属性赋值。{{}}用来对前后标签中的文本赋值。使用方法…...

20230807在WIN10下使用python3将TXT文件转换为DOCX(在UTF8编码下转换为DOCX有多一行的瑕疵)

20230807在WIN10下使用python3将TXT文件转换为DOCX(在UTF8编码下转换为DOCX有多一行的瑕疵) 2023/8/7 12:58 https://translate.google.com/?slen&tlzh-CN&opdocs 缘起,由于google的文档翻译不支持SRT/TXT格式的字幕,因此…...

Flutter(八)事件处理与通知

1.原始指针事件处理 一次完整的事件分为三个阶段:手指按下、手指移动、和手指抬起,而更高级别的手势(如点击、双击、拖动等)都是基于这些原始事件的。 Listener 组件 Flutter中可以使用Listener来监听原始触摸事件 Listener({…...

Java,python,c#,js,c++搞量化交易的接口大全

股票基金api接口地址:https://stockapi.com.cn 不想自己写的:https://stockapi.com.cn 除了牛逼,只剩下牛逼,除了方便,只剩下方便,python不是唯一的量化编程语言 接口说明:日线macd指标 https:/…...

javaAPI(一):String

String的特性 String底层源码 1、String声明为final,不可被继承 2、String实现了Serializable接口:表示字符支持序列化 实现了Comparable接口:表示String可以比较大小 3、String内部定义了final char[] value用于存储字符串 4、通过字面量的…...

数据互通,版本管理优化图文档与BOM数据

在现代企业的产品开发过程中,图文档和BOM数据是不可或缺的关键要素。图文档记录了产品的设计和工程信息,而BOM数据则明确了产品所需物料的清单和规格。然而,由于数据的复杂性和版本变更的频繁性,图文档与BOM数据之间的协作和管理常…...

【CSS】旋转中的视差效果

效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"/><meta http-equiv"X-UA-Compatible" content"IEedge"/><meta name"viewport" content"widthdevice-…...

【ASP.NET MVC】使用动软(一)(9)

一、解决的问题 前文为解决数据库操作设计的 TestMysql 类&#xff0c;仅简单地封装了一个Query函数&#xff0c;代码如下&#xff1a; public class TestMysql{public static string SqlserverConnectStr "server127.0.0.1;charsetutf8;user idroot;persistsecurityin…...

【Jsp课设】3款基于JavaWeb的学生选课管理系统

项目介绍&#xff1a;后端采用JspServlet。前端使用的是Layui的一个网站模板。开发一个在线的学生选课管理系统&#xff0c;用于课程设计的使用。 项目类型&#xff1a;JavaWeb源码 用户类型&#xff1a;2个角色&#xff08;管理员学生&#xff09; 主要技术&#xff1a;JspSe…...

系统架构设计师笔记第35期:表现层框架设计

表现层框架设计是指在软件系统中&#xff0c;将用户界面&#xff08;UI&#xff09;和用户交互逻辑与后端业务逻辑分离&#xff0c;使用特定的框架来组织和管理表现层的功能和结构。下面是表现层框架设计的一般步骤和常用技术&#xff1a; 确定需求和功能&#xff1a;首先&…...

Cursor Pro功能解锁技术解析与实战方案

Cursor Pro功能解锁技术解析与实战方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial request limit. / Too m…...

C语言新手避坑指南:math.h库函数参数检查与常见编译错误解决

C语言新手避坑指南&#xff1a;math.h库函数参数检查与常见编译错误解决 刚接触C语言的开发者在使用math.h库时&#xff0c;往往会遇到各种"坑"——从莫名其妙的计算结果到令人困惑的编译错误。这些问题看似简单&#xff0c;却可能让初学者浪费数小时调试时间。本文将…...

当plc编程遇见ai助手:用快马智能分析需求并生成优化控制方案

作为一名工业自动化领域的工程师&#xff0c;我最近尝试用AI辅助完成PLC编程工作&#xff0c;发现InsCode(快马)平台的智能对话功能特别适合处理复杂控制逻辑的开发。这种"人类描述需求AI分析生成"的协作模式&#xff0c;让传统PLC开发效率提升了至少三倍。 需求分析…...

Python自动化抢票实战:告别手动抢票,用技术提升成功率

Python自动化抢票实战&#xff1a;告别手动抢票&#xff0c;用技术提升成功率 【免费下载链接】damaihelper 支持大麦网&#xff0c;淘票票、缤玩岛等多个平台&#xff0c;演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 在演唱会门票秒…...

ai辅助开发:借助快马平台智能生成与交互式解析yolov8网络架构图

最近在做一个计算机视觉相关的项目&#xff0c;需要用到YOLOv8模型。作为一个视觉模型小白&#xff0c;最头疼的就是理解这个复杂的网络结构。好在发现了InsCode(快马)平台&#xff0c;它提供的AI辅助开发功能简直是我的救星。 自然语言输入 以前画网络结构图&#xff0c;要么自…...

告别复杂设置!这款开源IPTV播放器带来极简体验

告别复杂设置&#xff01;这款开源IPTV播放器带来极简体验 【免费下载链接】iptvnator :tv: Cross-platform IPTV player application with multiple features, such as support of m3u and m3u8 playlists, favorites, TV guide, TV archive/catchup and more. 项目地址: ht…...

实战Wireshark抓包分析与Python爬虫技术入门

1. Wireshark抓包实战&#xff1a;从零开始分析网络通信 第一次接触Wireshark时&#xff0c;我被这个能"偷看"网络流量的工具震撼到了。想象一下&#xff0c;你家的Wi-Fi就像一条繁忙的高速公路&#xff0c;而Wireshark就是路边的监控摄像头&#xff0c;能记录每一辆…...

Windows Cleaner智能清理引擎:全方位提速系统的开源解决方案

Windows Cleaner智能清理引擎&#xff1a;全方位提速系统的开源解决方案 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 在数字化办公环境中&#xff0c;系统优化…...

Phi-4-mini-reasoning应用场景:AI竞赛教练系统自动出题与解析

Phi-4-mini-reasoning应用场景&#xff1a;AI竞赛教练系统自动出题与解析 1. 引言&#xff1a;当AI遇见竞赛训练 想象一下&#xff0c;一位数学竞赛教练每天需要&#xff1a; 设计不同难度的题目准备详细的解题步骤针对学生错误提供个性化解析不断更新题库保持新鲜度 传统方…...

Chord视觉定位模型实战案例:自动驾驶道路元素(车道线/交通灯/行人)定位

Chord视觉定位模型实战案例&#xff1a;自动驾驶道路元素&#xff08;车道线/交通灯/行人&#xff09;定位 在真实自动驾驶场景中&#xff0c;单纯依赖传统目标检测模型往往面临泛化能力弱、小目标漏检、遮挡鲁棒性差等问题。而Chord——这个基于Qwen2.5-VL的多模态视觉定位服…...