Amazon Aurora — Enhanced Monitoring による取得とセクション定義
Enhanced Monitoring は Aurora インスタンスが動作する OS レベルのリアルタイムメトリクスを 最短1秒粒度で収集し CloudWatch Logs に送信する機能です。 Oracle AWR の OS 統計セクション・Instance Activity に相当する CPU・メモリ・I/O・ネットワーク情報を取得できます。 本記事では各セクションの定義と JSON ログの解析方法を解説します。
1. Enhanced Monitoring の概要と有効化
Enhanced Monitoring は RDS エージェントが OS から収集したメトリクスを
CloudWatch Logs のロググループ RDSOSMetrics に JSON 形式で送信します。
通常の CloudWatch メトリクスでは取得できない OS レベルの詳細情報(ファイルシステム別 I/O・プロセスごとの CPU など)が取得できます。
有効化手順(AWS CLI)
# Enhanced Monitoring を1秒粒度で有効化
# monitoring-role-arn には rds-monitoring-role の ARN を指定
aws rds modify-db-instance \
--db-instance-identifier my-aurora-instance \
--monitoring-interval 1 \
--monitoring-role-arn arn:aws:iam::123456789012:role/rds-monitoring-role \
--apply-immediately
# IAM ロールがない場合は先に作成する
aws iam create-role \
--role-name rds-monitoring-role \
--assume-role-policy-document '{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Principal":{"Service":"monitoring.rds.amazonaws.com"},
"Action":"sts:AssumeRole"
}]
}'
aws iam attach-role-policy \
--role-name rds-monitoring-role \
--policy-arn arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole
Enhanced Monitoring は Oracle AWR の「OS Statistics」セクションに相当します。 ただし Aurora は共有ストレージアーキテクチャのため、ローカルディスク I/O は Aurora ストレージレイヤーへのネットワーク I/O として現れます。
2. セクション定義:CPU 統計
AWR対応 OS Statistics(CPU)
| JSON フィールド | 説明 | 単位 | AWR 対応 |
|---|---|---|---|
| cpuUtilization.total | CPU 全体の使用率 | % | %CPU(OS Stats) |
| cpuUtilization.user | ユーザー空間での CPU 使用率 | % | %usr |
| cpuUtilization.system | カーネル空間(システムコール)での CPU 使用率 | % | %sys |
| cpuUtilization.wait | I/O 待ちによる CPU アイドル時間 | % | %wio |
| cpuUtilization.irq | ハードウェア割り込みでの CPU 使用率 | % | %irq |
| cpuUtilization.steal | ハイパーバイザーが他 VM に割り当てた CPU 時間 | % | %steal(仮想環境固有) |
| numVCPUs | インスタンスの vCPU 数 | 個 | CPU 本数 |
3. セクション定義:メモリ統計
AWR対応 OS Statistics(Memory)
| JSON フィールド | 説明 | 単位 | AWR 対応 |
|---|---|---|---|
| memory.total | OS から見えるメモリ合計 | KB | Physical Memory(OS) |
| memory.free | 未使用メモリ | KB | Free Memory |
| memory.used | 使用中メモリ(buffers/cache を除く) | KB | Used Memory |
| memory.cached | ページキャッシュとして使用中のメモリ | KB | Page Cache |
| swap.total | スワップ領域の合計 | KB | — |
| swap.used | 使用中のスワップ量。ゼロであることが理想。 | KB | Swap Usage |
Aurora でスワップが発生している場合、メモリ不足の可能性があります。
FreeableMemory CloudWatch メトリクスとあわせて確認し、
インスタンスクラスのアップサイズまたはバッファプールサイズの調整を検討してください。
4. セクション定義:ディスク I/O 統計
AWR対応 I/O Statistics(File I/O)
| JSON フィールド | 説明 | 単位 | AWR 対応 |
|---|---|---|---|
| diskIO[].readIOsPS | デバイスあたりの読み取り I/O 回数(毎秒) | IOPS | Physical Reads |
| diskIO[].writeIOsPS | デバイスあたりの書き込み I/O 回数(毎秒) | IOPS | Physical Writes |
| diskIO[].readKbPS | 読み取りスループット | KB/s | I/O Throughput(Read) |
| diskIO[].writeKbPS | 書き込みスループット | KB/s | I/O Throughput(Write) |
| diskIO[].avgReadLatency | 読み取りの平均レイテンシ | ms | Read Latency |
| diskIO[].avgWriteLatency | 書き込みの平均レイテンシ | ms | Write Latency |
| diskIO[].util | I/O デバイスのビジー率(100% に近いと I/O 飽和) | % | I/O Utilization |
5. セクション定義:ネットワーク統計
AWR対応 OS Statistics(Network)
| JSON フィールド | 説明 | 単位 | AWR 対応 |
|---|---|---|---|
| network[].rx | インターフェイスあたりの受信バイト数(毎秒) | KB/s | Network Receive Bytes |
| network[].tx | インターフェイスあたりの送信バイト数(毎秒) | KB/s | Network Transmit Bytes |
6. セクション定義:プロセスリスト
AWR対応 Top Sessions(OS プロセス)
Enhanced Monitoring の processList セクションには、
CPU・メモリ使用量が高い上位プロセスが含まれます。
Oracle AWR の「Top Sessions」や OS の top コマンド出力に相当します。
| JSON フィールド | 説明 | AWR 対応 |
|---|---|---|
| processList[].pid | OS プロセス ID | Session ID |
| processList[].name | プロセス名(mysqld・postgres など) | Program |
| processList[].cpuUsedPc | プロセスの CPU 使用率 | %CPU in Session |
| processList[].memUsedPc | プロセスのメモリ使用率 | %Memory in Session |
| processList[].vss | 仮想メモリサイズ | Virtual Memory |
| processList[].rss | 常駐メモリサイズ(物理メモリ使用量) | Resident Memory |
| processList[].tgid | スレッドグループ ID(マルチスレッドプロセスの識別に使用) | — |
7. CloudWatch Logs からの取得
Enhanced Monitoring のデータは CloudWatch Logs のロググループ
/aws/rds/cluster/CLUSTER_ID/audit または
RDSOSMetrics に JSON 形式で送信されます。
AWS CLI でログイベントを取得
# ロググループ内のログストリームを確認
aws logs describe-log-streams \
--log-group-name RDSOSMetrics \
--log-stream-name-prefix db-INSTANCE_ID \
--query 'logStreams[*].logStreamName'
# 最新のメトリクスイベントを取得(JSON 形式)
aws logs get-log-events \
--log-group-name RDSOSMetrics \
--log-stream-name "db-INSTANCE_ID" \
--limit 5 \
--query 'events[*].message' \
--output text | python3 -m json.tool
CloudWatch Logs Insights でクエリ
-- CPU 使用率の推移を時系列で確認
fields @timestamp, cpuUtilization.total as cpu_total,
cpuUtilization.user as cpu_user,
cpuUtilization.wait as cpu_iowait
| filter ispresent(cpuUtilization.total)
| sort @timestamp desc
| limit 60
-- メモリ使用状況を確認
fields @timestamp, memory.total as mem_total,
memory.free as mem_free, swap.used as swap_used
| filter ispresent(memory.total)
| sort @timestamp desc
| limit 30
-- プロセスリストから CPU 使用率上位を抽出
fields @timestamp
| filter ispresent(processList)
| parse @message '"name":"*","cpuUsedPc":*,' as proc_name, cpu_pct
| sort cpu_pct desc
| limit 20
監視間隔は 1・5・10・15・30・60 秒から選択できます。 間隔が短いほど CloudWatch Logs への書き込みコストが増加します。 通常運用は 15〜60 秒、障害調査時は 1〜5 秒に設定するのが一般的です。
8. セクション定義まとめ
| セクション | 主な取得情報 | Oracle AWR 対応 | JSON キー |
|---|---|---|---|
| CPU 統計 | total・user・system・wait・steal | OS Statistics(CPU) | cpuUtilization.* |
| メモリ統計 | total・free・used・cached・swap | OS Statistics(Memory) | memory.*・swap.* |
| ディスク I/O 統計 | IOPS・スループット・レイテンシ・ビジー率 | I/O Statistics | diskIO[].* |
| ネットワーク統計 | 受信・送信バイト数 | OS Statistics(Network) | network[].* |
| プロセスリスト | プロセス名・CPU/メモリ使用率 | Top Sessions | processList[].* |