apache bench(ab)コマンドをRubyで拡張できるab-mrubyのDockerイメージを公開

ab-mrubyとはapache bench(abコマンド)のパラメータ設定や、ベンチマーク結果のテストをRubyで書けるベンチマークツールです。今回はそのab-mrubyコマンドのDockerイメージを作りました。

僕みたいにabコマンドを毎日のように使うエンジニアにとっては、ab-mrubyはそれなりに有用だと思っていたのですが、mrubyをビルドしたりaprを使ってabをビルドしたりいまいち使いにくいなぁと思っていました。しかしそれがDockerの登場によって面倒な所はほとんどラッパーできるようになり、ab-mrubyのDockerイメージを作る事によって必要な部分だけを弄ってすぐにab-mrubyを使えるようにしました。

自身のクライアントPCにDockerを入れるのは気軽にできると思うので是非一度遊んでみてください。

ab-mrubyについてご存じない方は以下のエントリを御覧ください。

最新のab-mrubyはGitHubにて公開しています。

簡単な使い方

ab-mrubyに関しては、上記のエントリに書いているので、今回は簡単な使い方の説明のみにします。

まずはab-mrubyのDockerイメージをDocker Hubからpullして下さい。

[program lang=”bash” escaped=”true”]

sudo docker pull matsumotory/ab-mruby

[/program]

そして、実際に実行してみましょう。docker runコマンドに加えて最後の引数にURLを指定してやるだけでab-mrubyを試すことができます。

[program lang=”bash” escaped=”true”]

$ sudo docker run matsumotory/ab-mruby https://blog.matsumoto-r.jp/
======================================================================
This is ab-mruby using ApacheBench Version 2.3 <$Revision: 1430300 $>
Licensed to MATSUMOTO Ryosuke, https://github.com/matsumoto-r/ab-mruby

                          CONFIG PHASE

======================================================================
  Target Information  URL: https://blog.matsumoto-r.jp/
  Target Information HOST: blog.matsumoto-r.jp
  Target Information PORT: 80
  Target Information PATH: /
  Target Information  SSL: false
======================================================================
This is ab-mruby using ApacheBench Version 2.3 <$Revision: 1430300 $>
Licensed to MATSUMOTO Ryosuke, https://github.com/matsumoto-r/ab-mruby

                            TEST PHASE

======================================================================
[TEST CASE] [true] FailedRequests (0) should be 0
[TEST CASE] [true] WriteErrors (0) should be 0
[TEST CASE] [true] CompleteRequests (100) should be 100
[TEST CASE] [true] TransferRate (1179.60901260841) should be over 500
[TEST CASE] [false] RequestPerSecond (18.4716961893629) should be over 1000
[TEST CASE] [true] TimePerRequest (54.1368799999999) should be under 100
[TEST CASE] [true] TimePerConcurrentRequest (541.368799999999) should be under 3000
[TEST CASE] [true] ConnetcErrors (0) should be 0
[TEST CASE] [true] ReceiveErrors (0) should be 0
[TEST CASE] [true] LengthErrors (0) should be 0
[TEST CASE] [true] ExceptionsErrors (0) should be 0
[TEST CASE] [true] Non2xxResponses (0) should be 0

test suites: [false]

[/program]

すると、予めRubyで記述したベンチマークパラメータとテストケースによって実行されたベンチマークとテストの結果が得られます。おおおお、RequestPerSecondがテストケースの値より低く出ているのでテストが失敗していますねー、とかがわかります。

Rubyでベンチマークパラメータやテストを書いて自分専用のDockerイメージを作る

ab-mrubyのDockerイメージはab-mruby/docker/ディレクトリ以下のRubyで書かれたベンチマークパラメータとテストケースのサンプルを元に実行されています。それらを自分なりに変更したい場合は、

[program lang=”bash” escaped=”true”]

git clone https://github.com/matsumoto-r/ab-mruby.git
cd ab-mruby
vi docker/ab-mruby.conf.rb
vi docker/ab-mruby.test.rb
sudo docker build -t local/ab-mruby .
sudo docker run local/ab-mruby https://blog.matsumoto-r.jp/

[/program]

ab-mruby.conf.rbにベンチマークパラメータを、ab-mruby.test.rbにテストケースを書くと、自分なりのベンチマークパラメータやテストケースを反映した自分専用のDockerイメージを作成する事ができます。自由にGitHubからforkして頂き、そこからDocker Hubと連携してベンチマークイメージを作るのも良いと思います。

書き方は、

上記に上げたab-mrubyに関するエントリやab-mrubyのGitHubレポジトリを参考にして下さい。

ab-mrubyのDockerイメージを使って有意義なベンチマークライフを過ごしてみてはいかがでしょうか!