ようへいの日々精進XP

よかろうもん

docker + elasticsearch + kibana + siege でお手軽に web サイトのレスポンスタイムを可視化する試み

はじめに

  • siege を使って web サイトのレスポンスタイムを監視したい
  • ついでに elasticsearchkibana でレスポンスタイムを可視化してみる
  • そしてこれらのツールを docker コンテナで動かしてみる
  • docker コンテナを使うことでほぼ環境を問わずお手軽に web サイトのレスポンスタイムを監視、計測出来るようになるんぢゃないかという企み

参考


やること

やることは以下のような感じ。

  • 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 にてレスポンスタイムがグラフ化されてる。

f:id:inokara:20131117001822p:plain

また、elasticsearch への投げ方を工夫すればも少し凝った解析が出来るかもしれない。


最後に

  • そもそもインストールが簡単な elasticesearchkibanaDocker コンテナ化する必要が有るかはお好みで....
  • cron デーモンやローカルタイム等の設定にも注意する
  • Growthforecast の方ががお手軽に出来るとは思う
  • siege のログを解析して elasticsearch に投げるのを fluentd にしてしまいたい