Amazon CloudWatch の「DB_PERF_INSIGHTS 関数」を使って Amazon Aurora MySQL の OOM キルの数を監視する
2023.11.9
はじめに
Amazon CloudWatch で Performance Insights のカウンターメトリクスを取得するために「DB_PERF_INSIGHTS 関数」が追加されました。
Amazon CloudWatch adds new Metric Math for RDS Performance Insights
今までは、Performance Insights では特有のメトリクスがあり、これらのメトリクスは Performance Insights でしか見ることができませんでした。
今回のアップデートで CloudWatch にメトリクスを連携することができるようになったため、このメトリクスに対して CloudWatch アラームを活用することができます。
今回は、その活用例として「os.memory.outOfMemoryKillCount」メトリクスにアラームを作成して OOM キルを監視できるようにします。
DB_PERF_INSIGHTS 関数の使い方
まずは、DB_PERF_INSIGHTS 関数の使い方について記述します。
CloudWatch メトリクスから「数式を追加」で「DB_PERF_INSIGHTS」を選択します。
選択すると、デフォルト値の入力された式が追加されます。
この値を任意のリソース ID やメトリクス名に変更します。
DB_PERF_INSIGHTS('RDS', 'リソースID', 'メトリクス名.統計')
メトリクス計算を使用する – Amazon CloudWatch
ここで注意ですが、リソース名や ARN ではなく「リソース ID」を入力します。
リソース ID は、Aurora インスタンスの設定から見ることができます。
今回は以下のように入力しました。
DB_PERF_INSIGHTS('RDS', 'db-LXLNFZRMHOJRU44XNPIBEC67DQ', 'os.cpuUtilization.user.avg')
もし、間違っていた場合は値が表示されなかったりエラーになります。
取得できるメトリクスについて
list-available-resource-metrics を使って、DB_PERF_INSIGHTS 関数で取得できるメトリクスを見ることができます。
なお、DB エンジンごとに、メトリクス名や取得可能なメトリクスに差異があるためご注意下さい。
list-available-resource-metrics — AWS CLI 2.13.20 Command Reference
Performance Insights API によるメトリクスの取得 – Amazon DocumentDB
aws pi list-available-resource-metrics --service-type RDS --identifier db-LXLNFZRMHOJRU44XNPIBEC67DQ --metric-types os
結果が多いので一部だけですが、合計 74 件ありました。
他にも、metric-types がありその値でも「DB_PERF_INSIGHTS 関数」見ることができました。
[cloudshell-user@ip-10-6-127-201 ~]$ aws pi list-available-resource-metrics --service-type RDS --identifier db-LXLNFZRMHOJRU44XNPIBEC67DQ --metric-types os { "Metrics": [ { "Metric": "os.general.numVCPUs", "Description": "The number of virtual CPUs for the DB instance", "Unit": "vCPUs" }, { "Metric": "os.cpuUtilization.guest", "Description": "The percentage of CPU in use by guest programs", "Unit": "Percent" },... ] }
なお、DB_PERF_INSIGHTS 関数で取得できるメトリクスには制限があるためご注意下さい。
DB_PERF_INSIGHTS によって取得される 1 分未満の粒度の高解像度メトリックは、 DBLoad メトリック、またはより高い解像度で拡張モニタリングを有効にしている場合はオペレーティング システム メトリックにのみ適用されます。
AWS データベースから Performance Insights カウンターメトリクスのアラームを作成する – Amazon CloudWatch
「DB_PERF_INSIGHTS 関数」を使うことで、CloudWatchダッシュボードでもメトリクスを確認することができるようになります。
しかし、Performance Insightsで取得できるメトリクスだけを確認する場合は、CloudWatch だと設定の手間があるためPerformance Insights デフォルトダッシュボードをご活用下さい。
Performance Insights デフォルトダッシュボードの使い方については以下をご覧ください。
「os.memory.outOfMemoryKillCount」のアラームを作成
では、本題です。
「DB_PERF_INSIGHTS 関数」を使って実際に OOM キルを検知するアラームを作成します。
os.memory.outOfMemoryKillCount とは
まず初めに、今回取得するメトリクスについて記述します。
「os.memory.outOfMemoryKillCount」は Aurora MySQL と Aurora PostgreSQL にだけ提供されている Performance Insights の OS メトリクスとなります。
「os.memory.outOfMemoryKillCount」の値は OOM キルが行われたときに値が増加します。
os.memory.outOfMemoryKillCount
メモリ不足キルカウント
前回の収集間隔で発生した OOM キルの数
Performance Insights カウンターメトリクス – Amazon Aurora
OOM は、メモリ不足に陥った際に発生するエラーのことを指します。
そのため、このメトリクスを検知することでいち早くデータベースの異変に気づくことができます。
「os.memory.outOfMemoryKillCount」を取得
では、実際にCloudWatch アラームを作成していきます。
先程と同じ要領で式を作成します。
DB_PERF_INSIGHTS('RDS', 'db-LXLNFZRMHOJRU44XNPIBEC67DQ', 'os.memory.outOfMemoryKillCount.avg')
発信元の JSON データはこの様になってます。
{ "metrics": [ [ { "expression": "DB_PERF_INSIGHTS('RDS', 'db-LXLNFZRMHOJRU44XNPIBEC67DQ', 'os.memory.outOfMemoryKillCount.avg')", "label": "式1", "id": "e1", "period": 60 } ] ], "view": "timeSeries", "stacked": false, "region": "us-east-1", "stat": "Average", "period": 60 }
値が取得できていれば OK です。
CloudWatch アラームの作成
先程作成した式のアクションからアラームを作成します。
「ベル」のマークを押すことでメトリクスから直接アラームを作成することができます。
先程入力した値でメトリクスが取れていることを確認します。
OOM キルは基本発生していない「0」が理想なので、条件は「1」以上とします。
お好みでアクションを定義して下さい。
今回は、検証のためアクションは設定しないこととします。
作成が完了してしばらくすると OK 状態になります。
これで、OOM キルを検知することができるようになりました。
まとめ
今まで、Performance Insights 内で完結していたメトリクスを CloudWatch でも監視・評価することができるようになったアップデートでした。
個人的には、今回ご紹介したメトリクス以外にも、「AAS」を監視することでデータベースのパフォーマンス監視もできるので優れていると思います。
参考情報
メトリクス計算を使用する – Amazon CloudWatch
Amazon CloudWatch adds new Metric Math for RDS Performance Insights
Performance Insights カウンターメトリクス – Amazon Aurora
Amazon RDS for MySQL で確保できるメモリが少ない問題をトラブルシューティングする | AWS re:Post
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。
Recommends
こちらもおすすめ
-
Oracle を BYOL で使う時の AWS 仮想コアの話
2015.7.15
-
AWSとWordPressで企業Webサイトを構築する
2019.5.16
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16