負荷テストツールVegeta学習2:Vegetaを書いてみる
はじめに
こんにちは、DevOps推進部2グループの李です。前回はVegetaの概要とインストールの方法について紹介しました。実際にVegetaのコードの書き方について詳しく説明していきたいと思います。VegetaはコマンドプロンプトとPowerShellのどちらでも開発できますが、本記事ではPowerShellを使用したいと思います。
下記が今回使用するソフトウェアです。
Go 1.21.6: https://go.dev/dl/
Vegeta 12.11.1 https://github.com/tsenart/vegeta
今回は連載2回目としてコマンドの書き方と実行方法を紹介したいと思います。
連載目次
負荷テストツールVegeta学習2:Vegetaを書いてみる(今回)
テスト対象
今回のテスト対象は、無償で利用可能なオープンソースの天気APIです。このAPIを利用すると、世界中のさまざまな場所の天気情報を取得できます。さらに、ログインや認証が不要で手軽に利用できます。詳細については、以下のURLで提供されているドキュメントをご参照ください。
公式サイト:https://open-meteo.com/
初めてのVegeta
Vegetaのコードを実際に書く前に、まず「vegeta_practice」という名前のフォルダを任意の場所に作成してください。その後、PowerShell ISEを開き、作成したフォルダを開いて以下のコードを入力してください。
echo "GET https://open-meteo.com/" | vegeta attack -rate=10 -duration=5s -workers=10 -output results.bin
vegeta report results.bin
上記コードの解説:
echoの後ろにアクセス目標サイトとアクセス方法を記載して、「vegeta attack」はアクセスを開始するVegetaのコマンドで、以下のオプションを指定しています:
-rate=10: リクエストレートを1秒あたり10リクエストに設定します。
-duration=5s:負荷テストを5秒間続けます。
-workers=10:10の並行ユーザを使用してアクセスを実行します。
--output results.bin:結果を results.bin ファイルに保存します。
2行目のvegeta report は、指定された負荷テストの結果を表示するVegetaのコマンドです。results.bin ファイルは、アクセスの結果が保存されたバイナリファイルです。 このコマンドを実行すると、指定されたURLに対して1秒あたり10リクエストを行う負荷テストが5秒間実行され、その結果が results.bin ファイルに保存されます。
レポートを出力
「vegeta report results.bin」を使用するとサマリーが表示されますが、reportの後にtypeパラメータを追加すると、さまざまなタイプのレポートを生成できます。たとえば、2行目の「vegeta report results.bin」を以下のように修正すると、ヒストグラムが表示されます。
vegeta report -type='hist[0,100ms,200ms,300ms,400ms,500ms,600ms,700ms,800ms]' results.bin
以下は、コードの各部分の説明です。 vegeta report: 負荷テストの結果を表示するVegetaのコマンドです。
-type='hist[0,100ms,200ms,300ms,400ms,500ms,600ms,700ms,800ms]': 表示形式を指定するオプションで、ヒストグラムを指定しています。このヒストグラムは、応答時間の範囲ごとにリクエストのカウントを示します。
hist[0,100ms,200ms,300ms,400ms,500ms,600ms,700ms,800ms] は、ヒストグラムのビン(範囲)を定義しています。例えば、0から100ミリ秒の範囲、100から200ミリ秒の範囲、といった具体的な範囲を指定しています。
このコマンドを実行すると、指定されたヒストグラム形式で結果が表示されます。各範囲ごとにリクエストのカウントが表示され、サーバーの応答時間に関する分布が視覚的に分かります。
ヒストグラム以外にも、さまざまな出力方法がありますので、気になる方はぜひ試してみてください。
-type=text:デフォルトの出力形式で、秒間リクエスト、スループット、レスポンス時間などの情報が表示されます。
-type=json:情報をJSON形式で出力します。
-type=hist:ヒストグラムを出力します。
-type=hdrplot:各リクエストの結果を一覧で表示します。
グラフを出力
テキストベースの出力以外にも、直接HTMLファイルにグラフを出力することができます。先に示したコードを改行し、3行目に以下のコードを挿入してください。
vegeta plot -title="Response time" results.bin > plot.html
上記のコードは、Vegetaツールを使用して実行した負荷テストの結果データを可視化するためのコマンドです。以下は、コードの各部分の説明です。
vegeta plot: 負荷テストの結果データをプロットするVegetaのコマンドです。
-title="Response time": プロットのタイトルを指定するオプションです。この場合、「Response time」というタイトルが指定されています。
results.bin: 負荷テストの結果が保存されたバイナリファイルです。
plot.html: プロットした結果を plot.html というHTMLファイルに保存するリダイレクションです。
このコードを実行すると、Vegetaはresults.binに保存されたデータを使用してプロットを生成し、その結果をHTMLファイルに保存します。生成されたHTMLファイルはグラフで実行結果を確認できます。
次回のお知らせ
今回はVegetaの基本的な書き方について紹介しました。いかがですか?VegetaはPowerShellでコマンドを直接操作することができ、思ったより簡単です!興味がある方は是非Vegetaのドキュメントを確認してみてください。 次回はVegetaのパラメータについて紹介したいと思います。
最後までお読みいただきありがとうございました。また次回の記事でお会いしましょう!
参考資料:
無料天気API:https://open-meteo.com/
Vegetaのドキュメント:https://github.com/tsenart/vegeta
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのClément Hélardot