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

  • 5
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

先日 Amazon RDS で OS の詳細情報を取得できるようになったので、Munin に表示してみました。

概要

Amazon RDS に追加された拡張モニタリング機能により、RDS インスタンスの OS リソース情報が CloudWatch Logs に出力されるようになりました。
今回は CloudWatch Logs のメトリックフィルタを使用して、ロードアベレージを CloudWatch メトリックに変換、Munin でグラフ化してみます。

やってみた

Amazon RDS インスタンスの拡張モニタリングを有効化

拡張モニタリングの有効化は、クラスメソッドさんのブログ記事 [新機能]Amazon RDSでOSの詳細情報を取得できるようになりました! に手順と設定例があります。

CloudWatch Logs の画面でメトリックフィルタを作成

1-1.png

Create Metric Filter ボタンをクリック。

Define Logs Metric Filter 画面で Filter Pattern を指定

1-2.png

今回は 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 の詳細を設定

1-3.png

Metric の詳細を次のように設定、Create Filter ボタンをクリック。

  • Metric Namespace: RDSOSMetrics
  • Metric Name: インスタンスID_LoadAverage
  • Metric Value: $.loadAverageMinute.five

Metric Filter が作成されました。
1-4.png

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

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 で表示確認

1-6.png

無事 Munin でグラフ化できました!

まとめ

RDS インスタンスのロードアベレージを Munin で監視できるようになりました。
他のメトリクスも Munin でどんどんグラフ化しましょう!

参考資料

[新機能] Amazon RDS で OS の詳細情報を取得できるようになりました!
ログファイルのモニタリング
AWS-CLI を使って ELB のトラフィックを munin でグラフ化

この投稿は AWS Advent Calendar 201521日目の記事です。