Grafana+Prometheus(InfluxDB)+Jmeter使用Nginx代理搭建可視化性能測試監控平臺

JMeter, Prometheus, and Grafana Integration


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

背景

在JMeter插件庫中,有一些後端監聽器可供Kafka、ElasticSearch和Azure使用。默認情況下,JMeter支持Graphite和InfluxDB。但是Prometheus沒有後端監聽器。

幸運的是,找到了這個優秀的開源項目來爲Prometheus導出JMeter指標,感謝Jeff Ohrstrom。

關於集成的流程圖如下:
JMeter, Prometheus, and Grafana Integration
流程如下:
在這裏插入圖片描述

如上圖所示: 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文件,並將其放在<JMETER_HOME> \lib\ext中,重啓Jmeter即可。
在這裏下載JMeter-Prometheus插件 (GitHub)
在這裏下載JMeter-Prometheus插件 (備用地址:CSDN資源)
安裝JMeter-Prometheus插件

通過在JMeter中創建一個簡單的腳本來驗證安裝,然後右擊Thread Group > Add > Listener > Prometheus Listener,如下圖:
Prometheus Listener

或者右鍵點擊Thread Group > Add > Config Element > Prometheus Metrics
Prometheus Metrics

安裝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地址] #登錄到主頁查看是否顯示正確
在這裏插入圖片描述

配置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)

文件結構如下:
在這裏插入圖片描述
在這裏的docker-compose文件裏面包含了Prometheus和InfluxDB,是爲了學習和測試兩者的區別,在實際使用時選你需要的安裝更改下面的yaml文件內容。

docker-compose.yml如下:

version: '3.1'

services:
 nginx:
   restart: always
   image: nginx:latest
   container_name: nginx
   ports:
     - "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-generator
   command:
     - '--config.file=/etc/prometheus/prometheus.yml'
   depends_on:
     - influxdb
     - prometheus
     - grafana

 influxdb:
   image: influxdb:latest
   container_name: influxdb
   ports:
     - "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/influxdb

 prometheus:
   image: prom/prometheus
   container_name: prometheus
   hostname: prometheus
   restart: always
   volumes:
     - ~/test-Grafana_influxDB_Prom/prometheus.yml:/etc/prometheus/prometheus.yml
   command:
     - '--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:latest
   container_name: grafana
   ports:
     - "3000:3000"
   environment:
     - GF_SECURITY_ADMIN_USER=${GRAFANA_USERNAME}
     - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
   depends_on:
     - influxdb
   user: "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=admin

GRAFANA_USERNAME=admin
GRAFANA_PASSWORD=admin

PROMETHEUS_USERNAME=admin
PROMETHEUS_PASSWORD=admin

運行compose命令並安裝

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

在這裏插入圖片描述

配置Grafana

進入/etc/grafana/grafana.ini 並編輯 grafana.ini設置子路徑
在這裏插入圖片描述
更改如下:

[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 )如下所示:
Prometheus UI

運行 JMeter 測試 (Prometheus)

啓動Prometheus之後,該驗證JMeter測試計劃了。
用幾個線程配置你的線程組,並點擊無限循環運行。

運行JMeter之後打開鏈接:http://localhost:9270/metrics 將看到信息顯示如下。
如果你看到下面的指標數據,說明一切運行正常。
Prometheus Metrics

在Prometheus中查看JMeter指標

http://localhost/prometheus (如果使用了Nginx端口代理)
http://localhost:9090 (默認訪問鏈接,沒有使用Nginx代理)
如上述指標截圖顯示,我們將看到如何在Prometheus中查看指標。只需複製jvm_classes_loaded並將其粘貼到查詢文本框中,然後按Enter,就可以看到如下圖的值了:

Prometheus Query

單擊Graph選項卡查看可視化結果。也可以自定義想要的可視化方式。下圖顯示了每個事務的95%響應時間。
Prometheus Graph

Grafana + Prometheus + Jmeter配置

如果你不想集成到Grafana,那可以到此爲止了。
但是Grafana比Prometheus可視化特徵更強大。
接下來配置Grafana從Prometheus獲取指標數據,並創建優雅的可視化視圖。

通過http://localhost:3000啓動Grafana,首次登錄,需要更改密碼。

http://localhost/grafana (如果設置了Nginx端口代理)
將鼠標懸停在 設置 圖標上,然後單擊如下所示的數據源-Data Sources。

Grafana Data Sources
單擊Add data source,如下所示:

Add Data Source
填寫如下所示的詳細信息並點擊Save & Test:
URL處填寫Prometheus的地址。

Prometheus Data Source

驗證Grafana中的Prometheus數據來源
將鼠標懸停在“探索–Explore”圖標上,然後單擊它。
Explore  Prometheus Data Source

輸入*jmeter_threads{}*並點擊進入查詢文本框。如果配置正確,將看到圖形。
請注意,你的JMeter測試仍然在運行,如果停止,需要更改右上角的時間選擇器中的值。
Prometheus Query in Grafana

創建Grafana儀表盤並配置 (Prometheus)

將鼠標懸停在“+”圖標上,然後單擊Dashboard
Creating Grafana Dashboard

單擊“添加查詢–Add Query”按鈕

Add Query
將查詢下拉改爲Prometheus,如下所示
Prometheus Query

輸入查詢 jmeter_summary{quantile=“0.95”},然後回車。
你也可以根據需要自定義圖形。
Prometheus Query and Graph in Grafana
這是個簡單的儀表盤 例子。

Sample Grafana Dashboard

Grafana + InfluxDB + Jmeter配置:

新建DB (InfluxDB)

進入容器:docker exec -it 容器ID /bin/bash
創建數據庫jmeterDB: create database jmeterDB
創建數據庫
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會要求設置新密碼
在這裏插入圖片描述

登陸到grafana主頁之後,創建新的Data Source:
在這裏插入圖片描述
配置Database,選擇InfluxDB:
InfluxDB
填入你的IP地址http://*.*.*.*:8086 (http://*.*.*.*/influxdb #如果使用了Nginx端口代理)
在這裏插入圖片描述
輸入InfluxDB信息,如果沒做更改的話user和pwd都是默認的root, 爲了安全自行修改。
在這裏插入圖片描述
在這裏插入圖片描述

Grafana Dashboards導入InfluxDB Jmeter模板

到Dashboards去下載: https://grafana.com/grafana/dashboards
在這裏插入圖片描述

或者直接訪問:https://grafana.com/grafana/dashboards/5496
複製該模板的ID 或者URL
在這裏插入圖片描述
到我們登陸的Grafana主頁去粘貼即可,如下圖
在這裏插入圖片描述
然後可以進行命名,填入之前建好的DataSource 名字,設置發送時間,保存即可。
在這裏插入圖片描述
然後轉到剛剛建好的主頁,如下圖,右上角可以設置:
在這裏插入圖片描述
設置界面,可更具你的需要進行設置,比如下面兩個點分別是設置時間顯示和刷新頻率。
在這裏插入圖片描述

接下來就準備運行Jmeter ,生成數據,看看效果。
挑選了一個URL,對其進行簡單的運行並返回數據。
https://mp.weixin.qq.com/s/pzsE326aPk-4iPhfBC52sQ
Jmeter腳本
Jmeter腳本
Jmeter腳本
其結果如下:
在這裏插入圖片描述

摘自作者之一說明:

插件的另一點是,它不需要向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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章