Amazon CloudWatch の「DB_PERF_INSIGHTS 関数」を使って Amazon Aurora MySQL の OOM キルの数を監視する

AWS

2023.11.9

Topics

はじめに

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」を選択します。

CloudWatchでDB_PERF_INSIGHTSを選択

選択すると、デフォルト値の入力された式が追加されます。
この値を任意のリソース ID やメトリクス名に変更します。

DB_PERF_INSIGHTS('RDS', 'リソースID', 'メトリクス名.統計')

メトリクス計算を使用する – Amazon CloudWatch

グラフ化したメトリクスに追加されたDB_PERF_INSIGHTS関数

ここで注意ですが、リソース名や ARN ではなく「リソース ID」を入力します。
リソース ID は、Aurora インスタンスの設定から見ることができます。

AuroraのリソースID

今回は以下のように入力しました。

DB_PERF_INSIGHTS('RDS', 'db-LXLNFZRMHOJRU44XNPIBEC67DQ', 'os.cpuUtilization.user.avg')

DB_PERF_INSIGHTSを使ってCPUメトリクスを可視化

もし、間違っていた場合は値が表示されなかったりエラーになります。

取得できるメトリクスについて

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で見たOOMキルの値

Performance Insights デフォルトダッシュボードの使い方については以下をご覧ください。

関連記事
Amazon RDS 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')

DB_PERF_INSIGHTS でoutOfMemoryKillCountを取得する

発信元の 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」以上とします。

アラームのしきい値を1以上

お好みでアクションを定義して下さい。
今回は、検証のためアクションは設定しないこととします。

アクション設定画面

作成が完了してしばらくすると OK 状態になります。

アラームで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に関するお役立ち情報を配信中!

Cold-Airflow

2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら