Posted at
AWSDay 21

Amazon RDS の拡張モニタリング情報を Munin で可視化する

More than 3 years have passed since last update.


はじめに

先日 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

Metric Filter が作成されました。

Metrics の Custom Metrics から「RDSOSMetrics」を選択すると、作成した Metric が表示されます。


Munin のプラグインを作成

CloudWatch Metrics から情報を取得するプラグインを作成します。

CloudWatch Metrics からの Munin プラグイン作成は、AWSCLI を使って ELB のトラフィックを munin でグラフ化 を参考にさせていただきました。

Metric Filter を RDS インスタンス数分作成して、RDS_NAMES に記述すると1つのグラフにまとめることができます。


/usr/share/munin/plugins/rds_load

#!/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 でグラフ化