ウェブサイトの負荷を計測するために Tsung を試してみた。
CentOS 7.x を導入し、firewalldとSELinux無効化、アップデートして再起動
# systemctl disable firewalld
# systemctl stop firewalld
# setenforce 0
# sed -i  s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
# yum upgrade -y && shutdown -r now
EPELかソースから導入する。Tsungを構成するノードが複数ある場合は、全ノードにて同様にインストールを行う。
EPELにあったのでEPELから導入、AmazonLinuxなど依存関係でダメな場合は次項のソースから導入を参照
# yum install https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# sed -i s/enabled=1/enabled=0/g /etc/yum.repos.d/epel.repo
# yum --enablerepo=epel install tsung
最新は1.6.0のようだけど、EPELから導入出来たのは "tsung-1.5.1-2.el7.x86_64" だった
# ssh-keygen -N '' -t rsa -b 2048
# cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
# ssh localhost
# ssh <IPADDRESS>  #<-構成ノードの全IPを叩いてホスト鍵を保存
authorized_keys, known_hosts, id_pub などを全ノードに展開する
設定に合わせて適当に作って全ノードに展開する
# vi /etc/hosts
XXX.XXX.XXX.XXX    A
XXX.XXX.XXX.XXX    B
XXX.XXX.XXX.XXX    C
# vi ~/tsung.xml
<?xml version="1.0"?>
<!-- インストールしたTsungのPathとあっていること -->
<!DOCTYPE tsung SYSTEM "/usr/share/tsung/tsung-1.0.dtd">
<tsung loglevel="notice" version="1.0">
  <!-- 負荷テストを実施するTsungクライアントの設定 -->
  <clients>
    <client host="A" weight="1" cpu="2" maxusers="40000">
      <ip value="XXX.XXX.XXX.XXX"/>
    </client>
    <client host="B" weight="1" cpu="2" maxusers="40000">
      <ip value="XXX.XXX.XXX.XXX"/>
    </client>
    <client host="C" weight="1" cpu="2" maxusers="40000">
      <ip value="XXX.XXX.XXX.XXX"/>
    </client>
  </clients>
  <!-- テスト対象のサーバー -->
  <servers>
    <server host="<httpサーバのIPorドメイン>" port="80" type="tcp"/>
  </servers>
  <!-- コネクション数の指定 -->
  <load>
    <!--
      5分間で毎秒8ユーザーずつ最大1000ユーザーまでクライアントを生成する。
    -->
    <arrivalphase phase="1" duration="5" unit="minute">
      <users maxnumber="1000" arrivalrate="8" unit="second"/>
    </arrivalphase>
    <!--
      10分間で毎秒8ユーザーずつ最大3000ユーザーまでクライアントを生成する。
    -->
    <arrivalphase phase="2" duration="10" unit="minute">
      <users maxnumber="3000" arrivalrate="8" unit="second"/>
    </arrivalphase>
    <!--
      15分間で毎秒10ユーザーずつ最大10800ユーザーまでクライアントを生成する。
    -->
    <arrivalphase phase="3" duration="15" unit="minute">
      <users maxnumber="10800" arrivalrate="10" unit="second"/>
    </arrivalphase>
  </load>
  <!--
    実際のクライアントの処理内容
    生成されたクライアントはいずれかのsessionを行うことになるため、probabilityの合計値は100とする必要がある
  -->
  <sessions>
    <!--
      接続時に index.html を 100回 リクエストする。
    -->
    <session probability="100" name="ab" type="ts_http">
      <for from="1" to="5" var="i">
        <request> <http url="/index.html" method="GET" version="1.1"/> </request>
      </for>
    </session>
    <!-- 他、画像やソケットなどトップページを構成する要素があれば追記する -->
  </sessions>
</tsung>
# tsung -f ~/tsung.xml start
アタックされた側・・・
[root@vm154 httpd]# w
 13:41:36 up 1 day,  2:37,  2 users,  load average: 142.11, 47.35, 16.88
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
senokuch pts/0     11:11    4.00s  0.82s  9.87s /bin/xfce4-terminal
senokuch pts/1     13:12    1.00s  0.54s  0.43s ssh -XC -o ServerAliveInterval=
楽しい!!! ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
=ERROR REPORT==== 16-Oct-2015::11:09:02 ===
** Node tsung2@vm170 not responding **
** Removing (timedout) connection **
tsung_stats.pl にてログファイルからHTML形式のレポートを生成する。
# yum install perl-App-cpanminus @development gnuplot
# cpanm Template
# mkdir report ; cd $_
# /usr/lib64/tsung/bin/tsung_stats.pl --stats /root/.tsung/log/YYYYMMDD-HHMM/tsung_controller\@<hostname>.log
カレントディレクトリにレポートのHTML・画像などが生成されるので適当に見る。