本日も乙

ただの自己満足な備忘録。

AWS RDSの拡張モニタリングをMackerelで監視する

[toc]

AWS RDSには拡張モニタリングという、OSレベルのメトリクスやプロセスのメトリクスを確認できるオプションがあります。RDSのパフォーマンスが低下したり何かしらのトラブルが生じた場合に原因究明に役立つ便利な機能です。また、メトリクスデータはCloudWatch Logsに格納されるため、保存期間は無制限(自分で保存期間は決めることができます)です。 しかし、拡張モニタリングを使ったことがある人は分かると思いますが、マネジメントコンソールから確認するとGUI操作がとても使いづらいです。時間範囲も5分、15分、30分、1時間と決められており、時間指定もUTCなのかJSTなのか一瞬分からなくなります。とても便利な機能だけに残念です。

一方、MackerelでAWSインテグレーション(RDS)でRDS DBインスタンスの監視をしているのですが、拡張モニタリングのメトリクスは取得することができません。Mackerelの仕様上、時間経過とともにメトリクス値は丸められていくものの、GUIはとても操作しやすいし、メトリクス値から監視設定を行うこともできます。

RDSの拡張モニタリングのデータをMackerelで取得させれば、メトリクス値を確認しやすくなりますし、監視と通知設定もすることができます。そこでRDS拡張モニタリングをMackerelのホストメトリックで見れるようにしてみます。今回は、Aurora DBインスタンスを対象とします。

AWSインテグレーション(RDS)を有効にする

Mackerelのドキュメントを参考に設定します。

RDSの拡張モニタリングを有効化する

マネジメントコンソールから操作します(AWS CLIでもできます)。

RDSのマネジメントコンソールのインスタンスをクリックし、DBインスタンス一覧を表示します。 拡張モニタリングを有効にしたいDBインスタンスを選択し、「インスタンスの操作」をクリック、「変更」をクリックします。

変更画面で、モニタリング欄で「拡張モニタリングを有効にする」で「はい」、モニタリングロールは「デフォルト」(すでにrds_monitoring_roleというロールが作られている場合はそれを選択)、「詳細度」は「60秒」にします。また、「すぐに適用」でチェックを入れて「次へ」をクリックします。

rds_monitoring_1

確認画面で下図のようになっていることを確認して、「DBインスタンスの変更」をクリックします。

rds_monitoring_2

CloudWatchのマネジメントコンソールに移動して、「ログ」をクリック、ロググループから「RDSOSMetrics」をクリックし、メトリクスが取得されていれば拡張モニタリングの設定は完了です。

rds_monitoring_3

Mackerelのカスタムメトリックのグラフ定義

RDSのホストメトリックにおいて、カスタムメトリックのグラフ定義する必要があります。

グラフの定義はMackerel APIを使って行います。RDSの拡張モニタリングのメトリクスをMackerelのカスタムメトリックのグラフ定義するスクリプト例をGistに上げていますが、取得したいメトリクスやDisplayNameなどはお好みで適宜変えてください。

取得できる拡張モニタリングのメトリクスはドキュメントにあります。AuroraではdiskIOのメトリクスが取得できないとドキュメントに書かれていますが、手元の環境では問題なく取得できました。また、数値で取れないメトリクス(データベースエンジン名など)はグラフ定義から外しています。

AWS Lambda関数の作成

CloudWatch Logsに流れた拡張モニタリングのメトリクスをMackerelのホストメトリクスに流すLambda関数を作成します。

こちらもスクリプト例をGistに上げましたのでご参考ください。MackerleのAPIキーをKMSで暗号化していますが、Lambdaの環境変数で設定した方がもっと簡単にできます。 汎用性を高くするために、拡張モニタリングのメトリクスに含まれるインスタンスIDを固定にせず、RDS DBインスタンスインスタンスIDからMackerelに登録されているホストを検索するようにしています。

CloudWatch LogsとLambda関数を紐付ける

CloudWatch Logsのロググループ(RDSOSMetrics)をLambda関数に紐付けてデータをLambda関数に流すようにします。

ロググループ(RDSOSMetrics)を選択し、「アクション」->「Lambda サービスへのストリーミングの開始」を選択します。

Lambda関数では、先ほど作成したLambda関数(例ではRDS-Enhanced-Monitoring-to-Mackerel)を選択し、「次へ」をクリックします。

ログ形式では、「JSON」を選択し、「次へ」をクリックします。

確認画面で設定に誤りが無ければ、「ストリーミングの開始」をクリックすれば設定は完了です。

Mackerelのホストメトリックを確認

しばらくすると、Mackerelのホストメトリックに拡張モニタリングのメトリクスが表示されればOKです。

下図は、CPU使用率のメトリクスです。

rds_monitoring_4

もし、メトリクスが表示されない場合は、Mackerelのグラフ定義やLambda関数のスクリプトに間違いが無いかを確認してください。Lambda関数の場合は、エラーがあればCloudWatch Logsに記録されています。

最後に

RDSの拡張モニタリングのメトリクスをMackerelのホストメトリックに流す方法を紹介しました。Mackerel側で拡張モニタリングの取得をサポートしてくれるとこれらの設定をしなくても済むようになるので、今後のアップデートに期待です。

参考