HTTP負荷テストツールVegetaを試してみた。
Vegeta とは
HTTPの負荷テストツール
Vegeta is a versatile HTTP load testing tool built out of a need to drill HTTP services with a constant request rate.
READMEに惚れたw
CLIとしても使えるし、ライブラリとしても利用することができる。
レポートは、テキスト、JSON、ヒストグラムやグラフで見れたりするみたい。
インストール
READMEのInstall参照
くらえ!!ドドドドッ
(負荷ツールだから、攻撃対象には十分気をつけてね)
以下のコマンドで、http://localhost:8080/zarbon
に向けて
秒間10リクエスト
で5秒間
攻撃し、結果をresult.binに保存する。
$ echo "GET http://localhost:8080/zarbon" | vegeta attack -rate=10 -duration=5s | tee result.bin | vegeta report
結果
Requests [total, rate, throughput] 50, 10.21, 10.21
Duration [total, attack, wait] 4.89908005s, 4.898346546s, 733.504µs
Latencies [mean, 50, 95, 99, max] 1.122139ms, 744.796µs, 2.160273ms, 17.197485ms, 17.197485ms
Bytes In [total, mean] 300, 6.00
Bytes Out [total, mean] 0, 0.00
Success [ratio] 100.00%
Status Codes [code:count] 200:50
レポート
以下を実行した結果を見てみる。
$ echo "GET http://localhost:8080/cell" | vegeta attack -rate=50 -duration=30s -keepalive=false | tee result.bin | vegeta report
エラー発生させたかったのでコマンド実行して10秒後にサーバ落として、15秒間落とした後に再起動させた。
text形式で表示する
$ vegeta report -type=text result.bin
Requests [total, rate, throughput] 1500, 50.03, 21.65
Duration [total, attack, wait] 29.983470356s, 29.981709248s, 1.761108ms
Latencies [mean, 50, 95, 99, max] 1.779667ms, 1.743878ms, 2.243263ms, 3.08067ms, 35.335262ms
Bytes In [total, mean] 684247, 456.16
Bytes Out [total, mean] 0, 0.00
Success [ratio] 43.27%
Status Codes [code:count] 200:649 403:851
Error Set:
403 Forbidden
json形式で表示する
$ vegeta report -type=json result.bin | jq .
{
"latencies": {
"total": 2669501705,
"mean": 1779667,
"50th": 1743878,
"95th": 2243263,
"99th": 3080670,
"max": 35335262
},
"bytes_in": {
"total": 684247,
"mean": 456.1646666666667
},
"bytes_out": {
"total": 0,
"mean": 0
},
"earliest": "2019-12-15T13:08:30.48583379+09:00",
"latest": "2019-12-15T13:09:00.467543038+09:00",
"end": "2019-12-15T13:09:00.469304146+09:00",
"duration": 29981709248,
"wait": 1761108,
"requests": 1500,
"rate": 50.03050318420591,
"throughput": 21.645259614523855,
"success": 0.43266666666666664,
"status_codes": {
"200": 649,
"403": 851
},
"errors": [
"403 Forbidden"
]
}
jqと一緒に使うと見やすい。
ヒストグラム形式で表示する
$ vegeta report -type='hist[0,1ms,2ms,3ms,4ms,5ms]' result.bin
Bucket # % Histogram
[0s, 1ms] 28 1.87% #
[1ms, 2ms] 1231 82.07% #############################################################
[2ms, 3ms] 224 14.93% ###########
[3ms, 4ms] 6 0.40%
[4ms, 5ms] 3 0.20%
[5ms, +Inf] 8 0.53%
グラフをplotしてhtml出力する
$ cat result.bin | vegeta plot > plot.html
リアルタイムで負荷試験中の状態が見たい!!
iTermを使っている場合、jaggrを使ってjplotと連携することでリアルタイムで負荷状況が見れる!
$ echo 'GET http://localhost:8080/cell' | \
vegeta attack -rate 50 -duration 60s -keepalive=false | vegeta encode | \
jaggr @count=rps \
hist\[100,200,300,400,500\]:code \
p25,p50,p95:latency \
sum:bytes_in \
sum:bytes_out | \
jplot rps+code.hist.100+code.hist.200+code.hist.300+code.hist.400+code.hist.500 \
latency.p95+latency.p50+latency.p25 \
bytes_in.sum+bytes_out.sum
エラー発生させたかったので実行して10秒後にサーバ落として、5秒間落とした後に再起動させた。
まとめ
シンプルな実行方法だったりグラフが出力できたり、なかなか使いやすいと思う。