はじめに
先日 Amazon RDS で OS の詳細情報を取得できるようになったので、Munin に表示してみました。
概要
Amazon RDS に追加された拡張モニタリング機能により、RDS インスタンスの OS リソース情報が CloudWatch Logs に出力されるようになりました。
今回は CloudWatch Logs のメトリックフィルタを使用して、ロードアベレージを CloudWatch メトリックに変換、Munin でグラフ化してみます。
やってみた
Amazon RDS インスタンスの拡張モニタリングを有効化
拡張モニタリングの有効化は、クラスメソッドさんのブログ記事 [新機能]Amazon RDSでOSの詳細情報を取得できるようになりました! に手順と設定例があります。
CloudWatch Logs の画面でメトリックフィルタを作成
Create Metric Filter ボタンをクリック。
Define Logs Metric Filter 画面で Filter Pattern を指定
今回は Filter Pattern にインスタンス ID と LoadAverage 5分間の平均値をチェックするように設定します。
Filter Pattern
{ $.instanceID = "インスタンスID" && $.loadAverageMinute.five >= 0.00 }
Test Pattern ボタンで Filter をテストしたら、Assign Metric ボタンをクリック。
Create Metric Filter and Assign a Metric 画面で Filter Name と Metric の詳細を設定
Metric の詳細を次のように設定、Create Filter ボタンをクリック。
- Metric Namespace: RDSOSMetrics
- Metric Name: インスタンスID_LoadAverage
- Metric Value: $.loadAverageMinute.five
Metrics の Custom Metrics から「RDSOSMetrics」を選択すると、作成した Metric が表示されます。
Munin のプラグインを作成
CloudWatch Metrics から情報を取得するプラグインを作成します。
CloudWatch Metrics からの Munin プラグイン作成は、AWSCLI を使って ELB のトラフィックを munin でグラフ化 を参考にさせていただきました。
Metric Filter を RDS インスタンス数分作成して、RDS_NAMES に記述すると1つのグラフにまとめることができます。
#!/bin/bash
AWS="/usr/bin/aws --region ap-northeast-1"
NAMESPACE="RDSOSMetrics"
METRIC="LoadAverage"
RDS_NAMES=("test-db1" "test-db2")
if [ "$1" = "autoconf" ]; then
echo yes
exit 0
fi
if [ "$1" = "config" ]; then
echo "graph_title Amazon RDS ${METRIC} "
echo "graph_args --base 1000 -l 0"
echo "graph_vlabel amazon rds ${METRIC}"
echo "graph_scale no"
echo "graph_category aws-rds"
echo "graph_info amazon rds ${METRIC}"
for RDS_NAME in "${RDS_NAMES[@]}"
do
echo "${RDS_NAME}_${METRIC}.label ${RDS_NAME}_${METRIC}"
echo "${RDS_NAME}_${METRIC}.info ${RDS_NAME}_${METRIC}"
echo "${RDS_NAME}_${METRIC}.type GAUGE"
echo "${RDS_NAME}_${METRIC}.draw LINE"
done
exit 0
fi
for RDS_NAME in "${RDS_NAMES[@]}"
do
retval=`${AWS} cloudwatch get-metric-statistics \
--namespace ${NAMESPACE} \
--metric-name "${RDS_NAME}_${METRIC}" \
--period 60 \
--start-time $(date --iso-8601=seconds --date '24 hour ago') \
--end-time $(date --iso-8601=seconds) \
--statistics "Average" | /usr/local/bin/jq -r '.Datapoints | sort_by(.Timestamp) | reverse | .[0]'`
count=`echo "${retval}" | /usr/local/bin/jq -r '.Average'`
echo "${RDS_NAME}_${METRIC}.value ${count}"
done
exit 0
プラグインを作成したら plugins ディレクトリにシンボリックリンクを作成、munin-node を再起動します。
# cd /etc/munin/plugins
# ln -s /usr/share/munin/plugins/rds_load rds_load
# /etc/init.d/munin-node restart
Munin で表示確認
無事 Munin でグラフ化できました!
まとめ
RDS インスタンスのロードアベレージを Munin で監視できるようになりました。
他のメトリクスも Munin でどんどんグラフ化しましょう!
参考資料
[新機能] Amazon RDS で OS の詳細情報を取得できるようになりました!
ログファイルのモニタリング
AWS-CLI を使って ELB のトラフィックを munin でグラフ化