热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

nginx重启_Grafana+InfluxDB+Jmeter使用Nginx代理搭建可视化性能测试监控平台

文章首发于:软测小生前言在这篇博客文章中,将分享JMeterPrometheus(InfluxDB)Grafana的集成,以及Ngin
00302494ec752ce9a312c8f895e39d43.png

文章首发于:软测小生

前言
在这篇博客文章中,将分享JMeter > Prometheus(InfluxDB) > Grafana的集成,以及Nginx端口反向代理各服务的端口。

背景

在JMeter插件库中,有一些后端监听器可供Kafka、ElasticSearch和Azure使用。默认情况下,JMeter支持Graphite和InfluxDB。但是Prometheus没有后端监听器。

幸运的是,找到了这个优秀的开源项目来为Prometheus导出JMeter指标,感谢Jeff Ohrstrom。

关于集成的流程图如下:

3f6d152baa22cb7277c0c25de02d9fcc.png

流程如下:

91daef36a3cd4bb8f9a0fe3d1ea487c0.png

如上图所示: JMeter + Prometheus(InfluxDB)插件将JMeter指标导出到Prometheus(InfluxDB)数据库. 如果想要将数据可视化,那就需要在Grafana中配置数据源。
这个插件的主要目的是将结果导出到数据库(Prometheus)。

What is Prometheus?

Prometheus是一个开源的系统监控和报警工具包,最初是在SoundCloud开发的。
中文名普罗米修斯,可想而知该工具的意义非凡,不知道普罗米修斯的自行补课去,哈哈哈。

What is InfluxDB?

InfluxDB是一个用于存储和分析时间序列数据的开源数据库。

What is Grafana?

Grafana是大多数 数据库的开源分析和监控解决方案

What is JMeter-Prometheus Plugin?

它是一个开源项目,该插件的工作是将JMeter运行的后的指标数据导出到Prometheus。

先决条件

1、Apache JMeter
2、JMeter-Prometheus Plugin
3、Prometheus
4、InfluxDB
5、Grafana

安装Docker 和 Compose

Aliyun安装docker

sudo yum install docker-ce #由于repo中默认只开启stable仓库,这里安装的是最新稳定版17.12.0
sudo yum install # 例如:sudo yum install docker-ce-18.03.1.ce-1.el7.centos

:注意阿里云的el7是EL7,切勿看错成数字1

AWS linux安装Docker
安装最新的Docker Community Edition程序包
sudo amazon-linux-extras install docker -y

启动Dockers服务
sudo service docker start

将root添加到docker组,以便您能够执行Docker命令,而无需使用sudo,安装完成之后需要重启ssh session。

sudo usermod -a -G docker root

启动Docker

sudo systemctl start docker #
(sudo systemctl enable docker) #开机启动
sudo docker --version #查看Docker版本

安装compose
pip3 install docker-compose

安装JMeter-Prometheus插件

有多种方法可以安装JMeter的插件的jar包。
非常简单的方法是从GitHub上下载最新版jmeter-prometheus-plugin-0.6.0.jar文件,并将其放在 libext中,重启Jmeter即可。
在这里下载JMeter-Prometheus插件 (GitHub)
在这里下载JMeter-Prometheus插件 (备用地址:CSDN资源)

8cb6f2eed2ce7462b35b183a2c254e2c.png

通过在JMeter中创建一个简单的脚本来验证安装,然后右击Thread Group > Add > Listener > Prometheus Listener,如下图:

5b13da827ebda7473bdc05b062f14a7d.png

或者右键点击Thread Group > Add > Config Element > Prometheus Metrics

08f036212f87f218c6e75542d584d72c.png

安装Nginx

sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm (RHEL)
sudo yum install -y epel-release (CentOS) 添加Nginx存储库
sudo yum update -y
sudo yum install nginx -y #安装Nginx
sudo nginx -v #查看Nginx版本
sudo systemctl start nginx (sudo service nginx start) #启动
sudo systemctl enable nginx #系统启动开启
sudo systemctl status nginx #查看状态nginx #启动Nginx
nginx -t #测试配置是否正确
nginx -s reload #重启Nginx
nginx -s stop #Nginx停止服务

nginx安装成功
http://[你的IP地址] #登录到主页查看是否显示正确

f7da7c8c0d43941ba75a41a41fda528f.png

配置Nginx.conf

sudo vi /etc/nginx/nginx.conf #编辑nginx.conf文件
cat /etc/nginx/nginx.conf #查看内容
/usr/share/nginx/html #查看默认主页显示内容

在/etc/nginx目录下配置nginx.conf文件,如果没有,直接touch生成一个新文件。
下面是nginx.conf片段代码,参照更新你的文件即可。

location / {}location /prometheus/ {proxy_pass http://localhost:9090/prometheus/;}location /grafana/ {proxy_pass http://localhost:3000/;}location /influxdb/ {proxy_pass http://localhost:8086/;}

做完以上配置需要重启之后才生效。

nginx -s reload #重启Nginx

docker-compose安装Grafana 、Prometheus(InfluxDB)

文件结构如下:

736b612a39a565d480bb97554994fcaa.png


在这里的docker-compose文件里面包含了Prometheus和InfluxDB,是为了学习和测试两者的区别,在实际使用时选你需要的安装更改下面的yaml文件内容。

docker-compose.yml如下:

version: '3.1'services:nginx:restart: alwaysimage: nginx:latestcontainer_name: nginxports:- "8080:80"- "80:80"- "443:443"volumes:- ~/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro- ./nginx/default.conf:/tmp/default.template- ./opt/dist-generator:/opt/dist-generatorcommand:- '--config.file=/etc/prometheus/prometheus.yml'depends_on:- influxdb- prometheus- grafanainfluxdb:image: influxdb:latestcontainer_name: influxdbports:- "8083:8083"- "8086:8086"- "8090:8090"environment:- INFLUXDB_DB=db0- INFLUXDB_ADMIN_USER=${INFLUXDB_USERNAME}- INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_PASSWORD}volumes:- influxdb-storage:/var/lib/influxdbprometheus:image: prom/prometheuscontainer_name: prometheushostname: prometheusrestart: alwaysvolumes:- ~/test-Grafana_influxDB_Prom/prometheus.yml:/etc/prometheus/prometheus.ymlcommand:- '--config.file=/etc/prometheus/prometheus.yml'- '--web.external-url=http://localhost/prometheus'ports:- "9090:9090"environment:- PROMETHEUS_ADMIN_USER=${PROMETHEUS_USERNAME}- PROMETHEUS_ADMIN_PASSWORD=${PROMETHEUS_PASSWORD}grafana:image: grafana/grafana:latestcontainer_name: grafanaports:- "3000:3000"environment:- GF_SECURITY_ADMIN_USER=${GRAFANA_USERNAME}- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}depends_on:- influxdbuser: "0"volumes:- grafana-storage:/var/lib/grafana- ./grafana-provisioning/:/etc/grafana/provisioning
volumes:influxdb-storage:grafana-storage:

上述的docker-compose.yml需要注意的点是prometheus部分的command,意思是添加子路径,与下文中那个的Grafana添加子路径同理,否则即便设置了Nginx也同样无法访问主页,会报异常。

.env内容如下:

INFLUXDB_USERNAME=admin
INFLUXDB_PASSWORD=adminGRAFANA_USERNAME=admin
GRAFANA_PASSWORD=adminPROMETHEUS_USERNAME=admin
PROMETHEUS_PASSWORD=admin

运行compose命令并安装

docker-compose -f docker-compose.yml up -d

b1e1da9f32e0bd09920c8b151166d887.png

配置Grafana

进入/etc/grafana/grafana.ini 并编辑 grafana.ini设置子路径

a6dce8a6e01cc8dbd0d00b890a820728.png


更改如下:

[server]
domain = example.com
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/
serve_from_sub_path = true

做以上配置之后才能够使用http://localhost:3000/grafana来访问主页。

配置Prometheus

注意上文中提到compose ymal文件中的prometheus部分的Command即可。

打开Prometheus

现在启动prometheus对应的容器,打开http://localhost:9090/graph (Nginx:http://localhost/promethers )如下所示:

e1702e6030d72efd6fcb6cbdcb628074.png

运行 JMeter 测试 (Prometheus)

启动Prometheus之后,该验证JMeter测试计划了。
用几个线程配置你的线程组,并点击无限循环运行。

运行JMeter之后打开链接:http://localhost:9270/metrics 将看到信息显示如下。
如果你看到下面的指标数据,说明一切运行正常。

5a34a91b9104e97f163f060824b3f438.png

在Prometheus中查看JMeter指标

http://localhost/prometheus (如果使用了Nginx端口代理)
http://localhost:9090 (默认访问链接,没有使用Nginx代理)

如上述指标截图显示,我们将看到如何在Prometheus中查看指标。只需复制jvm_classes_loaded并将其粘贴到查询文本框中,然后按Enter,就可以看到如下图的值了:

e6e816e54124a83bb3244de2bd32ad2b.png

单击Graph选项卡查看可视化结果。也可以自定义想要的可视化方式。下图显示了每个事务的95%响应时间。

a74604eab6ed920b581958ee85af54b4.png

Grafana + Prometheus + Jmeter配置

如果你不想集成到Grafana,那可以到此为止了。
但是Grafana比Prometheus可视化特征更强大。
接下来配置Grafana从Prometheus获取指标数据,并创建优雅的可视化视图。

通过http://localhost:3000启动Grafana,首次登录,需要更改密码。

http://localhost/grafana (如果设置了Nginx端口代理)
将鼠标悬停在 设置 图标上,然后单击如下所示的数据源-Data Sources。
8bb2d829417957af8f5ebafa898e9f23.png


单击Add data source,如下所示:

348a75841f99b019c5c3754744eb7c8e.png


填写如下所示的详细信息并点击Save & Test:
URL处填写Prometheus的地址。

5c41ef6bbffcd896a1e4f0481cc70252.png

验证Grafana中的Prometheus数据来源
将鼠标悬停在“探索–Explore”图标上,然后单击它。

319e398b4963c0620301160114adae8e.png

输入*jmeter_threads{}*并点击进入查询文本框。如果配置正确,将看到图形。
请注意,你的JMeter测试仍然在运行,如果停止,需要更改右上角的时间选择器中的值。

bd91a805ef6e2e83e1f851bc786abaa2.png

创建Grafana仪表盘并配置 (Prometheus)

将鼠标悬停在“+”图标上,然后单击Dashboard

0da68f078cabd776c4d6ad1e16a43741.png

单击“添加查询–Add Query”按钮

fa4858e9dd7e74ad426e0211610deef2.png


将查询下拉改为Prometheus,如下所示

f129112262c89daf61bbef2b1df24fd2.png

输入查询 jmeter_summary{quantile=“0.95”},然后回车。
你也可以根据需要自定义图形。

1de0a0bca39c9aacf66ba66c4ac50a9a.png


这是个简单的仪表盘 例子。

97a29efff99f071b5a2dcc817186e7c1.png

Grafana + InfluxDB + Jmeter配置:

新建DB (InfluxDB)

进入容器:docker exec -it 容器ID /bin/bash
创建数据库jmeterDB: create database jmeterDB

fece3398d39d7fd79f810a7ff3bb61bc.png


influxdb容器运行成功后,通过Web浏览器访问http://docker-host-ip:8083访问influxdb后台管理,并登录后台管理系统(默认用户名:root, 默认密码:root)

连接influxdb一般用InfluxDB studio

创建Grafana仪表盘并配置 (InfluxDB)

接下来就是使用http://IPAddress:3000去登陆grafana并进行配置了

http://ip/grafana (如果使用Nginx代理)

初始密码为:admin/admin,也可在上述的.env文件中进行设置。
首次登陆grafana会要求设置新密码

a5ae6f3f727a2e06710a9ed986a8c4ad.png

登陆到grafana主页之后,创建新的Data Source:

83e88dd910c1f29fd4b561f017dc22d9.png


配置Database,选择InfluxDB:

d4f670a3c6f166ab2d66182ad7df89cf.png


填入你的IP地址http://*.*.*.*:8086 (http://*.*.*.*/influxdb #如果使用了Nginx端口代理)

572483bb39a156077fb9cb86720fd9a0.png


输入InfluxDB信息,如果没做更改的话user和pwd都是默认的root, 为了安全自行修改。

0eefcd65298ec25fb4b2eb0f778db766.png
178f0395abe08faa738fbb5f6dcf5f65.png

Grafana Dashboards导入InfluxDB Jmeter模板

到Dashboards去下载: https://grafana.com/grafana/dashboards

866056150014271444708b05504f8120.png

或者直接访问:https://grafana.com/grafana/dashboards/5496
复制该模板的ID 或者URL

aab04069bfca0e555699d093f3a9fad2.png


到我们登陆的Grafana主页去粘贴即可,如下图

bd35901d1a17dc90d86c1b802c15d6a6.png


然后可以进行命名,填入之前建好的DataSource 名字,设置发送时间,保存即可。

6b44ca6fecb6f6ca0e5280125cacb2a0.png


然后转到刚刚建好的主页,如下图,右上角可以设置:

22a6dcbc1c95b5ce8d12847a68840d43.png


设置界面,可更具你的需要进行设置,比如下面两个点分别是设置时间显示和刷新频率。

1edaea1e77d963ec65ddef1b75113d8c.png

接下来就准备运行Jmeter ,生成数据,看看效果。
挑选了一个URL,对其进行简单的运行并返回数据。https://mp.weixin.qq.com/s/pzsE326aPk-4iPhfBC52sQ

503d90f5fc7d8dd06f95da1f6adcdd7d.png
815a26a6cc70a1c352697ecc3405faf2.png
4846c6cb0e3092760e34720a98cc5b04.png


其结果如下:

e09adccb2d15da9e20e98f9de8206fb5.png

摘自作者之一说明:

插件的另一点是,它不需要向JMeter控制器发送指标来聚合结果,因为这是由Prometheus本身完成的。

总结:

现在,您已经成功地将JMeter与Prometheus和Grafana集成在一起了。如果喜欢Prometheus的可视化,不需要配置Grafana。
但是Grafana具有比Prometheus更强大的可视化功能。
你需要在运行JMeter的任何地方安装JMeter-Prometheus插件,并将数据流简化到集中的Prometheus数据库中,这将帮助你监视运行时指标。

你需要在Grafana中仔细地编写查询,否则最终会看到错误的指标数据。

附录:

另外再介绍一下使用Docker逐步安装Grafana/ Prometheus /InfluxDB

Docker 安装 Prometheus

安装Prometheus非常简单。下载适用于您的操作系统的Prometheus并解压缩内容并准备就绪。
稍后,我们将启动Prometheus。
搜索Prometheus:docker search Prometheus
拉取Prometheus镜像:docker pull prom/prometheus
查看镜像Images: docker images
运行Prometheus容器:docker run --name my_PrometheusName -p 9090:9090 Prometheus
查看运行的容器Container:docker ps -a
进入容器:docker exec -it 容器ID /bin/bash
创建数据库jmeterDB: create database jmeterDB

Docker安装 InfluxDB

搜索influx:docker search influx
拉取influxdb镜像:docker pull influxdb
查看镜像Images: docker images
运行influxdb容器:docker run --name my_influxdbName -p 8086:8086 influxdb
查看运行的容器Container:docker ps -a

Docker安装 Grafana

搜索grafana:docker search grafana
拉取grafana镜像:docker pull grafana/grafana
运行容器:docker run --name my_grafana -p 3000:3000 grafana/grafana
然后查看状态
docker ps -a 查看当前运行的实例
退出来再次启动即可
docker start ContainerID



推荐阅读
  • 本书《.NET Core 2.* 开发者指南》是面向开发者的全面学习与实践手册,涵盖了从基础到高级的各个层面。书中详细解析了 .NET Core 的核心概念,包括如何创建 .NET Core 网站,并通过视频教程直观展示操作过程。此外,还深入探讨了 Startup 类的作用、项目目录结构的组织方式以及如何在应用中使用静态文件等内容。对于希望深入了解 .NET Core 架构和开发技巧的开发者来说,本书提供了丰富的实践案例和详尽的技术指导。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 16.04 系统上配置 Qt 5.5 的交叉编译环境,特别针对 i.MX6 平台进行了优化设置。内容涵盖从基本的软件安装到高级配置的全过程。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 深入体验Python的高级交互式Shell - IPython
    IPython 是一个增强型的 Python 交互式 Shell,提供了比标准 Python 控制台更为强大的功能,适用于开发和调试过程。它不仅支持直接执行 Linux 命令,还提供了丰富的特性来提高编程效率。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • Centos7 Tomcat9 安装笔记
    centos7,tom ... [详细]
  • Ubuntu 环境下配置 LAMP 服务器
    本文详细介绍了如何在 Ubuntu 系统上安装和配置 LAMP(Linux、Apache、MySQL 和 PHP)服务器。包括 Apache 的安装、PHP 的配置以及 MySQL 数据库的设置,确保读者能够顺利搭建完整的 Web 开发环境。 ... [详细]
  • 文章目录python包-requests关于requests包安装和使用pythonrequests请求超时设置工作中遇到的常见问题整理访问https网站,报错cer ... [详细]
  • 中文分词器elasticsearchanalysisik下载及安装教程
    注意:elasticsearch-analysis-ik的版本最好与elasticsearch版本一致1,下载Releasesmedclelasti ... [详细]
  • 「驭龙」开源主机入侵检测系统了解一下
    「驭龙」开源主机入侵检测系统了解一下 ... [详细]
author-avatar
皮皮美2_160
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有