引き続き…
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 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 forest subtype copy type map tag "dstat.${hostname}.cpu" time time record record['dstat']['total cpu usage'] type map tag "dstat.${hostname}.mem" time time record record['dstat']['memory usage'] type map tag "dstat.${hostname}.tcp-sockets" time time record record["dstat"]["tcp sockets"] type map tag "dstat.${hostname}.disk-io" time time record record["dstat"]["dsk/total"] 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 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 type growthforecast gfapi_url http://127.0.0.1:5125/api/ service ${tag_parts[0]} tag_for section name_key_pattern .* type graphite host localhost port 2003 key_prefix siege.${tag_parts[0]} name_keys Trans,Elap_Time,Data_Trans,Resp_Time,Trans_Rate,Throughput,Concurrent,OKAY,Failed
暫くすると…
以下のようにリソースの状態が Graphite に…
CPU
Memory
Disk I/O
TCP Scoket
Siege について後ほど…
ということで…
fluentd を中心に各種ツールのログをかき集めて負荷テストをお手軽可視化してみました。JMeter のような多機能ではないものガッツリ JMeter 用のリソースを用意することが難しいような場合にサーバーで一般的に動いている(fluentd を含め)ツールで負荷テスト、結果の可視化まで出来るんぢゃないかしらというご提案でした!
元記事はこちらです。
「Siege でお手軽 Web 負荷テスト(3)〜 fluentd + dstat + graphite でお手軽可視化 〜」