【Docker】性能測試監控平臺搭建:InfluxDB+Grafana+Jmeter+cAdvisor

前言

在做性能測試時,如果有一個性能測試結果實時展示的頁面,可以極大的提高我們對系統性能表現的掌握程度,進而提高我們的測試效率。但是我們每次打開Jmeter都會有幾個碩大的字提示別用GUI模式進行負載測試,而且它自帶的監視器效果實在一般:在Windows下渲染效果不好,在linux環境(非GUI環境)下更是無法使用,這一點我在如何選擇性能測試工具中有過簡單的描述。

所以,在做性能測試時,爲Jmeter構建一個可視化的監控環境平臺是非常有價值的。這也是這篇博客的目的。

首先我們來看一下最後的成品,監控了TPS、併發、請求成功率、失敗率、請求&接收數據大小、平均響應時長、95%的請求平均響應時長等等。(這裏面的各個板塊都是可自定義配置的,無論多花裏花哨都可以[奸笑臉])

業務服務監控:精確到具體的接口

Mysql監控:精確到具體的查詢函數

Redis監控:精確到具體的cache操作

組件簡介

首先我們一起來簡單瞭解下今天需要用到的這幾個工具。

InfluxDB

一個開源的時序數據庫,使用GO語言開發,特別適合用於處理和分析資源監控數據這種時序相關數據。

cAdvisor

Google用來監測單節點的資源信息的監控工具。Kubernetes中也缺省地將其作爲單節點的資源監控工具,各個節點缺省會被安裝上Cadvisor。

Grafana

一款可視化度量分析和可視化套件,常用於可視化基礎設施和應用程序分析,與Kibana類似,UI更加靈活,且插件豐富。

Jmeter

Apache組織開發的基於Java的壓力測試工具。用於對軟件做壓力測試,它最初被設計用於Web應用測試,但後來擴展到其他測試領域。

鏡像安裝+啓動

雖然直接部署、配置grafana、InfluxDB並不複雜,但是使用docker部署會有更好的環境可移植性,也更簡單,所以選擇使用docker進行部署。

如果我們確定自己想要的鏡像版本,可以直接指定版本執行docker run來運行,從而忽略掉拉取鏡像的過程,本文就是使用的這種方法。

但是有一點需要注意,如果沒有指定鏡像版本直接運行docker rundocker主進程首先會在本地查找,如未發現合適的鏡像,會直接到遠程鏡像倉庫(可以指定私有倉庫)拉取最新版本(tag:latest)。

安裝influxDB

docker run -d \
   -p 8083:8083 \
   -p 8086:8086 \
   --expose 8090 \
   --expose 8099 \
   --name influxsrv \
   tutum/influxdb

安裝cadvisor

docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  -p 8080:8080 \
  --detach=true --link influxsrv:influxsrv \
  --name=cadvisor \
  google/cadvisor:latest \
  -storage_driver=influxdb \
  -storage_driver_db=cadvisor \
  -storage_driver_host=influxsrv:8086

安裝granfana

docker run -d \
  -p 3000:3000 \
  -e INFLUXDB_HOST=localhost \
  -e INFLUXDB_PORT=8086 \
  -e INFLUXDB_NAME=cadvisor \
  -e INFLUXDB_USER=root -e INFLUXDB_PASS=root \
  --link influxsrv:influxsrv \
  --name grafana \
grafana/grafana

各個參數含義

參數 含義
-d 容器在後臺運行
-p 將容器內端口映射到宿主機端口,格式爲 宿主機端口:容器內端口;8083是influxdb的web管理工具端口,8086是influxdb的HTTP API端口
--expose 可以讓容器接受外部傳入的數據
--name 指定容器名稱
--link --link [name/id]:alias, name和id是源容器的name和id,alias是源容器在link下的別名;在--link標籤下,接收容器就是通過設置環境變量和更新/etc/hosts文件來獲取源容器的信息,並與之建立通信和傳遞數據的。
--volume 把一個本地主機的目錄當做數據卷掛載在容器上,[host-dir]:[container-dir]:[rw/ro],掛載點可以讓多個容器共享。
- storage storage_driver/指定數據庫類型、storage_driver_db/指定數據庫實例、storage_driver_host/指定數據庫host

鏡像名稱後面加冒號接tag,能指定docker版本,安裝完成之後執行docker ps會看到下面的信息

也可以執行docker exec -it container-id /bin/bash進入容器內部查看信息,比如我們拉取的grafana鏡像的grafana版本是5.3.4

influxdb配置

登錄influxdb

我們在上面執行了docker run之後,其實服務就已經起來了,所以現在可以直接使用8083這個已經映射好的influxdb的web管理端口進行influxd的配置管理。

直接訪問http://host-ip:8083/進入配置管理界面。點擊配置管理界面右上角的 配置按鈕圖標 進入配置配置管理後臺,使用root/root登錄。

創建cAdvisor應用數據庫

在上圖中我們可以看到influxdb提供了一些查詢/操作數據的語句模版,這對我們這些不太熟悉它的人寫SQL非常有幫助。

比如我們選擇模板CREATE DATABASE,在輸入框會出現CREATE DATABASE "db_name",把db_name 替換成我們的數據源cadvisor,回車,我們的數據庫就創建完成了。接下來我們繼續執行下面的SQL來完成用戶的創建和授權:

CREATE USER "cadvisor" WITH PASSWORD 'cadvisor'
grant all privileges on "cadvisor" to "cadvisor"

執行成功會有 Success! (no results to display) 的提示。

執行docker run 的命令的時候會生成的一串數字

查看cAdvisor信息

其實在上面我們執行docker run安裝cAdvisor的時候,cAdvisor就已經完成了,我們訪問http://host-ip:8080/containers/能看到下面的信息

granfana配置

我們在前面已經完成了grafana的部署啓動,訪問http://host-ip:3000使用admin/admin即可登錄配置管理後臺,如果不想修改密碼可以選擇跳過。

配置Granfana數據源

選擇數據庫類型爲influxdb,host爲http://influxsrv:8086,填寫cadvisor的賬戶密碼:

保存之後,點擊保存並測試:

添加Dashboard

點擊左側的 + 號,選擇Dashboard,選擇graph

進入心界面後,選擇title,選擇編輯

在展示數據配置界面選擇一個數據源,比如內存,點擊保存,即可完成該數據的動態展示:

在配置界面Axes選項卡中配置相關的顯示單位。可以根據實際的情況選擇監控的單位。,因爲我們監控的內存,所以選擇的是相關的單位。

至此, 所有配置步驟完成,簡單配置了兩個圖像:

配置Jmeter監控

是不是很奇怪怎麼說了那麼久還是沒有說到怎麼配置Jmeter的監控?其實做完前面的事情,我們的測試環境就已經搭建完了,在接入數據庫之前我們可以使用前面的方法在influxdb建一張叫Jmeter的表,然後在啓動測試之前選擇添加一個後端監聽器,並選擇爲 influxdb ,數據庫連接配置修改爲我們搭建的真實host就可以運行測試了,數據都會寫入Jmeter這張表,剩下的就是如何配置第一張圖那樣的花裏胡哨的東西把它展示出來:

下圖是我簡單選擇的幾個維度生成的監控圖像,紅框標出的是可以選擇的各種指標,還有一部分沒有羅列出來,可以根據實際情況進行選擇:

總結

前面介紹的都是壓力機的配置,實際上性能測試還需要搭建性能測試環境、進行代碼埋點等,代碼埋點可以通過寫一些公共的類庫,比如在操作redis、DB的方法的封裝中添加;測試環境部署,我們使用的是helm(基於k8s)封裝的方式完成的,可以快速的集成,結合Jenkins快速的完成性能自動化的持續集成。

參考資料:
https://www.jianshu.com/p/21d66ca6115e
https://www.cnblogs.com/51kata/p/5266626.html
https://my.oschina.net/guol/blog/271225
https://blog.csdn.net/smooth00/article/details/79926294
https://www.jianshu.com/p/d078d353d12f

發佈了126 篇原創文章 · 獲贊 7 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章