性能监控平台环境搭建(二)_性能监控器
liuian 2025-09-18 22:48 2 浏览
前言
在上一篇《压测监控平台环境搭建》中主要写了关于常用的性能监控Docker+Jmeter+InfluxDB+Grafana+Prometheus+Exporter 的环境搭建方式,这些已经基本覆盖了我在公司做性能测试时候的基础监控,但对于系统级的监控这些还是远远不够的,通常有项目或需求需要进行性能测试的时候都是在独立的环境进行的。像数据库服务,应用服务,应用的链路追踪都是需要重新部署的,以及对Docker也是需要进行监控的,性能是一个很大的工程,涉及到的部门和技术都是很广的,性能测试不仅仅只是写写脚本,执行一下这简单,前期是需要对性能需求进行分析,评估,设计性能方案,性能策略等等,性能团队及相关人员对这些也会进行评审。
在前期工作评审通过后就进入到实施环节,在这环节我们首先要准备环境,而系统级性能监控环境需要性能团队完成,在基础服务和应用服务环境部署完成后,性能团队还要和开发,运维一起联调环境。今天带着大家从0搭建性能系统级监控环境,即使是没有任何基础的人员也可以通过这篇文章完成环境搭建工作落地。
可能有人会好奇上一篇文章已经写了为什么还会在重复写一遍呢?第一点,这篇文章除Java外所有用的都是最新版本,比如InfluxDb最新版本替换掉了1.8版本,整个过程遇到很多问题,对上一篇环境搭建也做了一些优化,这套环境所用到的工具全部是通过docker进行管理的,另外对大家的知识广度也会有一定的帮助。第二点,为了让大家实操起来方便,我会把上一篇文章的内容也融入到这里,这里写的更细更具体,以后在公司使用的时候直接看这一篇文章就够啦,这是一套真正0基础人员可以拿到公司中使用的性能环境。
部署环境流程
监控部署架构
环境部署实操
一.安装Docker(除了压力机每台服务器都需要按照如下步骤安装Docker)
1.把yum更新到最新
sudo yum update
中间部分省略
.............................
2.安装需要的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置yum源为阿里云,配置yum源的代理
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装Docker
sudo yum install docker-ce
执行安装命令后出现如下问题
解决方案
进入yum.repos.d目录,删除掉
mirrors.aliyun.com_docker-.repo重新安装即可
cd yum.repos.d
rm -rf mirrors.aliyun.com_docker-.repo
sudo yum install docker-ce
重新安装过程
5.启动docker
systemctl start docker
6.查看当前docker使用的版本
docker -v
二.压力机部署Jmeter环境
- 上传Jmeter的安装包到压力机所在的服务器
rz(如果服务器上没有rz命令通过 yum install -y lrzsz 安装)
在弹出的对话框到Jmeter安装包存放的路径下选择并点击
点击【打开】即可上传
2.上传到服务器后在指定的目录下解压Jmeter安装包
unzip apache-jmeter-5.5.zip
ls
3.解压完成后是没有执行权限的,需要为/bin目录下jmeter,jmeter.sh文件赋予权限,这里为了方便就把整个目录都赋予执行权限啦
chmod 755 -R apache-jmeter-5.5 这里指的是为apache-jmeter-5.5目录及子目录递归赋予755的权限
cd bin
ll
4.验证Jmeter是否可用,由于Jmeter依赖java环境,需要提前安装JDK
./jmeter -v 执行后出现下图代表jmeter可正常使用
5.环境验证通过后在本地编写接口脚本并上传到压力机
6.压力机上执行jmeter脚本验证环境,要替换成自己的路径
cd xxxx/bin 进入到jmeter的bin目录下
./jmeter -n -t /自己的脚本存放路径/test.jmx
小经验:通常我们在公司会把jmeter配置环境变量,这样就不用到jmter的bin目录下执行脚本啦,这里就不说明了,jmeter的环境变量需要自己配置。
7.Jmeter在压力机的服务器上就安装完成啦,接下来安装InfluxDB
三.监控服务器上安装InfluxDB
1.下载InfluxDB的镜像,默认下的是最新版本
docker pull influxdb
2.创建容器并后台运行
docker run -d --name influxdb -p 8086:8086 -p 8083:8083 influxdb
docker run 常用参数总结
-d:表示该容器后台运行
-p:服务器端口:容器端口 将容器端口映射到服务器
--name:为容器设置一个名称
-v:服务器目录:容器目录 将所在服务器的目录挂载到容器的目录
-it:交互模式启动一个容器
3.查看在运行的容器
docker ps
# docker ps -a 查看全部容器
4.进入influxdb容器
docker exec -it influxdb /bin/bash
5.连接InfluxDB数据库,由于是InfluxDB最新版本,根据提示需要使用influx v1 shell进入
最新版本:influx v1 shell
历史(2.0以前)版本:influx
6.输入show databases查询存在的数据库,提示未授权
7.遇到问题不要放弃,接下来我们就解决这个问题,在InfluxDB 2.x以后增加了API Token验证,那我们就来搞定这Token,InfluxDB是有Web页面的,浏览器登陆http://部署InfluxDB的服务器ip:8086/进入到InfluxDB的web页面
8.点击GET STARTER进入到如下界面,配置信息,这里的组织名一定要记住,后面会用到(Jmeter_Test)
9.点击Continue后到下面这个界面,选择第1个进入
10.进入后创建Token并复制这个Token
11.回到命令行退出 influx,配置token及初始化时的组织名称
12.再次通过命令进入InfluxDB并查询存在的库,完美解决
influx v1 shell
13.我们这次通过web界面来创建一个jmeter的库
14.创建后界面直接就可以看到
15.进入命令行查询无结果,因为没有执行过jmeter脚本
四.集成InfluxDB+Jmeter
- 在Jmeter中添加后台监听器并进行配置
后台监听器各参数说明:
influxdbUrl:http://服务器IP:8086/write?db=配置文件内默认的数据名,一般都是jmeter&org=初始化时设定的用户名&bucket=新建的数据库名字
influxdbToken:上面自己创建的API TOKENS(也就是解决输入命令提示未授权问题时创建的token)
measurement:与bucket一致
2.配置完成后把脚本上传到压力机上,在压力机执行jmeter脚本
./jmeter -n -t /usr/local/wfw/jmeter/test.jmx
3.进入InfluxDB查询数据
user jmeter
select * from jmeter
4.可以看到jmeter执行压测的结果已经存入到InfluxDB时序数据库中,接下来要做的就是让InfluxDB数据库的数据可视化
五.安装Grafana
- 下载镜像
docker pull grafana/grafana
2.创建容器后台启动并设置容器名为grafana
docker run -d --name grafana -p 13000:3000 grafana/grafana
3.浏览器访问验证(http://部署Grafana所在服务器的IP:13000/)
六.集成Grafana+InfluxDB
1.登陆Grafana(默认用户名密码都是 admin)
2.鼠标悬浮到齿轮按钮后点击 Data source
3.点击 【Add data source】
4.在添加数据源对话框选择并点击【InfluxDB】
5.在配置数据源页面配置查询语言和URL,InfluxDB2.x 以后的版本查询语言要选择Flux,URL填写安装Grafana所在的服务器IP,端口使用创建容器时映射到服务器的端口,要知道不是容器的端口
6.配置组织名,Token及Bucket(数据库)并测试数据源是否可用
Organization:初始化时候设置的名称
Token:API Token
Default Bucket:创建的数据库,默认把收集到的数据写入这里
7.数据源配置完成后导入可视化模板(依然选择5496模板使用)
8.导入模板后发现怎么会这样,上次还是可以的,一首凉凉送给自己,出现这个问题是因为InfluxDB 2.x查询语言用的是Flux语言,而InfluxDB 1.x用的是influxQL语言,这样就导致1.x版本的模板不能在2.x使用。我们去官网搜索一下InfluxDB2 看看有没有它专用的模板(输入influxdb2就可以)。
9.经过一番查找,发现 ID为13644的这个不错,来看一下这个模板的使用说明,这约束还挺多,不过也不难,就用这个吧。
10.按照使用说明首先检查自己的环境是否是java 11以上的,这里就不说啦,继续下一步
11.下载插件jmeter-plugins-influxdb2-listener-2.6.jar并放在lib/ext下,我先在本地配置,因为我不能确定这样是否可行,还有后面页需要在本地调试脚本,确定可行且都调试通过后在上传到压力机上。
12.选择并配置后端监听器,这里一定不要错,下图所选择处都是需要修改的,改成自己服务器对应的参数。
13.环境配置好后从Grafana导入13644模板
14.执行脚本测试一下,执行后在Grafana上模板是可以展示数据的,到这里集成Grafana+InfluxDB的工作就完成啦,记得在压力机上也要按照这个步骤修改配置。
七.应用服务器安装node-exporter(所有要被监控资源的服务器都要安装)
1.下载node-exporter镜像
docker pull prom/node-exporter
2.创建容器并后台运行
docker run -d -p 19100:9100 -v /proc:/host/proc:ro -v /sys:/host/sys:ro -v /:/rootfs:ro prom/node-exporter
3.浏览器访问对应的IP:端口看一下是否可以获取到对应服务器的数据
八.监控服务器安装Prometheus
1.下载Prometheus镜像
docker pull prom/prometheus
2.创建 prometheus目录并配置prometheus.yml文件
cd /use/local
mkdir prometheus
cd prometheus
mkdir data
cd data
vim prometheus.yml
3.配置prometheus.yml文件内容,直接将下面内容复制进入,修改ip和端口即可,后面修改也是可以的。
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'server'
static_configs:
- targets: ['应用服务器的ip:docker映射的接口']
4.创建容器并后台运行
sudo docker run -d -p 19090:9090 --name prom -v /usr/local/prometheus/data:/data prom/prometheus --config.file=/data/prometheus.yml
5.浏览器访问验证
九.集成Grafaba+prometheus
- 登陆Grafana添加Prometheus数据源
2.配置Prometheus数据源
3.测试数据源是否可用
十.集成Grafaba+prometheus+node-exporter
1.Grafana中导入模板(这里选择16098)
2.查看结果,没有问题
3.prometheus.yml文件中配置其他要监控的应用服务器,前提是这些服务器都已经安装node-exporter并启动容器
- job_name: "Server"
static_configs:
- targets: ['Server1IP:19100','Server2IP:19100']
4.重启prometheus容器
docker ps
docker restart 创建容器时 使用 --name指定的容器名字
5.可以看到新配置的服务器被已经成功监控
十一.数据库服务器安装mysqld-exporter(MySQL安装可参考Docker安装MySQL与Redis)
1.下载mysqld-exporter镜像
docker pull prom/mysqld-exporter
2.创建容器并后台运行
docker run -d --name mysqld_exporter -p 19104:9104 -e DATA_SOURCE_NAME="数据库登陆用户名:数据库登陆密码@(数据库服务器IP:映射的端口)/" prom/mysqld-exporter
3.访问浏览器验证mysqld_exporter是否能收集到数据库的数据
十二.集成Grafana+Prometheus+mysqld-exporter
1.配置prometheus.yml文件
- job_name: mysqld
static_configs:
- targets: ['数据库服务器IP:创建容器时映射的端口']
labels:
instance: mysqld
2.重启prometheus容器
docker restart prom
3.配置数据源,这里用的也是Prometheus的数据源,数据源上一步已经配置好啦,这里直接导入模板选择Prometheus数据源就可以(模板使用7362)
4.看一下导入模板后的监控效果
十三.安装cadvisor
1.下载cadvisor镜像
docker pull google/cadvisor
2.创建容器并后台运行
docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk/:/dev/disk:ro -p 18080:8080 -d --name=cadvisor --restart=always google/cadvisor:latest
3.浏览器访问验证cadvisor是否能收集到docker的数据
十四.集成Grafana+Prometheus+cadvisor
1.配置prometheus.yml文件
- job_name: cadvisor
static_configs:
- targets: ['IP:PORT']
labels:
instance: cadvisor
2.重启prometheus容器
docker restart prom
3.这里用的也是Prometheus的数据源,直接导入模板(这里选用193,选择11600也可以)
4.看一下监控效果,可以看到监控服务器的各容器消耗的资源情况
5.查看数据库服务器中容器的资源占用情况
十五.数据库服务器安装redis_exporter(Redis安装可参考Docker安装MySQL与Redis)
1.下载redis_exporter镜像
docker pull oliver006/redis_exporter:latest
2.启动redis_exporter镜像
docker run -d --name redis_exporter -p 9121:9121 oliver006/redis_exporter:latest --redis.addr redis://redis服务器IP:6379
十六.集成Grafana+Prometheus+redis_exporter
1.在监控服务器配置prometheus.yml文件
- job_name: 'redis'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['redis服务器IP:9121']
2.重启prometheus容器
docker restart prom
3.浏览器访问prometheus查看是否配置成功
4.监控Redis用的也是Prometheus数据源,直接导入模板即可(选择11835)
5.查看监控效果
十七.集成SprintBoot+Prometheus+Grafana
1.引入spring-boot-starter-actuator(SpringBoot 2.0以后默认性能指标收集可以使用Micrometer库,而SpringBoot Actuator提供了对Micrometer的自动配置,所以我们需要在SprintBoot项目中对应的pom.xml文件引spring-boot-starter-actuator)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.配置Actuator可对外,在项目对应的application.properties配置文件中添加如下配置
#这里暂时就配置成所有啦,实际项目中根据实际需要配置
management.endpoints.web.exposure.include=*
3.配置完启动应用的服务,浏览器访问 /actiator 可以看到Actuator提供的所有监控
4.访问/actuator/metrics可以看到Actuator默认收集的监控指标,可以看到JVM相关的指标都可以收集到
5.引入micrometer-registry-prometheus(Micrometer库支持Prometheus,Micrometer提PrometheusMeterRegistry注册表,用于将指标转为Prometheus格式的指标,所以我们需要在SprintBoot项目中对应的pom.xml文件引 micrometer-registry-prometheus)
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
6.在application.properties中配置暴露Prometheus,并允许将收集到的指标导入到Prometheus中
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
7.配置prometheus.yml并重启Prometheus容器
- job_name: 'JVM'
metrics_path: /actuator/prometheus
static_configs:
- targets: ['应用服务器IP:8088']
8.Grafana导入模版(4701)
9.查看监控效果
遇到的问题
- 第一次执行 sudo yum install docker-ce 安装docker抱错
- 压力机通过rz命令上传Jmeter压缩包到服务器乱码
- 执行 jmeter -v 命令验证Jmeter是否安装成功出现权限问题
- InfluxDB安装后执行influx进入抱错
- 通过influx v1 shell进入InfluxDB操作提示无授权
- Jmeter添加后台监听器后执行脚本总是报错
- Grafana配置InfluxDB数据源没有成功
- Grafana与InfluxDB集成后使用之前的模块可视化数据报错
以上问题都是这次搭建环境所踩的坑。
到这里性能监控环境就搭建完成啦,由于目前SprintBoot完整的项目还在准备中,这里还缺少这一部分配置和集成的工作。后续这套性能监控环境还会集成链路追踪和报警策略,后面就不像现在写的这么细啦,会在这篇文章的基础上继续更新,大家喜欢就收藏吧。
大家喜欢就收藏吧,也欢迎分享给身边的同事一起学习。
相关推荐
- eino v0.4.5版本深度解析:接口类型处理优化与错误机制全面升级
-
近日,eino框架发布了v0.4.5版本,该版本在错误处理、类型安全、流处理机制以及代理配置注释等方面进行了多项优化与修复。本次更新共包含6个提交,涉及10个文件的修改,由2位贡献者共同完成。本文将详...
- SpringBoot异常处理_springboot异常注解
-
在SpringBoot中,异常处理是构建健壮、可维护Web应用的关键部分。良好的异常处理机制可以统一返回格式、提升用户体验、便于调试和监控。以下是SpringBoot中处理异常的完整指...
- Jenkins运维之路(Jenkins流水线改造Day02-1-容器项目)
-
这回对线上容器服务器的流水线进行了一定的改造来满足目前线上的需求,还是会将所有的自动化脚本都放置到代码库中统一管理,我感觉一章不一定写的完,所以先给标题加了个-1,话不多说开干1.本次流水线的流程设计...
- 告别宕机!零基础搭建服务器监控告警系统!小白也能学会!
-
前言本文将带你从零开始,一步步搭建一个完整的服务器指标监控与邮件告警系统,使用的技术栈均为业界主流、稳定可靠的开源工具:Prometheus:云原生时代的监控王者,擅长指标采集与告警规则定义Node_...
- httprunner实战接口测试笔记,拿走不谢
-
每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试码同学抖音号:小码哥聊软件测试01开始安装跟创建项目pipinstallhttprunne...
- 基于JMeter的性能压测平台实现_jmeter压测方案
-
这篇文章已经是两年前写的,短短两年时间,JMeter开源应用技术的发展已经是翻天覆地,最初由github开源项目zyanycall/stressTestPlatform形成的这款测试工具也开始慢...
- 12K+ Star!新一代的开源持续测试工具!
-
大家好,我是Java陈序员。在企业软件研发的持续交付流程中,测试环节往往是影响效率的关键瓶颈,用例管理混乱、接口调试复杂、团队协作不畅、与DevOps流程脱节等问题都能影响软件交付。今天,给大家...
- Spring Boot3 中分库分表之后如何合并查询
-
在当今互联网应用飞速发展的时代,数据量呈爆发式增长。对于互联网软件开发人员而言,如何高效管理和查询海量数据成为了一项关键挑战。分库分表技术应运而生,它能有效缓解单库单表数据量过大带来的性能瓶颈。而在...
- 离线在docker镜像方式部署ragflow0.17.2
-
经常项目上会出现不能连外网的情况,要怎么使用ragflow镜像部署呢,这里提供详细的步骤。1、下载基础镜像根据docker-compose-base.yml及docker-compose.yml中的i...
- 看,教你手写一个最简单的SpringBoot Starter
-
何为Starter?想必大家都使用过SpringBoot,在SpringBoot项目中,使用最多的无非就是各种各样的Starter了。那何为Starter呢?你可以理解为一个可拔插式...
- 《群星stellaris》军事基地跳出怎么办?解决方法一览
-
《群星stellaris》军事基地跳出情况有些小伙伴出现过这种情况,究竟该怎么解决呢?玩家“gmjdadk”分享的自己的解决方法,看看能不能解决。我用英文原版、德语、法语和俄语四个版本对比了一下,结果...
- 数据开发工具dbt手拉手教程-03.定义数据源模型
-
本章节介绍在dbt项目中,如何定义数据源模型。定义并引入数据源通过Extract和Load方式加载到仓库中的数据,可以使用dbt中的sources组件进行定义和描述。通过在dbt中将这些数据集(表)声...
- docker compose 常用命令手册_docker-compose init
-
以下是DockerCompose常用命令手册,按生命周期管理、服务运维、构建配置、扩缩容、调试工具分类,附带参数解析、示例和关键说明,覆盖多容器编排核心场景:一、生命周期管理(核心命令...
- RagFlow与DeepSeek R1本地知识库搭建详细步骤及代码实现
-
一、环境准备硬件要求独立显卡(建议NVIDIAGPU,8GB显存以上)内存16GB以上,推荐32GB(处理大规模文档时更高效)SSD硬盘(加速文档解析与检索)软件安装bash#必装组件Docker...
- Docker Compose 配置更新指南_docker-compose配置
-
高效管理容器配置变更的最佳实践方法重启范围保留数据卷适用场景docker-composeup-d变更的服务常规配置更新--force-recreate指定/所有服务强制重建down→up流程...
- 一周热门
-
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
飞牛OS入门安装遇到问题,如何解决?
-
系统C盘清理:微信PC端文件清理,扩大C盘可用空间步骤
-
10款高性能NAS丨双十一必看,轻松搞定虚拟机、Docker、软路由
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)