はじめに
siege
を使って web サイトのレスポンスタイムを監視したい- ついでに
elasticsearch
とkibana
でレスポンスタイムを可視化してみる - そしてこれらのツールを
docker
コンテナで動かしてみる docker
コンテナを使うことでほぼ環境を問わずお手軽に web サイトのレスポンスタイムを監視、計測出来るようになるんぢゃないかという企み
参考
- Kibana 3 + Rails + Fluentdのサンプルアプリを作ってみた
- 第2回elasticsearch勉強会でKibanaの発表をしてきました #elasticsearchjp
- siegeのインストール、設定と使い方
- siege
やること
やることは以下のような感じ。
docker pull inokappa/wheezy-siege
でコンテナを取得docker
コンテナを起動して必要なサービスを起動する- 監視の開始
コンテナの準備
コンテナを取得
前回の記事で作成したコンテナイメージをとりあえず利用する。
改めて作りなおしたコンテナイメージを pull してくる。
docker pull inokappa/wheezy-7.2-siege
もし、コンテナイメージを使わない場合にはこちらの cookbook を使ってもとりあえずはいけるはず。
コンテナを起動
以下の通りコンテナを起動する。
docker run -i -t -p 80:80 -p 9200:9200 inokappa/wheezy-7.2-siege /bin/bash
とりあえず kibana
用に 80
番ポート、elasticsearch-head
用に 9200
番ポートを開放する。
コンテナ内の必要なサービスを起動
必要なサービスをコンテナにログインして起動する。
/etc/init.d/nginx start /etc/init.d/elasticsearch start /etc/init.d/cron start
尚、cron
は起動していないので忘れずに起動すること。
レスポンスタイム監視の開始
レスポンスタイムの監視には前述の通り siege
を利用する。
siege のインストール
以下のようにサクッと siege
をインストールする。
apt-get install siege
siege
について詳しいことはこちらをご覧下さいませ...
レスポンス監視のシェルスクリプト
siege
を使って特定の Web サイトのレスポンスチェクをした後で elaticsearch
にレスポンスタイムをポストするシェルスクリプトを書いてみた。
#!/bin/bash _index=logstash-`date +%Y.%m.%d` _type=response _name=hoge.huga.com logdate=`date +%Y-%m-%d` timestamp=`date +%H:%M:%S` # /usr/bin/siege -b -i -r 5 -c 5 http://hoge.huga.com --log=/tmp/test_log result=`tail -n1 /tmp/test_log` response_time=`tail -n1 /tmp/test_log | awk '{print $4}' | sed s/,//g` echo $result echo $response_time # _document=`date +%s` # curl -XPUT "http://localhost:9200/$_index/$_type/$_document" -d \ '{"response_time" : '$response_time' ,"@log_name" : "'$_type'-'$_name'", "@timestamp" : "'$logdate'T'$timestamp'+0900"}'
cron
にこのスクリプトを定期的に実行するように設定する。
レスポンス結果の確認
暫くすると以下のようにコンテナ上の kibana
にてレスポンスタイムがグラフ化されてる。
また、elasticsearch
への投げ方を工夫すればも少し凝った解析が出来るかもしれない。
最後に
- そもそもインストールが簡単な
elasticesearch
やkibana
をDocker
コンテナ化する必要が有るかはお好みで.... cron
デーモンやローカルタイム等の設定にも注意する- Growthforecast の方ががお手軽に出来るとは思う
siege
のログを解析してelasticsearch
に投げるのをfluentd
にしてしまいたい