負荷試験ツール tsung

cuiでやりたかった

読み方不明 誰か教えて

環境はとりあえずmacbrew でインストールできる

[code lang=text] % brew install tsung [/code]

centosだとyumで入るので便利

Template-Toolkitをインストールする

[code lang=text] % sudo cpan Template [/code]

全部空エンターで

作業ディレクトリを作成

[code lang=text] % mkdir ~/tsung [/code]

結果を保存するlogsディレクトリも先に作っておく

[code lang=text] % mkdir ~/tsung/logs [/code]

以下~/tsungディレクトリで作業

xmlを作成 exampleは自分の環境だとここにできてた

[code lang=text] % ls -l /usr/local/Cellar/tsung/1.7.0/share/doc/tsung/examples/http_simple.xml [/code]

作業ディレクトリにコピる

[code lang=text] % cp /usr/local/Cellar/tsung/1.7.0/share/doc/tsung/examples/http_simple.xml http_simple.xml [/code]

コメントアウト外したexample

[code lang=text] % cat http_simple.xml <?xml version="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/local/Cellar/tsung/1.7.0/share/tsung/tsung-1.0.dtd"> <tsung loglevel="notice" version="1.0">

<clients> <client host="localhost" use_controller_vm="true"/> </clients>

<servers> <server host="myserver" port="80" type="tcp"></server> </servers>

<monitoring> <monitor host="myserver" type="snmp"></monitor> </monitoring>

<load> <arrivalphase phase="1" duration="10" unit="minute"> <users interarrival="2" unit="second"></users> </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 Galeon/1.3.21</user_agent> <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</user_agent> </option> </options>

<sessions> <session name="http-example" probability="100" type="ts_http">

&lt;request&gt; &lt;http url=&quot;/&quot; method=&quot;GET&quot; version=&quot;1.1&quot;&gt;&lt;/http&gt; &lt;/request&gt;
&lt;request&gt; &lt;http url=&quot;/images/accueil1.gif&quot; method=&quot;GET&quot; version=&quot;1.1&quot; if_modified_since=&quot;Fri, 14 Nov 2003 02:43:31 GMT&quot;&gt;&lt;/http&gt; &lt;/request&gt;
&lt;request&gt; &lt;http url=&quot;/images/accueil2.gif&quot; method=&quot;GET&quot; version=&quot;1.1&quot; if_modified_since=&quot;Fri, 14 Nov 2003 02:43:31 GMT&quot;&gt;&lt;/http&gt; &lt;/request&gt;
&lt;request&gt; &lt;http url=&quot;/images/accueil3.gif&quot; method=&quot;GET&quot; version=&quot;1.1&quot; if_modified_since=&quot;Fri, 14 Nov 2003 02:43:31 GMT&quot;&gt;&lt;/http&gt; &lt;/request&gt;

&lt;thinktime value=&quot;20&quot; random=&quot;true&quot;&gt;&lt;/thinktime&gt;

&lt;request&gt; &lt;http url=&quot;/index.en.html&quot; method=&quot;GET&quot; version=&quot;1.1&quot; &gt;&lt;/http&gt; &lt;/request&gt;

</session> </sessions> </tsung> [/code]

詳しくは公式のドキュメントに書いてる http://tsung.erlang-projects.org/user_manual/configuration.html

そのままどっかにあるのコピって

[code lang=text] <!DOCTYPE tsung SYSTEM "/usr/local/Cellar/tsung/1.7.0/share/tsung/tsung-1.0.dtd"> [/code]

がミスってて動かねーとかあったのでそんなことないように

上から説明しながら自分の設定ように書き換える

接続先の設定 cliantはlocalhostから投げるのでそのまま 投げ先は自分のサイトへ

[code lang=text] <server host="myserver" port="80" type="tcp"></server> [/code]

[code lang=text] <server host="astail.net" port="443" type="ssl"></server> [/code]

<monitoring> は今回いらなそうなので消す

どの程度負荷をかけるか デフォルトのこれだと10分間 2秒ごとに新規にアクセスするかな

[code lang=text] <arrivalphase phase="1" duration="10" unit="minute"> <users interarrival="2" unit="second"></users> </arrivalphase> [/code]

↓ 1分間 0.1秒ごとにアクセス 単純計算 1秒10リクエスト  * 60 = 600

[code lang=text] <arrivalphase phase="1" duration="1" unit="minute"> <users interarrival="0.1" unit="second"></users> </arrivalphase> [/code]

アクセス情報 割合

[code lang=text] <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 Galeon/1.3.21</user_agent> <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</user_agent> </option> [/code]

↓ 1つでいいです 面倒だし

[code lang=text] <option type="ts_http" name="user_agent"> <user_agent probability="100">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent> </option> [/code]

どこにアクセスするか

[code lang=text] <session name="http-example" probability="100" type="ts_http"> <request> <http url="/" method="GET" version="1.1"></http> </request> <request> <http url="/images/accueil1.gif" method="GET" version="1.1" if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT"></http> </request> <request> <http url="/images/accueil2.gif" method="GET" version="1.1" if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT"></http> </request> <request> <http url="/images/accueil3.gif" method="GET" version="1.1" if_modified_since="Fri, 14 Nov 2003 02:43:31 GMT"></http> </request>

&lt;thinktime value=&quot;20&quot; random=&quot;true&quot;&gt;&lt;/thinktime&gt;
&lt;request&gt; &lt;http url=&quot;/index.en.html&quot; method=&quot;GET&quot; version=&quot;1.1&quot; &gt;&lt;/http&gt; &lt;/request&gt;

</session> [/code]

↓ astail.net/?p=1461 へ負荷をかける

[code lang=text] <session name="http-example" probability="100" type="ts_http"> <request> <http url="/?p=1461" method="GET" version="1.1"></http> </request> </session> [/code]

こうなった

[code lang=text] % cat http_simple.xml <?xml version="1.0"?> <!DOCTYPE tsung SYSTEM "/usr/local/Cellar/tsung/1.7.0/share/tsung/tsung-1.0.dtd"> <tsung loglevel="notice" version="1.0">

<clients> <client host="localhost" use_controller_vm="true"/> </clients>

<servers> <server host="astail.net" port="443" type="ssl"></server> </servers>

<monitoring> <monitor host="myserver" type="snmp"></monitor> </monitoring>

<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="80">Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8) Gecko/20050513 Galeon/1.3.21</user_agent> <user_agent probability="20">Mozilla/5.0 (Windows; U; Windows NT 5.2; fr-FR; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</user_agent> </option> </options>

<sessions> <session name="http-example" probability="100" type="ts_http"> <request> <http url="/?p=1461" method="GET" version="1.1"></http> </request> </session> </sessions> </tsung> [/code]

実行

[code lang=text] % tsung -l logs -f http_simple.xml start Starting Tsung Log directory is: /Users/astel/tsung/logs/20171130-1802 [os_mon] cpu supervisor port (cpu_sup): Erlang has closed [/code]

結果は /Users/astel/tsung/logs/20171130-1802 に出ている これをレポートとしてhtmlファイルに出す

centosとかならコマンド化されてるけどmacはplを叩く /usr/local/lib/tsung/bin/tsung_stats.pl があることを確認しておく

ワンライナー化 最新のログディレクトリに移動してtsung_stats.plを叩いてreport.htmlを作成、それを開いてディレクトリを元の場所にもどる

[code lang=text] % cd ./logs/ls -t ./logs | head -n 1 ; /usr/local/lib/tsung/bin/tsung_stats.pl ; open report.html ; cd ../../ [/code]

いろいろ見れる graphとかもみれる