harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

TsungでWebサイトの負荷テストを試す

   


Tsung(読み方が不明なんだけど、サン、あるいはサング、かな??)を試したログ。
haproxyとバックエンドサーバーへの負荷テストにあたって、目安のため1000リクエスト/秒くらいから負荷テストを試したいな、と思い
今回は普段利用しているab(apache bench)、httperf、siege、JMeterに加えてTsungを入れてみた、のログ。
実行環境としてErlang(アーラン)を採用している、とのこと。

参考:お世話になっております!

Tsung公式サイト
Tsung公式サイト マニュアル
How to Generate Millions of HTTP Requests
サーバの負荷テストのための、何百万ものHTTPリクエストを発生させる方法
※上記ブログの日本語訳(postd)

負荷テストツールということもあり。導入するならクライアント端末に、とも考えられるが
Mac、Linux環境(ソースから入れるならBSDも)は情報があるものの、Windows環境は過去(2009年ころ)は対応していた様子ながら、ここ数年の対応状況について情報不足なので、今回はひとまずLinux環境で試してみることに。(あと、すぐに使えるMac環境が今無いので!)

1)インストール、Linux(CentOS)

本家サイトのinstallationのページを参考に環境を整備。

参考:依存関係にあるモジュール

Erlang/OTP R13B and up (download). Erlang is now part of Fedora and Debian/Ubuntu repositories.
pgsql module
mysql module
ldap module (for the LDAP plugin):
mochiweb libs (for XPath parsing, optionally used for dynamic variables in the HTTP plugin):
gnuplot and perl5
python and mathplotlib (optional; for graphical output with tsung-plotter).

tsungのインストール(RPM)

CentOS6.6のepelにて、tsungと実行環境であるerlangを両方まとめてインストールOK。
今回インストールされるバージョンはtsung-1.5.1-2.el6.x86_64。

	# yum search tsung
	Loaded plugins: security
	rightscale-epel                                                         | 2.9 kB     00:00
	epel/pkgtags                                                            | 1.5 MB     00:03
	=================================== N/S Matched: tsung ===================================
	tsung.x86_64 : A distributed multi-protocol load testing tool

	# yum install tsung

※ソースにて最新版を利用する場合は以下から。
http://tsung.erlang-projects.org/dist/

2)tsungの設定

インストールパッケージにサンプルファイル(xml)が用意されている。
場所は/usr/share/doc/tsung-<バージョン>/examples以下にあるので、このうちhttp_simple.xmlを実行ユーザーのホームディレクトリに.tsung/tsung.xmlとしてコピーする。

	$ mkdir ~/.tsung
	$ cp -a /usr/share/doc/tsung-1.5.1/examples/http_simple.xml ~/.tsung/

テスト用xmlの作成

	$ cd ~/.tsung
	$ cp -p http_simple.xml tsung.xml
	$ vi tsung.xml

 

xml設定例

公式マニュアルを参考に、簡単なXMLを。
HTTP/HTTPSだけでなく、MySQLやPostgreSQLへのリクエスト、WebSocketでのリクエストなど
多岐にわたるオプションがあり、様々なシナリオを作成できる印象。
詳しくはこちら→http://tsung.erlang-projects.org/user_manual/configuration.html

テスト用に作成したサンプル

	<?xml version="1.0"?><tsung loglevel="notice" version="1.0">
	
	  <clients>
	    <client host="localhost" use_controller_vm="true" weight="1" cpu="1" maxusers="10000"/>
	  </clients>
	
	  <servers>
	  <server host="<テスト対象サーバーのURLないしIPアドレス>" port="80" type="tcp"/>
	</servers>
	
	  <load>
	  <arrivalphase phase="1" duration="2" unit="minute">
	     <users maxnumber="7200" arrivalrate="100" unit="second"/>
	   </arrivalphase>
	  </load>
	
	  <options>
	   <option type="ts_http" name="user_agent">
	    <user_agent probability="80">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 tsung from N.verginia</user_agent>
	    <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 tsung from N.verginia</user_agent>
	   </option>
	  </options>
	
	  <sessions>
	  <session name="http-example" probability="100" type="ts_http">
	
	    <request> <http url="/" method="GET" version="1.1"/> </request>
	    <thinktime value="20" random="true"/>
	
	    <request> <http url="/index.php" method="GET" version="1.1"/> </request>
	
	  </session>
	 </sessions>
	</tsung>


タグの説明

今回テスト用に作成したxmlで使用したタグを抜粋。

clientsタグ
テストを実行する側(tsung実行ホスト)の設定

serversタグ
テスト対象サーバーの設定

loadタグ
テスト対象サーバーへのarrivalphaseタグ以下で設定。

duration 連続実行時間(単位:分)
maxnumber 最大リクエスト数
arrivalrate 秒あたりの同時リクエスト数

optionsタグ
TCPタイムアウト、HTTPメソッドでUserAgentの指定などが可能。
詳しくはこちら→http://tsung.erlang-projects.org/user_manual/conf-options.html

sessionsタグ
詳しくはこちら→http://tsung.erlang-projects.org/user_manual/conf-sessions.html
リクエストページやメソッドの指定、SSLでの接続(STARTTLS)やベーシック認証の設定など。

3)tsungの実行

xmlファイルを編集後、tsungを実行。

1.tsung実行

	$ tsung start
	Starting Tsung
	"Log directory is: /home/quaduser/.tsung/log/20150612-1939"

2.実行後に作成されたファイルを確認

	$ ls -al /home/quaduser/.tsung/log/20150612-1939
	total 48
	drwxrwxr-x  2 quaduser quaduser  4096 Jun 12 19:39 .
	drwxrwxr-x 16 quaduser quaduser  4096 Jun 12 19:39 ..
	-rw-rw-r--  1 quaduser quaduser    62 Jun 12 19:39 match.log
	-rw-rw-r--  1 quaduser quaduser 25438 Jun 12 19:39 tsung.log
	-rw-rw-r--  1 quaduser quaduser  1080 Jun 12 19:39 tsung.xml
	-rw-rw-r--  1 quaduser quaduser  3573 Jun 12 19:39 tsung_controller@ip-172-16-1-234.log

3.レポートページを生成

作成されたファイルをもとに、tsung_stats.plを実行してページを生成してみる。
実行の際、gnuplot、gnuplot-commonとperlモジュールのTemplate.pmが必要なので、入ってない場合は先に入れておく。

4.tsung_stats.pl実行

	$ perl /usr/lib64/tsung/bin/tsung_stats.pl
	creating subdirectory data
	creating subdirectory gnuplot_scripts
	creating subdirectory images
	No data for Bosh
	No data for Match
	No data for Event
	No data for Async

作成されたファイルを確認。
このうち、htmlとして生成された”report.html”と”graph.html”が負荷テスト結果を確認するページとなる。
“No data for~”といろいろ出てるけど、詳細は後日。ひとまず作成されたファイルを確認し、ページを見てみる。

	$ ls -al
	total 88
	drwxrwxr-x  5 quaduser quaduser  4096 Jun 12 19:42 .
	drwxrwxr-x 16 quaduser quaduser  4096 Jun 12 19:42 ..
	drwxrwxr-x  2 quaduser quaduser  4096 Jun 12 19:42 data
	-rw-rw-r--  1 quaduser quaduser  5212 Jun 12 19:42 gnuplot.log
	drwxrwxr-x  2 quaduser quaduser  4096 Jun 12 19:42 gnuplot_scripts
	-rw-rw-r--  1 quaduser quaduser  7626 Jun 12 19:42 graph.html
	drwxrwxr-x  2 quaduser quaduser  4096 Jun 12 19:42 images
	-rw-rw-r--  1 quaduser quaduser    62 Jun 12 19:39 match.log
	-rw-rw-r--  1 quaduser quaduser  9512 Jun 12 19:42 report.html
	-rw-rw-r--  1 quaduser quaduser 25438 Jun 12 19:39 tsung.log
	-rw-rw-r--  1 quaduser quaduser  1080 Jun 12 19:39 tsung.xml
	-rw-rw-r--  1 quaduser quaduser  3573 Jun 12 19:39 tsung_controller@ip-172-16-1-234.log

作成されたファイルを閲覧するため、レポート作成サーバーのドキュメントルートへコピーすればOK。
以下は/var/www/html/へコピー。

# cp -a /home/quaduser/.tsung/log/20150612-1939 /var/www/html/

4)レポートを見てみる

視覚化されたレポートを見てみると…

レポートページのURLはこんな感じ。
http://hogehoge.example.com/20150612-1939/report.html

report.html

report.html

グラフページは以下のような感じで。
http://hogehoge.example.com/20150612-1939/graph.html

graph.html

graph.html

グラフは個別にpngで生成されているので、クリックすると拡大画像を確認可能。

グラフ拡大(Transactions-mean.png)

グラフ拡大(Transactions-mean.png)

テスト環境かつ、まったく調整してないので負荷テストの結果としてはこんなもんか、といったところだけど、レポーティングとしてはなかなか面白く、かつチューニングのポイントを押さえやすそう。
設定オプションも多数あるので、これから整備して今後のサービス立ち上げの際に活用していこうかな。あとはtsung_stats.pl実行時にズラズラ出てきた”No data for~”がなんなのかを調べておこうかと(という独り言w)

 - dev, network, web, レビュー ,