集群压测体系搭建-实时监控平台(2)

2023-10-21 3,146 0

技术架构:

以Docker技术为主,使用Docker+Nginx+Prometheus+Grafana+Influxdb+Node-exporter方式

1.InfluxDb部署和配置

拉取镜像
docker pull influxdb:1.7.10

启动容器
(后面的命令是为了让容器和宿主机的时间一致,避免因时间不一致导致的数据不显示问题)

docker run -d --name=influxdb -p 8086:8086 -v ${PWD}:/var/lib/influxdb influxdb:1.7.10 /etc/localtime:/etc/localtime


进入容器
docker exec -it influxdb bash

输入命令
influx

进入influx内部
show databases;
查看influxdb现有数据库

使用命令
create database jmeter;
创建名为jmeter的数据库

use jmeter;
使用该数据库

show measurements;
查看下面具备哪些表


select * from "表名字";
查看表中具有哪些数据

效果展示

2.Grafana部署

Grafana就是一个报表展示平台,相比来说配置和安装更加容易,Grafana版本之间可能会有稍许差别,此处使用版本9.3.2

拉取镜像
docker pull grafana/grafana:9.3.2

运行镜像
(--link 是为了让grafana和influxd网络互通)
docker run -d --name=grafana --link=influxdb:influxdb -p 3000:3000 grafana/grafana:9.3.2

效果截图

3.Prometheus部署和配置

注意

首先在tmp目录下新建prometheus和prometheus.yml文件

prometheus+docker方式部署+加载Nginx端口转发配置+允许热加载node-exporter+挂在配置文件到宿主机+prometheus允许后缀名方式访问
(和Nignx配置对应)

拉取镜像
docker pull pro/prometheus

运行镜像
docker run -d -p 9090:9090 -v /tmp/prometheus:/etc/prometheus --name=prometheus prom/prometheus --config.file=/etc/prometheus/prometheus.yml --web.route-prefix=/ --web.external-url=/prometheus/ --web.enable-lifecycle

安装完prometheus并配置好Nginx和Node-exporter 后可访问IP/prometheus/ ,查看prometheus配置了几个node-exporter

4.Nginx 部署(Yum方式)

yum install -y nginx  安装完nginx , 修改配置文件,在/etc/nginx/nginx.conf

运维给我开通的是外网80端口,所以我就直接用80端口代理Grafana的web页面

完整http块内的配置如下(可能有的配置冗余,但也懒得去排查修改了)

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;

location /prometheus/{
proxy_pass http://127.0.0.1:9090/;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect default;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;

}

location /influxdb/ {
proxy_pass http://127.0.0.1:8086/;
}

location ^~ / {
index index.html index.htm;
proxy_pass http://127.0.0.1:3000/;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect default;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
}

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /404.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

5. Jmeter压测数据写入Influxdb

在相应Thread Group中添加Backend Listener,最好给不同的Backend Listener 起不同的名字,防止同时多脚本压测时出现数据写入混乱的问题;

1. 选择指定implementation

2.填写influxdb所在地址和端口,以及数据库名,如下截图(因为脚本要跑在Linux内网环境,所以 URL 我写的是内网IP)

3.measurement名字填写jmeter

4.application 可以填写指定名称(不同脚本)

5.填写的application名称会在Dashboard中的 application内显示,执行压测脚本时,会显示实时数据

6.Transaction 显示的是Samper名称

效果展示

6. Node-exporter部署,监控发压机

在需要监控的机器上,使用docker方式部署node-exporter

新服务器部署node-exporter 步骤
docker pull prom/node-exporter

docker run -d --net="host" --name node_exporter --restart=unless-stopped -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter

然后在prometheus中配置该node-exporter所在地址和端口号

- job_name: 'Jmeter-slave-'

# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.

static_configs:
- targets: ['IP:9100']

加上新配置的node-exporter之后,使用命令在prometheus所在机器 进行 prometheus热加载更新,然后访问Prometheus web页面,确认该node-exporter是否添加到监控体系当中

curl -X POST http://ip:9090/-/reload

7.Grafana展示Jmeter实时压测数据+展示Node-exporter数据

点击grafana的logo看到COMPLETE,add data source 新增数据源

1.Grafana 配置 Jmeter压测数据源
指定docker中的influxdb:8086,并指定jmeter数据库,点击save and test 通过即成功;

2. 展示Jmeter实时压测数据
Import 5496,点击load,加载出来后指定刚增加的data source Influxdb,指定表名字 jmeter,点击import ;

压测时即可看到实时数据,展示效果如下

application名称是Backend listener中填写的application 名称

Transaction 显示的是Samper名称

3.添加Prometheus+node-exporter主机监控数据源
仿照上述新增数据源,内网ip/prometheus/,测试通过即可

4. 展示主机监控数据,添加Dashboard
import dash board 8919,导入并保存即可

 

问题总结
1. 为什么用Nginx?

因为运维只给开一个端口,但是还有那么多服务需要用,所以用作端口代理。

2. 为什么用Docker?

因为Docker部署更加方便。

3. Docker和Jmeter压测时时间不一致,无法写入数据(Grafana和Jmeter压测时间)

docker run -p 3306:3306 --name mysql -v /etc/localtime:/etc/localtime 根据需求更改启动容器时的参数,将宿主机的时间和docker时间一致(docker和宿主机在同一台机器)

4. Jmeter数据无法写入Influxdb数据库,查询measurements为空

Jmeter:配置后端监听器(Backend Listener),使用Nginx作为端口转发,将Influxdb的服务映射到/influxdb路径

5.Jmeter入库后,Grafana配置数据源失败

在docker中运行时指定docker内influx的网络,配置时使用influxdb:8086

6.Grafana展示Jmeter中的数据为空

配置后端监听器measurement值为jmeter,否则读取不到数据

7.多个脚本同时执行添加了后端监听器,压测数据被写入到同一个Application库中

默认根据监听器名称进行判断监听器有没有执行,解决方案,不同后端监听器起不同的名称

8. Grafana 监控发压机 指标数据显示 no data

使用curl查看9100是否能取到node-exporter数据,如果可以取到 去prometheus web页面查看prometheus是否配置成功

相关文章

密码保护:Metersphere使用实践,优缺点分析
密码保护:MS自动化测试框架调研
记一次Nginx代理Mysql服务的经历
Jenkins中自动化创建Jira任务
集群压测体系搭建-Jmeter集群(1)
Selenium+Jenkins+Allure 自动化测试并产生报告

发布评论

Index