set setting reset

インフラ関連の小ネタと備忘録

AWSCLI を使って ELB のトラフィックを munin でグラフ化

表題の通りの munin plugin です。

f:id:rriifftt:20150409135001p:plain

elb_traffic.sh

#!/bin/bash

AWS="/usr/bin/aws --region ap-northeast-1"
ELB_NAME=`basename $0 | cut -d _ -f 1`

# 取得したいメトリクス
METRICS=("RequestCount" "HTTPCode_ELB_4XX" "HTTPCode_ELB_5XX" "HTTPCode_Backend_2XX" "HTTPCode_Backend_4XX" "HTTPCode_Backend_3XX" "HTTPCode_Backend_5XX")

# munin の設定
if [ "$1" = "autoconf" ]; then
    echo yes
    exit 0
fi

if [ "$1" = "config" ]; then
    echo "graph_title aws elb ${ELB_NAME} "
    echo "graph_args --base 1000 -l 0"
    echo "graph_category aws-elb"
    echo "graph_vlabel aws elb ${ELB_NAME}"
    echo "graph_scale yes"
    echo "graph_info aws elb ${ELB_NAME}"

    for METRIC in "${METRICS[@]}"
    do
        echo "${ELB_NAME}_${METRIC}.label ${ELB_NAME}_${METRIC}"
        echo "${ELB_NAME}_${METRIC}.info ${ELB_NAME}_${METRIC}"
        echo "${ELB_NAME}_${METRIC}.type GAUGE"
        echo "${ELB_NAME}_${METRIC}.draw LINE"
    done
    exit 0
fi

for METRIC in "${METRICS[@]}"
do
    retval=`${AWS} cloudwatch get-metric-statistics \
        --namespace "AWS/ELB" \
        --metric-name ${METRIC} \
        --dimensions "[{\"Name\":\"LoadBalancerName\",\"Value\":\"${ELB_NAME}\"}]" \
        --period 60 \
        --start-time $(date --iso-8601=seconds --date '24 hour ago') \
        --end-time   $(date --iso-8601=seconds) \
        --statistics "Sum" | jq -r '.Datapoints | sort_by(.Timestamp) | reverse | .[0]'`

    count=`echo "${retval}" | jq -r '.Sum'`
    echo "${ELB_NAME}_${METRIC}.value ${count}"
done

exit 0

これに実行権限を付与してシンボリックリンク作成して munin-node restart 。 シンボリックリンクmy-elb_ とリンク名の先頭に監視したい elb 名をつけます。

ln -s /usr/share/munin/plugins/elb_traffic.sh /etc/munin/plugins/my-elb_elb_traffic

複数のELBがある場合はその分のシンボリックリンクを作成すればよいです。