文章首發於 軟測小生 歡迎來一塊兒交流。html
前言
在這篇博客文章中,將分享JMeter > Prometheus(InfluxDB) > Grafana的集成,以及Nginx端口反向代理各服務的端口。linux
在JMeter插件庫中,有一些後端監聽器可供Kafka、ElasticSearch和Azure使用。默認狀況下,JMeter支持Graphite和InfluxDB。可是Prometheus沒有後端監聽器。nginx
幸運的是,找到了這個優秀的開源項目來爲Prometheus導出JMeter指標,感謝Jeff Ohrstrom。git
關於集成的流程圖以下:
流程以下:
github
如上圖所示: JMeter + Prometheus(InfluxDB)插件將JMeter指標導出到Prometheus(InfluxDB)數據庫. 若是想要將數據可視化,那就須要在Grafana中配置數據源。
這個插件的主要目的是將結果導出到數據庫(Prometheus)。web
Prometheus是一個開源的系統監控和報警工具包,最初是在SoundCloud開發的。
中文名普羅米修斯,可想而知該工具的意義非凡,不知道普羅米修斯的自行補課去,哈哈哈。docker
InfluxDB是一個用於存儲和分析時間序列數據的開源數據庫。數據庫
Grafana是大多數 數據庫的開源分析和監控解決方案後端
它是一個開源項目,該插件的工做是將JMeter運行的後的指標數據導出到Prometheus。centos
一、Apache JMeter
二、JMeter-Prometheus Plugin
三、Prometheus
四、InfluxDB
五、Grafana
Aliyun安裝docker
sudo yum install docker-ce #因爲repo中默認只開啓stable倉庫,這裏安裝的是最新穩定版17.12.0
sudo yum install <FQPN> # 例如:sudo yum install docker-ce-18.03.1.ce-1.el7.centos
坑:注意阿里雲的e l7是E L7,切勿看錯成數字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的插件的jar包。
很是簡單的方法是從GitHub上下載最新版jmeter-prometheus-plugin-0.6.0.jar文件,並將其放在<JMETER_HOME> libext中,重啓Jmeter便可。
在這裏下載JMeter-Prometheus插件 (GitHub)
在這裏下載JMeter-Prometheus插件 (備用地址:CSDN資源)
經過在JMeter中建立一個簡單的腳原本驗證安裝,而後右擊Thread Group > Add > Listener > Prometheus Listener,以下圖:
或者右鍵點擊Thread Group > Add > Config Element > Prometheus Metrics
###【手動安裝】 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地址] #登陸到主頁查看是否顯示正確
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文件裏面包含了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
進入/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來訪問主頁。
注意上文中提到compose ymal文件中的prometheus部分的Command便可。
如今啓動prometheus對應的容器,打開http://localhost:9090/graph (Nginx:http://localhost/promethers )以下所示:
啓動Prometheus以後,該驗證JMeter測試計劃了。
用幾個線程配置你的線程組,並點擊無限循環運行。
運行JMeter以後打開連接:http://localhost:9270/metrics 將看到信息顯示以下。
若是你看到下面的指標數據,說明一切運行正常。
http://localhost/prometheus (若是使用了Nginx端口代理)
http://localhost:9090 (默認訪問連接,沒有使用Nginx代理)
如上述指標截圖顯示,咱們將看到如何在Prometheus中查看指標。只需複製jvm_classes_loaded並將其粘貼到查詢文本框中,而後按Enter,就能夠看到以下圖的值了:
單擊Graph選項卡查看可視化結果。也能夠自定義想要的可視化方式。下圖顯示了每一個事務的95%響應時間。
若是你不想集成到Grafana,那能夠到此爲止了。
可是Grafana比Prometheus可視化特徵更強大。
接下來配置Grafana從Prometheus獲取指標數據,並建立優雅的可視化視圖。
經過http://localhost:3000啓動Grafana,首次登陸,須要更改密碼。
http://localhost/grafana (若是設置了Nginx端口代理)
將鼠標懸停在 設置 圖標上,而後單擊以下所示的數據源-Data Sources。
單擊Add data source,以下所示:
填寫以下所示的詳細信息並點擊Save & Test:
URL處填寫Prometheus的地址。
驗證Grafana中的Prometheus數據來源
將鼠標懸停在「探索--Explore」圖標上,而後單擊它。
輸入jmeter_threads{}並點擊進入查詢文本框。若是配置正確,將看到圖形。
請注意,你的JMeter測試仍然在運行,若是中止,須要更改右上角的時間選擇器中的值。
將鼠標懸停在「+」圖標上,而後單擊Dashboard
單擊「添加查詢--Add Query」按鈕
將查詢下拉改成Prometheus,以下所示
輸入查詢 jmeter_summary{quantile="0.95"},而後回車。
你也能夠根據須要自定義圖形。
這是個簡單的儀表盤 例子。
進入容器:docker exec -it 容器ID /bin/bash
建立數據庫jmeterDB: create database jmeterDB
influxdb容器運行成功後,經過Web瀏覽器訪問http://docker-host-ip:8083訪問influxdb後臺管理,並登陸後臺管理系統(默認用戶名:root, 默認密碼:root)
鏈接influxdb通常用InfluxDB studio
接下來就是使用http://IPAddress:3000去登錄grafana並進行配置了
http://ip/grafana (若是使用Nginx代理)
初始密碼爲:admin/admin,也可在上述的.env文件中進行設置。
首次登錄grafana會要求設置新密碼
登錄到grafana主頁以後,建立新的Data Source:
配置Database,選擇InfluxDB:
填入你的IP地址http://*.*.*.*:8086 (http://*.*.*.*/influxdb #若是使用了Nginx端口代理)
輸入InfluxDB信息,若是沒作更改的話user和pwd都是默認的root, 爲了安全自行修改。
到Dashboards去下載: https://grafana.com/grafana/d...
或者直接訪問:https://grafana.com/grafana/d...
複製該模板的ID 或者URL
到咱們登錄的Grafana主頁去粘貼便可,以下圖
而後能夠進行命名,填入以前建好的DataSource 名字,設置發送時間,保存便可。
而後轉到剛剛建好的主頁,以下圖,右上角能夠設置:
設置界面,可更具你的須要進行設置,好比下面兩個點分別是設置時間顯示和刷新頻率。
接下來就準備運行Jmeter ,生成數據,看看效果。
挑選了一個URL,對其進行簡單的運行並返回數據。
https://mp.weixin.qq.com/s/pz...
其結果以下:
摘自做者之一說明:
插件的另外一點是,它不須要向JMeter控制器發送指標來聚合結果,由於這是由Prometheus自己完成的。
如今,您已經成功地將JMeter與Prometheus和Grafana集成在一塊兒了。若是喜歡Prometheus的可視化,不須要配置Grafana。
可是Grafana具備比Prometheus更強大的可視化功能。
你須要在運行JMeter的任何地方安裝JMeter-Prometheus插件,並將數據流簡化到集中的Prometheus數據庫中,這將幫助你監視運行時指標。
你須要在Grafana中仔細地編寫查詢,不然最終會看到錯誤的指標數據。
另外再介紹一下使用Docker逐步安裝Grafana/ Prometheus /InfluxDB
安裝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
搜索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
搜索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