[新機能]Amazon RDSでOSの詳細情報を取得できるようになりました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ウィスキー、シガー、パイプをこよなく愛する大栗です。 Amazon RDSで拡張モニタリングという、CloudWatchで細かい情報を取得できる機能が発表されましたので、ご紹介したいと思います。

拡張モニタリング

RDSはOSにログイン出来ないためCloudWatchへ出力されるメトリクスを見ることで、状態を確認していました。CloudWatchで見ることができるメトリクスは限られた情報でした。そこでOSの詳細情報を取得することができる機能が 拡張モニタリング です。

実は先日開催されたAWSのカンファレンスであるre:Invent 2015でアナウンスされていました。

何が取得できる?

OSに関する様々な情報が取得できます。大きく分類すると以下の内容となります。

グループ 内容
General DBインスタンス全体の情報です
cpuUtilization CPUの使用状況の情報です
diskIO ディスクI/Oに関する情報です
fileSys ファイルシステムの情報です
loadAverageMinute 1分、5分、15分のロードアベレージです
memory メモリの使用状況に関する情報です
network ネットワークの情報です
processList 起動しているプロセスの情報です
swap SWAPの情報です
tasks タスク全体の情報です

取得できる情報の詳細は、RDSのドキュメントを参照ください。2015年12月19日時点では英語版のみに記載されています。

AWS Documentation » Amazon Relational Database Service (RDS) » User Guide » Monitoring Amazon RDS » Viewing DB Instance Metrics

使用可能なDBは?

現時点で拡張モニタリングを使用できるDBエンジンは以下の3種類です。

  • Aurora
  • MySQL
  • MariaDB

拡張モニタリングを試してみる

Auroraで試してみます。

普通にAuroraを起動していきます。

[詳細設定] の設定モニタリング という項目が増えているので、 拡張モニタリングを有効にする を「はい」に設定すると モニタリングロール詳細度 という項目が表示されます。なお既に起動しているRDSも「変更」で拡張モニタリングを有効にすることができます。

項目 内容
拡張モニタリングを有効にする 拡張モニタリングを使用するか選択します。
モニタリングロール メトリクスをCloudWatch Logsへ出力する時に使用するIAM Role を選択します。通常は「デフォルト」で問題ありません。
詳細度 取得する情報の間隔(秒)を設定します。1,5,10,15,30,60秒から選択できます。

RDS_·_AWS_Console

設定を有効にすると、RDSのコンソールからグラフを見ることができます。 モニタリングを表示拡張モニタリング を選択すると様々なグラフが表示されます。

RDS_·_AWS_Console

各種メトリクスは、CloudWatch Logsに出力されています。 RDSOSMetrics というロググループに出力されます。

CloudWatch_Management_Console

ログストリームは、DBインスタンスごとに作成されているようです。

CloudWatch_Management_Console

実際の情報は、このようになります。

{
    "engine": "Aurora",
    "instanceID": "myaurora",
    "instanceResourceID": "db-CRLZUAHQFQD3KQO62IBMEFVBDY",
    "timestamp": "2015-12-19T00:06:41Z",
    "version": 1,
    "uptime": "3 days, 21:48:51",
    "numVCPUs": 2,
    "cpuUtilization": {
        "guest": 0,
        "irq": 0,
        "system": 1.01,
        "wait": 0.3,
        "idle": 97.77,
        "user": 0.71,
        "total": 1.72,
        "steal": 0,
        "nice": 0.2
    },
    "loadAverageMinute": {
        "fifteen": 0.05,
        "five": 0.02,
        "one": 0
    },
    "memory": {
        "writeback": 0,
        "hugePagesFree": 0,
        "hugePagesRsvd": 0,
        "hugePagesSurp": 0,
        "cached": 10632900,
        "hugePagesSize": 2048,
        "free": 2635528,
        "hugePagesTotal": 0,
        "inactive": 1324260,
        "pageTables": 23900,
        "dirty": 356,
        "mapped": 8090316,
        "active": 11392724,
        "total": 15670012,
        "slab": 179628,
        "buffers": 279148
    },
    "tasks": {
        "sleeping": 221,
        "zombie": 0,
        "running": 3,
        "stopped": 0,
        "total": 224,
        "blocked": 0
    },
    "swap": {
        "cached": 0,
        "total": 0,
        "free": 0
    },
    "network": [
        {
            "interface": "eth0",
            "rx": 227.8,
            "tx": 832.6
        }
    ],
    "diskIO": [
        {
            "readLatency": 0,
            "writeLatency": 2.89,
            "writeThroughput": 483,
            "readThroughput": 0,
            "readIOsPS": 0,
            "diskQueueDepth": 0,
            "writeIOsPS": 1.8
        }
    ],
    "fileSys": [
        {
            "used": 700344,
            "name": "rdsfilesys",
            "usedFiles": 622,
            "usedFilePercent": 0.03,
            "maxFiles": 1966080,
            "mountPoint": "/rdsdbdata",
            "total": 30828540,
            "usedPercent": 2.27
        }
    ],
    "processList": [
        {
            "vss": 10141984,
            "name": "aurora",
            "tgid": 18585,
            "parentID": 1,
            "memoryUsedPc": 60.46,
            "cpuUsedPc": 0,
            "id": 18585,
            "rss": 9474172
        },
        {
            "vss": 10141984,
            "name": "aurora",
            "tgid": 18585,
            "parentID": 1,
            "memoryUsedPc": 60.46,
            "cpuUsedPc": 0.3,
            "id": 18991,
            "rss": 9474172
        },
        {
            "vss": 647308,
            "name": "OS processes",
            "tgid": 0,
            "parentID": 0,
            "memoryUsedPc": 0.19,
            "cpuUsedPc": 0,
            "id": 0,
            "rss": 23576
        },
        {
            "vss": 3236624,
            "name": "RDS processes",
            "tgid": 0,
            "parentID": 0,
            "memoryUsedPc": 2.81,
            "cpuUsedPc": 1.1,
            "id": 0,
            "rss": 442676
        }
    ]
}

さいごに

RDSの詳細な情報が取得できるようになり、様々な視点で監視できるようになりました。この情報を元に、細かいチューニングができそうです。CloudWatch Logsにデータが出力されるので、簡単にElasticsearch Serviceへストリーミングできます。Elasticsearch Serviceでリアルタイム監視もできそうでワクワクしています。