[アップデート] Amazon CloudWatch に Performance Insights のカウンターメトリクスが参照出来る DB_PERF_INSIGHTS 関数が追加されました

2023.09.24

いわさです。

Performance Insights を使うと Amazon RDS や Amazon DocumentDB のデータベース負荷を分析することが出来ます。
その際にオペレーティングシステムやデータベースのパフォーマンスメトリクスである「カウンターメトリクス」を DB 負荷と関連付けて分析することができ、問題の特定に役立てることが出来ます。

このカウンターメトリクスですが、これまでは Performance Insights でのみ参照することが出来ました。厳密には Performance Insights の API を呼び出すことで値を取得することが出来るのですが、CloudWatch で参照する仕組みが用意されていませんでした。

しかし、先日のアップデートで CloudWatch Metrics Math を使うことで CloudWatch からも Peformance Insights カウンターメトリクスを参照することが出来るようになりました。

上記アナウンスによると DB_PERF_INSIGHTS を使うことで実現出来るようですが、Performance Insight が多機能だったりするので実際に試したほうが利用イメージがしやすいです。

本日は実際に CloudWatch メトリクスとして Perforamance Insights カウンターメトリクスを参照してみましたので使用方法などを紹介したいと思います。

RDS + Peformance Insights を用意

Performance Insights カウンターメトリクスを参照したいので、今回は事前に RDS for PostgreSQL を用意して Performance Insights が利用出来る状態にしてあります。

通常はこの Performance Insights 上で次のようにカウンターメトリクスを確認すると思います。
ここではメトリクスダッシュボードをカスタマイズしており、オペレーティングシステムの未割り当てのメモリの量を表示しています。

CloudWatch で Metrics Math を使ってみる

CloudWatch メトリクスの「数式を追加」から数式のプリセットを追加し、編集することが出来ます。
いくつかプリセットが用意されているのですが、今回のアップデートで次の「データベースパフォーマンスのメトリクス」というグループが追加されています。

まず試しに、この中のひとつ「Linux OS Total CPU Utilization」を選択してみます。

そうすると、次のようにDB_PERF_INSIGHTS('RDS','db-resource','os.cpuUtilization.total.avg')の数式が追加されました。

この追加されたDB_PERF_INSIGHTS関数が Perforamance Insights のカウンターメトリクスを取得する関数です。

この関数は 3 つの引数を受け取ります。
ひとつ目の引数はRDSDOCDBを指定して、RDS か DocumentDB かどちらなのかを指定します。
ふたつ目の引数は対象データベースのリソース ID を指定します。
みっつ目の引数で対象のメトリクスを指定します。今回は単独のメトリクスを指定していますが、リファレンス上は配列で複数のカウンターメトリクスを指定可能です。

リソース ID を指定する

「数式を追加」メニューから数式を追加した直後は、指定されたリソース ID がdb-resourceとなっており不正な状態です。
CloudWath メトリクスコンソール上も次のようなエラーが発生していると思います。

ここでは RDS コンソール画面からリソース ID を取得してみましょう。
設定タブからリソース ID を確認することが可能です。DB インスタンス ID ではないことに注意してください。

取得したリソース ID で次のように数式を修正してみましょう。
値が正しいかよくわからないですが、今度はなにかが描画されていることがわかります。CPU 使用率でいいのか?

先程確認した「オペレーティングシステムの未割り当てのメモリの量」を確認してみる

CPU 使用率だとよくわからなかったので、「Linux OS Free Memory (KiB)」も確認してみました。
os.memory.free.avgが自動設定されました。

23:00 あたりの数値が Performance Insights のコンソール上では3,954,360でした。
同じような値が取得されています。

任意のカウンターメトリクスを取得出来る

マネジメントコンソール上で「数式を追加」しようとした際には以下のみが選択可能でした。

  • Linux OS Dis Space Utilization
  • Linux OS Free Memory (KiB)
  • Linux OS Total CPU Utilization
  • Windows OS Disk Space Utilization
  • Windows OS Free Physical Memory (KB)
  • Windows OS User CPU Utilization

しかし、実際にはこの 6 つのみが取得可能なわけではなくカウンターメトリクス全般が取得可能です。
カウンターメトリクスの一覧は次に記載されています。

試しにデータベースメトリクスのtup_returnedを取得してみましょう。
tup_returnedはデータベース内の問い合わせで返された行数を示す PostgreSQL の統計情報です。(参考:28.2. 累積統計システム

Performance Insights コンソールでは次のように表示することが出来ました。

DB_PREF_INSIGHTS関数でdb.SQL.tup_returned.avgを指定することで同じ情報を CloudWatch メトリクスとして取得することが出来ていますね。

CloudWatch アラームで使用する

DB 負荷を分析する際に併せて参照したいだけであれば、従来どおりの Performance Insights 側で確認できれば十分が気もしますが、今回のメトリクスを使って CloudWatch アラームを作成することも出来ます。

標準の RDS メトリクスでサポートされていないオペレーティングシステムやデータベースの値をアラームに使用したい場合は、従来は Performance Insights API を使ってカウンターメトリクスをカスタムメトリクス化する必要があったのですが、今後はDB_PERF_INSIGHTS関数で直接参照することが出来るようになっています。

公式ドキュメントも追加されていますのでこちらを事前にご確認ください。
CloudWatch Anomaly Detection では使用出来ないなどいくつか制限事項もありますのでご注意ください。

次のようにメトリクスの指定で数式を直接使うことで設定出来ます。

さいごに

本日は Amazon CloudWatch で Performance Insights のカウンターメトリクスが参照出来る、DB_PERF_INSIGHTS が追加されたので確認してみました。

従来 Performance Insights でのみ確認が出来ていたカウンターメトリクスを使ったアラームを設定したかった方は、制限事項に該当しなければ今後はカスタムメトリクスの生成が不要で使えるようになります。
これを機に再検討、あるいは既存の設定を見直してみては如何でしょうか。