どうも、かっぱ (@inokara) です。

引き続き…

Siege でお手軽 Web 負荷テストシリーズ宜しくです。

負荷テストの観点(超私的)

超私的な負荷テストのざっくりとした観点です。

  • どんな負荷を掛けたか?
  • そして、その結果は?
  • テスト対象のリソース変化は?

これらを全て fluentd と Graphite を利用して可視化してしまいたいと思います。

どんな負荷を掛けたか?、そしてその結果は?

Siege を利用して連続的に負荷を掛けます。

siege

以下のように実行して負荷を掛けます。

/usr/local/bin/siege -c 100 -r 1 --time=10m --log=/tmp/siege_log --benchmark https://example.inokara.com/

siege に関して過去に書いた記事を御覧くださいませ。

siege + fluentd + in_tail

siege のログ(/tmp/siege_log)は以下のようなログが出力されます。

      Date & Time,  Trans,  Elap Time,  Data Trans,  Resp Time,  Trans Rate,  Throughput,  Concurrent,    OKAY,   Failed
2014-08-26 04:43:48,   4440,      17.14,           1,       0.32,      259.04,        0.06,       83.42,    4440,       0

そしてこのログを以下のような fluentd の設定で監視しちゃいます。

siege.conf


  type tail
  path /tmp/siege_log
  pos_file /tmp/test.pos
  tag siege.access
  format /^(?(d{4})-(d{2})-(d{2}) (d{2}:)(d{2}):(d{2})),s{0,}(?d+(.d+)?),s{0,}(?d+(.d+)?),s{0,}(?d+(.d+)?),s{0,}(?d+(.d+)?),s{0,}(?d+(.d+)?),s{0,}(?d+(.d+)?),s{0,}(?d+(.d+)?),s{0,}(?d+),s{0,}(?d+)$/
  time_format %Y-%m-%d %H:%M:%S



  type copy
  
    type forward
    
      host xxx.xxx.xxx.xxx
      port 24224
    
  
  
    type file
    path /tmp/siege_log.parsed
  

正規表現がツライっす。

テスト対象のリソース変化は?

テスト対象のリソース変化は dstat を利用します。

dstat + fluent-plugin-dstat で…

テスト対象となるサーバーでは以下のように dstat のメトリクスを fluentd を利用して Graphite サーバーに飛ばします。

dstat.conf


  type dstat
  tag dstat
  option -d -lcm --tcp
  delay 3



  type forest
  subtype copy
  



  type forward
  buffer_type file
  buffer_path /tmp/fluent.dstat.buffer
  retry_wait 30s
  retry_limit 5
  flush_at_shutdown true
  
    host xxx.xxx.xxx.xxx
    port 24224
  

dstat + fluent-plugin-dstat の結果を Graphite で可視化

dstat + fluent-plugin-dstat から以下のようにレコードが飛んできます。

2014-08-30 08:11:46 +0900 dstat.xxx.xxx.xxx.xxx.tcp-sockets: {lis,act,syn,tim,clo}
2014-08-30 08:08:43 +0900 dstat.xxx.xxx.xxx.xxx.disk-io: {"read":"0.0","writ":"51882.667"}
2014-08-30 08:13:48 +0900 dstat.xxx.xxx.xxx.xxx.mem: {"used":"2553696256.0","buff":"29032448.0","cach":"722718720.0","free":"646238208.0"}
2014-08-30 08:13:48 +0900 dstat.xxx.xxx.xxx.xxx.cpu: {usr,sys,idl,wai,hiq,siq}

このレコードを以下のようにして Graphite に飛ばします。各メトリクス毎に fluent-plugin-graphite を呼んでいるのでもう少し効率良い設定がないものかお悩み中。

metrics.conf


  type forward
  port 24224
  bind 0.0.0.0



  type copy
    
      type  stdout
    

    
      type graphite
      host localhost
      port 2003
      tag_for prefix
      name_keys usr,sys,idl,wai,hiq,siq
    




  type copy
    
      type  stdout
    

    
      type graphite
      host localhost
      port 2003
      tag_for prefix
      name_keys lis,act,syn,tim,clo
    




  type copy
    
      type  stdout
    

    
      type graphite
      host localhost
      port 2003
      tag_for prefix
      name_keys read,writ
    




  type copy
    
      type  stdout
    

    
      type graphite
      host localhost
      port 2003
      tag_for prefix
      name_keys used,buff,cach,free
    





  type forest
  subtype copy
  

暫くすると…

以下のようにリソースの状態が Graphite に…

CPU

Siege: Graphiteによる結果画面_CPU

Memory

Siege: Graphiteによる結果画面_Memory

Disk I/O

Siege: Graphiteによる結果画面_Disk I/O

TCP Scoket

Siege: Graphiteによる結果画面_TCP Socket

Siege について後ほど…

ということで…

fluentd を中心に各種ツールのログをかき集めて負荷テストをお手軽可視化してみました。JMeter のような多機能ではないものガッツリ JMeter 用のリソースを用意することが難しいような場合にサーバーで一般的に動いている(fluentd を含め)ツールで負荷テスト、結果の可視化まで出来るんぢゃないかしらというご提案でした!

元記事はこちらです。
Siege でお手軽 Web 負荷テスト(3)〜 fluentd + dstat + graphite でお手軽可視化 〜