程序员开发实例大全宝库

网站首页 > 编程文章 正文

性能监控平台环境搭建(二)

zazugpt 2025-05-23 21:27:52 编程文章 3 ℃ 0 评论

前言

在上一篇《压测监控平台环境搭建》中主要写了关于常用的性能监控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环境

  1. 上传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

  1. 在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

  1. 下载镜像

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

  1. 登陆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.查看监控效果

遇到的问题

  1. 第一次执行 sudo yum install docker-ce 安装docker抱错
  2. 压力机通过rz命令上传Jmeter压缩包到服务器乱码
  3. 执行 jmeter -v 命令验证Jmeter是否安装成功出现权限问题
  4. InfluxDB安装后执行influx进入抱错
  5. 通过influx v1 shell进入InfluxDB操作提示无授权
  6. Jmeter添加后台监听器后执行脚本总是报错
  7. Grafana配置InfluxDB数据源没有成功
  8. Grafana与InfluxDB集成后使用之前的模块可视化数据报错

以上问题都是这次搭建环境所踩的坑。

到这里性能监控环境就搭建完成啦,由于目前SprintBoot完整的项目还在准备中,这里还缺少这一部分配置和集成的工作。后续这套性能监控环境还会集成链路追踪和报警策略,后面就不像现在写的这么细啦,会在这篇文章的基础上继续更新,大家喜欢就收藏吧。

大家喜欢就收藏吧,也欢迎分享给身边的同事一起学习。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表