ELBのリクエスト数をmuninに取り込む (CloudWatch to munin)
CloudWatchで、ELBのステータスコードの数、リクエスト数、レイテンシが見れますが、
2週間しか保存されないので必要なものをmuninに取り込んでます。
現状は6分間のMAXリクエスト数しか取り込んで無いですが、本来はキャパプラとか過去の振り返り
のために、全部2週間以上保存すべきなんですけどね。。。
とりあえず、
1. plugin-conf.d に必要な情報を設定する。
2. 作成したスクリプトを通常通り、muninのplugin配下に置いてリンクを貼る。
で完了です。
スクリプト自体はmuninのお作法に従っているだけなので、大したことはやってません。
設定やスクリプト例については、ココが解りやすいです。
http://www.seeds-std.co.jp/seedsblog/671.html
・plugin-conf.d 配下に以下を設定したファイルを配置
################################################################## # ALL ELB ################################################################## #--------------------------- # abcdef.net #--------------------------- [abcdef-net-aws_elb*] env.elbname abcdef-net [abcdef-net-aws_elb_request] env.metiric RequestCount env.statistics Sum env.vlabel Count env.draw LINE2 [abcdef-net-aws_elb_latency] ※以下のスクリプトでは使用してないけど一応。 env.metiric Latency env.statistics Avg env.vlabel sec env.draw LINE2
・CloudWatchデータ取得用スクリプト (スクリプト名:aws_elb)
#!/bin/sh #-------------------------------- # Required #-------------------------------- . /root/.bash_profile # AWS API(boto)を実行するのに必要な変数設定 MONCMD=/opt/aws/bin/mon-get-stats START=`date --iso-8601=seconds --date '6 minutes ago'` # 日付形式指定 END=`date --iso-8601=seconds --date '1 minutes ago'` # 日付形式指定 PERIOD=360 # 5分だとCloudWatchのデータが取得できない時があるので6分指定 ELBNAME="$elbname" METRIC="$metiric" VLABEL="$vlabel" #-------------------------------- # Optional #-------------------------------- TYPE="${type:-GAUGE}" GRAPH_PERIOD="${graph_period:- }" DRAW="${draw:-AREA}" #-------------------------------- # Make Graph #-------------------------------- if [ "$1" = "config" ]; then # Global attributes echo 'graph_title AWS ELB - '${METRIC}'' echo 'graph_args --base 1000 -l 0' if [ ${GRAPH_PERIOD} != "" ] ; then echo 'graph_vlabel '${VLABEL}' / '${GRAPH_PERIOD}'' else echo 'graph_vlabel '${VLABEL}'' fi echo 'graph_category AWS-ELB '${ELBNAME}'' echo 'graph_info ELB '${METRIC}'' # Data source attributes echo "${METRIC}.label ${METRIC}" echo "${METRIC}.min 0" echo "${METRIC}.info ${METRIC}" echo "${METRIC}.type ${TYPE}" echo "${METRIC}.draw ${DRAW}" exit 0 fi #-------------------------------- # Get numerical value #-------------------------------- #echo -n "${METRIC}.value " VALUE=`${MONCMD} \ --metric-name ${METRIC} \ --statistics "Maximum" \ --namespace "AWS/ELB" \ --dimensions LoadBalancerName=${ELBNAME} \ --start-time ${START} \ --end-time ${END} \ --period ${PERIOD} \ | awk '{print $3}'` if [ "${VALUE}" != "" ] ; then echo "${METRIC}.value ${VALUE}" else echo "${METRIC}.value 0" fi
・mon-get-statsについて公式を参照願います。
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/cli-mon-get-stats.html
・AWS API(boto)導入は過去記事を参照願います。
http://xoxo-infra.hatenablog.com/entry/2013/02/28/195446
引数変えればELB以外にも色々と応用が効きますが、調子に乗って監視対象数を増やしま
くると監視サーバのCPUがパツるので注意して下さい。
てか、CloudWatchの応答が遅いのを何とかして欲しい・・・。
もはや、有料でいいからZabbix、Nagios、munin、Cacti相当の機能を付加して欲しい・・・。
以上です!