前言
測試一下 新的壓測工具 K6 的用法
K6 文章介紹可參考以下連結
黑暗執行續 - 讓開發人員如沐春風的壓力測試工具 - K6
ithelp - Gary - [Day23][負載測試] K6 基本介紹、安裝及實作,輕鬆上手!
K6 官方網站
本篇紀錄透過 K6 來壓測 API,將結果存到 InfluxDB 並呈現在 Grafana
環境
Linux VM = ubuntu-2004-lts
部屬 Grafana、InfluxDB
Windows 10 (home 20H2)
執行 K6 腳本
安裝 K6
安裝 Grafana
參考 w4560000 - 透過 Docker 建立 Garfana
安裝 InfluxDB
docker run -it -d --name influxdb -p 8086:8086 influxdb:1.8
備註: K6 目前支援到 influxdb:1.8 版本
influxdb v2 版本以上,因為有些 breaking changes,導致 K6 開發團隊沒有把 K6 相容 influxdb v2版本
而是另外開發了擴充版來支援 influx v2
可參考該擴充專案 Github grafana - xk6-output-influxdb
測試的API、壓測 script
建立一支功能單純的 .Net Core API,用以測試
[Route("/")]
[HttpGet]
public async Task<string> Get(int index)
{
await Task.Delay(1000);
string GetTicks = (DateTime.Now.Ticks & 0x11111).ToString("00000");
return $"index:{index}, Concurrency Limiter {GetTicks}, {DateTime.Now:yyyy/MM/dd HH:mm:ss.fff}";
}
K6 Script
import http from 'k6/http';
import exec from 'k6/execution';
export const options = {
vus: 10, //模擬使用者數量
iterations: 20 //模擬執行次數
};
export default function () {
console.log(`exec before ${exec.scenario.iterationInTest}`);
var res = http.get('http://localhost:4000?index=' + exec.scenario.iterationInTest);
console.log(res.status, res.body);
console.log(`exec after ${exec.scenario.iterationInTest}, ${new Date() - new Date(exec.scenario.startTime)}ms`);
}
執行測試,並將結果輸出到 InfluxDB
.\k6 run script.js --out influxdb=http://localhost:8086/k6database
建立 Grafana Dashboard
新增 InfluxDB Data sources
設定 InfluxDB URL
備註: 若是輸入 localhost:8086,Grafana 會一直顯示 InfluxDB Error: Bad Gateway
因目前 Grafana 與 InfluxDB 是在同一台 VM 下透過 Docker 各自建立
沒有特別設定 bridge network,所以會是在預設的 bridge 底下
需要輸入 Influxdb 的內部 IP,Grafana 才呼叫得到
可透過查看 bridge 來確認 Influxdb 目前的 IP Address
docker network inspect bridge
# 輸出
...
"Containers": {
"0a58ad5b0f4d412eb03572c613a41239273fcafa0167fb044077b15aede1fd82": {
"Name": "grafana",
"EndpointID": "31ab29eee04bd83d36e3e078abcd21529bc3fb09c9c2396f397bd51184993a42",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"b989d245650a467fb0ac0189734d249f1a0398e245c0c2124d02e2a5b8afb346": {
"Name": "influxdb",
"EndpointID": "bfbdba5d10dc565d312e183c039d7d5d8f6d3f9ea4d06dd368c4446ff634ae19",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
}
},
...
# 或查看 Influxdb Container IP
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' influxdb
# 輸出
172.17.0.3
匯入 Dashboard
資料來源選擇 InfluxDB
模擬壓測
調整 K6 script,增加測試時間,拉長到60秒
export const options = {
vus: 10, //模擬使用者數量
duration: '60s',
};
執行測試
.\k6 run script.js --out influxdb=http://localhost:8086/k6database
確認壓測結果
參考資料
knoldus - K6 results with InfluxDB and Grafana
ithelp - 雷N - Grafana K6 - 各種負載測試類型
轉載請註明來源,若有任何錯誤或表達不清楚的地方,歡迎在下方評論區留言,也可以來信至 leozheng0621@gmail.com
如果文章對您有幫助,歡迎斗內(donate),請我喝杯咖啡