Last Updated on 2021年7月4日 by かんりにん
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環境が今無いので!)
Contents
1)インストール、Linux(CentOS)
本家サイトのinstallationのページを参考に環境を整備。
参考:依存関係にあるモジュール
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タグ以下で設定。
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/user/.tsung/log/20150612-1939"
2.実行後に作成されたファイルを確認
$ ls -al /home/user/.tsung/log/20150612-1939 total 48 drwxrwxr-x 2 user user 4096 Jun 12 19:39 . drwxrwxr-x 16 user user 4096 Jun 12 19:39 .. -rw-rw-r-- 1 user user 62 Jun 12 19:39 match.log -rw-rw-r-- 1 user user 25438 Jun 12 19:39 tsung.log -rw-rw-r-- 1 user user 1080 Jun 12 19:39 tsung.xml -rw-rw-r-- 1 user user 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 user user 4096 Jun 12 19:42 . drwxrwxr-x 16 user user 4096 Jun 12 19:42 .. drwxrwxr-x 2 user user 4096 Jun 12 19:42 data -rw-rw-r-- 1 user user 5212 Jun 12 19:42 gnuplot.log drwxrwxr-x 2 user user 4096 Jun 12 19:42 gnuplot_scripts -rw-rw-r-- 1 user user 7626 Jun 12 19:42 graph.html drwxrwxr-x 2 user user 4096 Jun 12 19:42 images -rw-rw-r-- 1 user user 62 Jun 12 19:39 match.log -rw-rw-r-- 1 user user 9512 Jun 12 19:42 report.html -rw-rw-r-- 1 user user 25438 Jun 12 19:39 tsung.log -rw-rw-r-- 1 user user 1080 Jun 12 19:39 tsung.xml -rw-rw-r-- 1 user user 3573 Jun 12 19:39 tsung_controller@ip-172-16-1-234.log
作成されたファイルを閲覧するため、レポート作成サーバーのドキュメントルートへコピーすればOK。
以下は/var/www/html/へコピー。
# cp -a /home/user/.tsung/log/20150612-1939 /var/www/html/
4)レポートを見てみる
視覚化されたレポートを見てみると…
レポートページのURLはこんな感じ。
http://hogehoge.example.com/20150612-1939/report.html
グラフページは以下のような感じで。
http://hogehoge.example.com/20150612-1939/graph.html
グラフは個別にpngで生成されているので、クリックすると拡大画像を確認可能。
テスト環境かつ、まったく調整してないので負荷テストの結果としてはこんなもんか、といったところだけど、レポーティングとしてはなかなか面白く、かつチューニングのポイントを押さえやすそう。
設定オプションも多数あるので、これから整備して今後のサービス立ち上げの際に活用していこうかな。あとはtsung_stats.pl実行時にズラズラ出てきた”No data for~”がなんなのかを調べておこうかと(という独り言w)