Floodを使ってみる

前々からどんな感じだろうかと思っていた Flood を軽く使ってみたので、
その時のメモです。

Floodって?

簡易なHTTPリクエストの負荷生成ツールとでも言えばいいでしょうか。


Floodのトップページはこちら。→Flood


Apache ProjectのツールだとabとかJMeterが有名なんではないかと思います。


が、しかし

  • abは楽だが単一URLのリクエストのみ可能
  • JMeterはちゃんと使おうとすると設定が結構大変


そんなこともあり、試しに使ってみることにしました。

インストールする

インストールはソースファイルをコンパイルします。
マニュアルがあるので、こちらを参考にやっていきます。


ちなみにCentOS4.8にインストールしました。


ここにソースファイルはあったのですが、
こっちをコンパイルしようとしたところ、以下のようなメッセージが出て、どうもうまくいきませんでした。

 # make
 build/rules.mk:57: /build/config_vars.mk: No such file or directory
 make: *** No rule to make target `/build/config_vars.mk'.  Stop.


ということもあり、リポジトリからソースファイルをダウンロード。
aprとapr-utilはマニュアル上はソースコード配下に置きましょうということでしたが、
こっちも今一つうまくいかなかったので、公式サイトから最新のtar.gzファイルをダウンロードしました。


以下、手順。
/usr/local/src 以下にソースファイルをダウンロードしておきます。
インストールするソフトは /usr/local/flood 以下にディレクトリを個別に切っていく形にします。

ソースファイルのダウンロード
 # svn co http://svn.apache.org/repos/asf/httpd/flood/trunk flood
 # wget http://www.apache.org/dist/apr/apr-1.4.2.tar.gz
 # wget http://www.apache.org/dist/apr/apr-util-1.3.9.tar.gz 


flood本体はリポジトリから。

aprのインストール
 # cd /usr/local/src
 # tar -xvzf apr-1.4.2.tar.gz
 # cd apr-1.4.2
 # ./configure --prefix=/usr/local/flood/apr-1.4.2
 # make
 # make install
apr-utilのインストール
 # cd /usr/local/src
 # tar -xvzf apr-util-1.3.9.tar.gz
 # cd apr-util-1.3.9
 # ./configure --prefix=/usr/local/flood/apr-util-1.3.9 --with-apr=/usr/local/flood/apr-1.4.2
 # make
 # make install 
Floodのインストール

一旦SSLを有効にしておきます。

 # cd /usr/local/src/flood
 # ./buildconf
 # ./configure --prefix=/usr/local/flood/flood --with-apr=/usr/local/flood/apr-1.4.2 \
   --with-apr-util=/usr/local/flood/apr-util-1.3.9 --enable-ssl --disable-shared
 # make all
 # make install 

軽く使ってみる

Floodの設定ファイルはXML形式で書いていきます。
ソースファイルの中の「CONFIG」や「example」ディレクトリ以下の各種サンプルを参考にします。
ここの「Example profiles」にもほぼ同様の内容が出ています。


今回は「example」ディレクトリ以下の「round-robin-example.xml」をベースに編集しました。


作成した設定ファイルはこんな感じです。

<?xml version="1.0"?>
<!DOCTYPE flood SYSTEM "flood.dtd">
<flood configversion="1">
  <urllist>
    <name>Sample Url List</name>
    <description>Flood Sample</description>
    <url method="GET">http://xxx.xxx.xxx.xxx/index.html</url>
    <url method="GET">http://xxx.xxx.xxx.xxx/index2.html</url>
    <url method="GET">http://xxx.xxx.xxx.xxx/index3.html</url>
  </urllist>

  <profile>
    <name>Example Profile</name>
    <description>Flood Sample</description>
    <useurllist>Sample Url List</useurllist>
    <profiletype>round_robin</profiletype>
    <socket>generic</socket>
    <verify_resp>verify_200</verify_resp>
    <report>relative_times</report>
  </profile>

  <farmer>
    <name>Sample Farmer</name>
    <count>100</count>
    <useprofile>Example Profile</useprofile>
  </farmer>

  <farm>
    <name>Bingo</name>
    <usefarmer count="100" startcount="10" startdelay="1">Sample Farmer</usefarmer>
  </farm>
  <seed>1</seed>
</flood>


要注意なのが、「farm」の「name」です。"Bingo"のままにしとかないとダメです。


で、実行。

 # /usr/local/flood/flood/bin/flood round-robin.xml > sample.out


このようなログが出力されます。

 1275980910827683 1275980910827761 1275980910828157 1275980910828183 1275980910828318 OK -1229743200 http://xxx.xxx.xxx.xxx/index.html
 1275980910828356 1275980910828443 1275980910828834 1275980910828864 1275980910828977 OK -1229743200 http://xxx.xxx.xxx.xxx/index2.html
 1275980910829019 1275980910829095 1275980910829546 1275980910829582 1275980910829678 OK -1229743200 http://xxx.xxx.xxx.xxx/index3.html


ソースファイルの「example」ディレクトリに簡易にログを解析できるスクリプトが入っています。


以下のようにすると簡易な解析結果が出力されます。

 # /usr/local/src/flood/examples/analyze-relative test.out

 Slowest pages on average (worst 5):
    Average times (sec)
 connect write   read    close   hits    URL
 0.0033  0.0049  0.0125  0.0152  10000   http://xxx.xxx.xxx.xxx/index.html
 0.0034  0.0048  0.0112  0.0137  10000   http://xxx.xxx.xxx.xxx/index2.html
 0.0018  0.0043  0.0100  0.0121  10000   http://xxx.xxx.xxx.xxx/index3.html
 Requests: 30000 Time: 4.10 Req/Sec: 10791.94


他にもいくつかサンプルがあるので、こいつらを参考に、今度はもう少し複雑な設定をしてみようかと。
リリース状況見る限り開発止まっている気がしないでもないのですが…。


今日はこんなところで。

参考

以下のサイトがまとまっていたため、参考にさせていただきました。