jmeter性能监控工具
一切的性能测试,都需要有性能监控。一切可监控的资源,尽可能都监控起来。
监控: 监控工具 + 监控平台
监控工具,容易上手。
ServerAgent监控、nmon、influxdb+grafana、Prometheus+grafana+xxxxxxx
ServerAgent监控
serverAgent这个监控工具,可以和JMeter集成的,在JMeter的图形界面中,可以实时看到监控的数
据。但是,它只能监控硬件资源使用情况。 不能监控应用服务。
serverAgent是监控操作系统的资源使用情况。
serverAgent要放到被测试服务器上。安装unzip命令`yum install unzip`解压`unzip serverAgent_xxx.zip`
使用 ./startAgent.sh ====一定要有 java的运行环境
默认的数据传输协议是 http的tcp 和udp, serverAgen的端口是 4444 这个端口,在某一些云服务器上,云服务器的提供商是不运行对外开发这个端口的。
* 如果你在自己的云服务器上部署了一个服务要能被访问到,一定要在云服务器的管理平台中,添加安全策略,在里面开放这个端口。`./startAgent.sh --tcp-port 6789 --udp-port 0` 改变 监控工具的通信协议的端口
*
检查jmeter发起方和被测服务器之间的网络是通的`telnet ip 6789`
JMeter与serverAgent集成。
在JMeter中添加 PerfMon Metrics Collector 监听器
由图中可以看出在刚开始cpu就占用了将近100%,内存占用了90%。说明系统存在性能问题(先不优化,还要查看其他性能参数)
==cli命令执行性能测试, 生成jtl文件不会有任何的服务器资源监控的数据==
nmon
这个监控工具,只能监控 linux系统。
这个工具,是一个独立的linux系统监控工具,不与性能测试工具有关联。
这个工具,只能监控 硬件资源, 不能监控 软件服务。
在现在银行系统中使用比较多。
[下载工具]
先要确认自己的linux系统的架构、发行版本。
通过: `
uname -a
看到 系统的cpu架构
通过
cat /etc/redhat-release
可以看到发行版本 ------redhat加载
如果是其他系统(ubuntu)
cat /etc/os-release
文件
监控的包和 分析用包
把 监控用到包上传到 被监控机器上。
nmon性能分析工具
解压
tar -xzvf nmon16m_helpsystems.tar.gz
除了和我们版本相同的文件,其他的都可以删除
nmon_x86_64_centos7 -h
获取帮助
三种模式
On-screen Stats 实时屏幕展示模式 -----不会保存监控数据到文件
Data Collection 数据收集模式 ------界面上不会显示,收集数据到文件,一个nmon格式
Capacity Plan 固定计划执行模式 ----- 按照固定设定数据收集放置执行,把数据写入到文件
实时屏幕交互模式
./nmon_x86_64_centos7
不要带参数
快捷键: `cmdnl`
退出键:`q`
数据收集模式
nmon_x86_64_centos7 -f 输出结果到文件
-s 间隔多长时间拍一次快照
-c 次数
如果只写一个-f参数,这个命令就会自动收集1天的数据,保存到一个文件,1天时间到了这个命令才会退出。
nmon_x86_64_centos7 -f -s3 -c100
命令释义:
-s3:间隔3秒钟收集一次数据,
-c100:总共收集100次,
执行300秒之后这个命令就会自动退出。
使用 nmon的分析工具
解压分析工具之后,会有一个 xlsm文件,这个文件,是一个 带有宏的文件,这个需要使用 微软的
office打开。 会提示要启用宏, 启用了才能去分析 nmon文件
固定计划执行模式
有固定的三个参数
-x 一天 nmon_x86_64_centos7 -x
-X 一个小时
-z 保存文件到var文件夹下,需要超管账户
grafana + influxdb1.x + JMeter 性能监控平台
grafana 前置展示界面
* 界面是通过模板,来配置。
* 换一个模板,就可以换调前端的界面展示。
influxdb 时序数据库
* 是根据时间顺序来记录数据的一个数据库。
+ 每一条数据都有一个时间(一般是时间戳)
* influxQL 这个数据库的自有sql语句 ------- 非常类似关系型数据库的标准SQL
* 现在用到 JMeter做性能测试,数据存到influxdb数据库中,influxdb的版本,建议使用1.x
+ influxdb已经有2.x 版本, 但是在JMeter5.4以下的版本中,使用很麻烦。
JMeter有一个后端监听器元件
* 可以与influxdb集成
* 就可以把 JMeter做性能测试时的一些性能数据,写入influxdb数据库
监控平台环境搭建 安装 grafana和influxdb
grafana安装
自己用云盘中 空系统的ova文件,创建出一个空系统
性能监控平台,一般是不会搭建在被测系统上的。把 grafana 和influxdb1.x的rpm包上传到 机器
不要去传 influxdb2.x, 更不要在机器上安装 influxdb2.x版本, 如果安装了2.x 你的influxdb1.x是不能再安装成功的。
grafana-7.4.3-1.x86_64.rpm 、influxdb-1.7.0.x86_64.rpm
yum install influxdb-1.7.0.x86_64.rpm -y
yum install grafana-7.4.3-1.x86_64.rpm -y
安装完成之后,系统中,就会有 grafana和influxdb这个两个软件。
influxdb安装
启动数据库的命令:
influxd
操作influxdb数据库,需要另外再开启一个终端窗口
进入数据库的命令行模式命令:
influxd
看到: influxdb这个数据库,可以通过http协议,访问`8086`端口。
influxdb时序数据库地址
show databases;
create database jmeter;
use jmeter;
show measurements; 查看当前库下面有哪些表。
这个监控平台,不需要自己创建表。
启动grafana:
systemctl restart grafana-server
检查grafana是否启动
ps -ef | grep grafana
可以通过,`http://grafana的ip:3000 ` 账密:`admin/admin`
选择首页的添加数据源
选择influxdb
填写名称
URL: `http://influxdb的ip地址:8086`
InfluxDB Details
database: `jmeter`
点击 sava & test 出现绿色 说明操作成功
jmeter进行性能测试生成数据
JMeter中,添加后端监听器
选择 带有 influxdb 的监听器实现
配置信息:
influxdbURL: http://influxdb的ip:8086/write?db=jmeter
运行脚本后可以通过查询语句查询表中的数据
grafana配置界面展示数据
左侧菜单 +号, 找import
访问[https://grafana.com/](https://grafana.com/)网站,点击网页最下方Dashboards查找InfluxDB 相关的面板
输入面板的id: 5496 load 或下载对应json文件或复制json文件内容
因为这个是 在国外, 有些地方,网络原因,连接不上的问题。
DB name: 选择之前添加的influxdb数据源的名称
确保 measurement的值,与 JMeter后端监听器中 measurement的值一致。
确定
模板的界面,右上角,可以选择时间范围
Prometheus+Grafana+xx_exporter监控
Jmx_exporter+Prometheus+Grafana 监控
JVMgrafana + prometheus + jvm_exporter
安装Prometheus
[下载prometheus]并解压
tar xvfz prometheus-2.34.0.linux-amd64.tar.gz
给与运行权限
chmod +x prometheus-2.20.1.linux-amd64.tar.gz
**配置jvm监控端口**
在Prometheus的配置文件中配置jvm的信息
vim prometheus.yml
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:3088'] # JVM Exporter的地址和端口,需要和下方的JVM端口一致
启动Prometheus:运行Prometheus服务器。
./prometheus --config.file=prometheus.yml
访问:http://IP:9090/,验证Prometheus是否启动成功
想查看prometheus监控jvm信息,可以在界面中执行,jvm_info
- 配置catalina.sh文件
JAVA_OPTS="-javaagent:./jmx_prometheus_javaagent-0.14.0.jar=3088:./tomcat.yml"
- JAVA_OPTS="-javaagent:./jmx_prometheus_javaagent-0.15.0.jar=6088:./tomcat.yml"
- https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/下载jvm_exporter.jar 到tomcat的bin文件夹
- https://github.com/prometheus/jmx_exporter/blob/main/example_configs/tomcat.yml 配置tomcat.yml文件 到tomcat的bin文件夹
选着对应的java版本,这里我选择是0.14版本
启动tomcat
启动grafana:
systemctl restart grafana-server
检查grafana是否启动
ps -ef | grep grafana
打开grafana页面http://192.168.100.104:3000/
配置grafana
引入模板:7727
使用8563的模板时候,job的配置, 一定要与 prometheus.yml文件中 job_name 要相同
tomcat监控
grafana + prometheus + jvm_exporter
grafana + prometheus 安装搭建详看这里
prometheus 监控 nginx
nginx-module-vts:Nginx virtual host traffic status module,Nginx的监控模块,能够提供JSON格式的数据产出。
nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。
Prometheus:监控Nginx-vts-exporter提供的Nginx数据,并存储在时序数据库中,可以使用PromQL对时序数据进行查询和聚合。
查看nginx安装了哪些模块
/usr/local/nginx/sbin/nginx -V
安装git
sudo yum install git
下载nginx-module-vts
git clone https://gitee.com/mirrors/nginx-module-vts.git
进入nginx的解压文件夹,先停止nginx服务,进入nginx目录再执行
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/opt/nginx-module-vts/
--add-module的路径要与上面下载文件路径一致
make
出现这个就安装成功了
替换Nginx启动文件
备份nginx启动文件
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
**停止nginx**
pkill -9 nginx
[root@centos7 objs]# cp /opt/pcre-8.44/nginx-1.19.5/objs /usr/local/nginx/sbin/
cp: 略过目录"/opt/pcre-8.44/nginx-1.19.5/objs"
[root@centos7 objs]# cp /opt/pcre-8.44/nginx-1.19.5/objs/nginx /usr/local/nginx/sbin/
cp:是否覆盖"/usr/local/nginx/sbin/nginx"? y
**启动nginx**
/usr/local/nginx/sbin/nginx
修改Nginx.conf配置文件,试验安装是否成功
http {
vhost_traffic_status_zone;
vhost_traffic_status on;
vhost_traffic_status_filter_by_host on;
}
server {
#设定查看Nginx状态的地址
location /nginx_status {
stub_status on;
access_log off;
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
配置解析:
1.1 打开vhost过滤:
vhost_traffic_status_filter_by_host on;
开启此功能,在Nginx配置有多个server_name的情况下,会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上。
1.2 在统计流量的server区域开启vhost_traffic_status,配置
vhost_traffic_status on;
在重新加载 Nginx 配置之前,先检查配置文件的语法是否正确。
sudo /usr/local/nginx/sbin/nginx -t
如果配置文件语法正确,你会看到类似以下的输出:
重新加载Nginx 配置(需要启动Nginx)
sudo /usr/local/nginx/sbin/nginx -s reload
访问http://192.168.100.103/nginx_status可以查看是否监控是否成功
**安装nginx-vts-exporter**
在Prometheus机器上面,安装nginx-vts-exporter
sudo yum install wget
wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
tar xvfz nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
解压
进入解压后的文件夹
nohup ./nginx-vts-exporter -nginx.scrape_uri=http://localhost/status/format/json &
可以通过 ./nginx-vts-exporter --help 来查看参数帮助
安装nginx-vts-exporter 启动成功,
可以通过浏览器访问 http://ip地址:9913/metrics 如果界面显示数据比较多,说明已经有收集数据,
如果比较少,说明配置还有问题 默认端口为:9913
配置prometheus.yml
- job_name: 'nginx-prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['192.168.100.104:9913']
保存配置文件,重启prometheus
./prometheus --config.file=prometheus.yml
数据库监控
Prometheus + grafana + xxx_exporter
如果你要监控其他, 你就去github上,搜索 你要个的exporter
mysql监控
下载mysqld_exporter
解压
在解压后的路径中创建‘mysqld_exporter.cnf'配置文件
[client]
user=数据库的用户名
password=数据库的密码
host=数据库的ip地址
port=数据库的端口
vim prometheus.yml
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'mysql-exporter'
static_configs:
- targets: ['数据库ip:9104']
模板:7362
redis监控
# 下载
wget https://github.com/oliver006/redis_exporter/releases/download/v1.17.1/redis_exporter-v1.17.1.linux-amd64.tar.gz
# 解压
tar xzf redis_exporter-v1.17.1.linux-amd64.tar.gz
# 启动
cd redis_exporter-v1.17.1.linux-amd64
nohup ./redis_exporter &
# 修改配置文件
vim prometheus.yml
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'redis-export'
static_configs:
- targets: ['localhost:9121']
模板id:763