8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

負荷試験ツールVegetaを試してみた

Posted at

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

ブラウザで開くと png画像のダウンロードができる。
vegeta-plot.png

リアルタイムで負荷試験中の状態が見たい!!

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秒間落とした後に再起動させた。
realTimeReport.gif

まとめ

シンプルな実行方法だったりグラフが出力できたり、なかなか使いやすいと思う。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?