Tsung を使用して 3 台のサーバから Web サーバに GET リクエストを送ってみました
Tsung の実行環境の準備
Erlang R16B03-1 をインストールしておきます
Tsung のインストール
3 台のサーバそれぞれに下記の手順で Tsung をインストールします
$ sudo aptitude -y install autoconf gnuplot libtemplate-perl
$ git clone https://github.com/processone/tsung.git
$ cd tsung
$ ./configure
$ make && sudo make install
/etc/environment に Erlang の PATH を追加する
slave の Erlang VM を実行するために、下記のファイルの PATH に Erlang の PATH を追加しておきます
/etc/environment
hosts の設定
次に、DNS サーバ、または、それぞれの /etc/hosts にホスト名と IP アドレスを書いおきます
今回は、手元の環境に Unbound がありましたので、下記を追記しました
local-data: "ubuntu1 A 192.168.1.135"
local-data: "ubuntu2 A 192.168.1.131"
local-data: "ubuntu3 A 192.168.1.132"
local-data: "ubuntu4 A 192.168.1.133"
ssh の準備
master の Tsung から slave の Tsung を実行する際には、ssh でアクセスします
そのため、master のサーバから slave のサーバへ、パスワード無しでログインできるようにしておきます
master で passphrase 無しの鍵を作成しておくか、または、ssh-agent を実行したうえで試験をおこないます
設定ファイルの準備
git clone したディレクトリの tsung/examples ディレクトリ内に設定ファイルの例が用意されていますので、
ドキュメントとこの設定例を参考にして負荷試験の内容を XML ファイルに書いていきます
下記の設定ファイルを準備しました
<?xml version="1.0"?>
<!DOCTYPE tsung SYSTEM "/opt/erlang/R16B03-1/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
<clients>
<client host="ubuntu1" use_controller_vm="true" />
<client host="ubuntu2" />
<client host="ubuntu3" />
</clients>
<servers>
<server host="ubuntu4" port="80" type="tcp"></server>
</servers>
<load>
<arrivalphase phase="1" duration="1" unit="minute">
<users interarrival="0.1" unit="second"></users>
</arrivalphase>
</load>
<options>
<option type="ts_http" name="user_agent">
<user_agent probability="100">Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36</user_agent>
</option>
</options>
<sessions>
<session name="http-example" probability="100" type="ts_http">
<request> <http url="/index.html" method="GET" version="1.1" ></http> </request>
</session>
</sessions>
</tsung>
ホスト ubuntu1, ubuntu2, ubuntu3 から ubuntu4 に GET リクエストを送信します
ubuntu4 のサーバには Apache2 をインストールしてあります
実行
master のサーバ上で Tsung を実行します
$ mkdir log
$ tsung -l log -f http.xml start
access.log で確認
ログから、3 つの Tsung からの GET リクエストを処理していることが確認できました
192.168.1.131 - - [13/Apr/2014:12:09:35 +0000] "GET /index.html HTTP/1.1" 200 427 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36"
192.168.1.131 - - [13/Apr/2014:12:09:35 +0000] "GET /index.html HTTP/1.1" 200 427 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36"
192.168.1.135 - - [13/Apr/2014:12:09:35 +0000] "GET /index.html HTTP/1.1" 200 427 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36"
192.168.1.135 - - [13/Apr/2014:12:09:35 +0000] "GET /index.html HTTP/1.1" 200 427 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36"
192.168.1.135 - - [13/Apr/2014:12:09:35 +0000] "GET /index.html HTTP/1.1" 200 427 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36"
192.168.1.132 - - [13/Apr/2014:12:09:36 +0000] "GET /index.html HTTP/1.1" 200 427 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36"
レポートの作成
Tsung の tsung_stats.pl を使用してレポートを作成します
tsung_stats.pl は /lib/tsung/bin/ にあります
$ tsung_stats.pl --stats ./log/20140413-1208/tsung.log