Amazon Aurora — スロークエリログ / 監査ログによる取得とセクション定義
Aurora MySQL のスロークエリログ・一般クエリログ、Aurora PostgreSQL の
log_min_duration_statement によるスロークエリログを CloudWatch Logs に出力し、
CloudWatch Logs Insights でクエリ分析する方法を解説します。
Oracle AWR の SQL Statistics(重い SQL の自動検出)に相当する情報を取得できます。
Database Activity Streams による監査ログのリアルタイムキャプチャも紹介します。
1. Aurora MySQL: スロークエリログの有効化と CloudWatch Logs 連携
Aurora MySQL ではパラメータグループで slow_query_log を有効にし、
RDS コンソールの「ログのエクスポート」設定で CloudWatch Logs に送信します。
パラメータグループの設定(AWS CLI)
# スロークエリログを有効化(1秒以上のクエリをログ)
aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name my-aurora-mysql-params \
--parameters \
"ParameterName=slow_query_log,ParameterValue=1,ApplyMethod=immediate" \
"ParameterName=long_query_time,ParameterValue=1,ApplyMethod=immediate" \
"ParameterName=log_output,ParameterValue=FILE,ApplyMethod=immediate" \
"ParameterName=log_queries_not_using_indexes,ParameterValue=0,ApplyMethod=immediate"
# CloudWatch Logs にスロークエリログをエクスポート
aws rds modify-db-cluster \
--db-cluster-identifier my-aurora-cluster \
--cloudwatch-logs-export-configuration '{"EnableLogTypes":["slowquery","error","general"]}' \
--apply-immediately
スロークエリログは
/aws/rds/cluster/CLUSTER_ID/slowquery に送信されます。
一般クエリログは /aws/rds/cluster/CLUSTER_ID/general、
エラーログは /aws/rds/cluster/CLUSTER_ID/error です。
2. セクション定義(Aurora MySQL):スロークエリログ
Aurora MySQL AWR対応 SQL Statistics(重い SQL の自動検出)
スロークエリログの各行には以下の情報が含まれます。
| フィールド | 説明 | AWR 対応 |
|---|---|---|
| Query_time | クエリの実行時間(秒) | Elapsed Time |
| Lock_time | ロック待ち時間(秒) | Wait Time(Row Lock) |
| Rows_sent | 返却行数 | Rows Processed |
| Rows_examined | 検査行数。Rows_sent との比率でインデックス効率を評価する。 | Rows Fetched(物理) |
| User@Host | 実行ユーザーと接続元ホスト | SQL by User |
| Timestamp | クエリ実行時刻(UTC) | — |
| SET timestamp | Unix エポック形式のタイムスタンプ | — |
スロークエリログのサンプル形式
# Time: 2026-05-29T10:15:30.123456Z
# User@Host: appuser[appuser] @ 10.0.1.50 [] Id: 12345
# Query_time: 5.234567 Lock_time: 0.000123 Rows_sent: 1 Rows_examined: 1234567
SET timestamp=1748513730;
SELECT COUNT(*) FROM orders WHERE status = 'pending' AND created_at < '2026-01-01';
3. Aurora PostgreSQL: スロークエリログの有効化と CloudWatch Logs 連携
# 1秒以上のクエリをスロークエリとしてログに記録
aws rds modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name my-aurora-pg-params \
--parameters \
"ParameterName=log_min_duration_statement,ParameterValue=1000,ApplyMethod=immediate" \
"ParameterName=log_statement,ParameterValue=none,ApplyMethod=immediate" \
"ParameterName=log_connections,ParameterValue=1,ApplyMethod=immediate" \
"ParameterName=log_disconnections,ParameterValue=1,ApplyMethod=immediate" \
"ParameterName=log_line_prefix,ParameterValue='%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ',ApplyMethod=immediate"
# CloudWatch Logs にログをエクスポート
aws rds modify-db-cluster \
--db-cluster-identifier my-aurora-pg-cluster \
--cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql"]}' \
--apply-immediately
4. セクション定義(Aurora PostgreSQL):スロークエリログ
Aurora PostgreSQL AWR対応 SQL Statistics(重い SQL の自動検出)
| フィールド(log_line_prefix 含む) | 説明 | AWR 対応 |
|---|---|---|
| duration: N ms | クエリの実行時間(ミリ秒) | Elapsed Time |
| user= | 実行ユーザー名 | SQL by User |
| db= | 接続データベース名 | — |
| app= | アプリケーション名(application_name パラメータ) |
SQL by Module |
| client= | 接続元 IP アドレス | — |
| statement: | 実行された SQL テキスト(完全なクエリ) | SQL Text |
| LOG: connection received/authorized | 接続・切断ログ(log_connections / log_disconnections 有効時) | Logons per Second |
Aurora PostgreSQL スロークエリログのサンプル形式
2026-05-29 10:15:30.123 UTC [12345]: [3-1] user=appuser,db=mydb,app=webapp,client=10.0.1.50
LOG: duration: 5234.567 ms statement: SELECT COUNT(*) FROM orders
WHERE status = 'pending' AND created_at < '2026-01-01';
5. CloudWatch Logs Insights による分析
CloudWatch Logs Insights を使うと、スロークエリログをSQL ライクなクエリで集計・分析できます。 マネジメントコンソールの「CloudWatch」→「ログのインサイト」から利用します。
Aurora MySQL: スロークエリ上位集計
-- スロークエリの実行時間が長い上位を集計
fields @timestamp, @message
| filter @message like /Query_time/
| parse @message "Query_time: * " as query_time
| parse @message "Rows_examined: * " as rows_examined
| parse @message /SET timestamp=\d+;\n(?P.+)$/
| stats
count() as executions,
avg(toNumber(query_time)) as avg_query_sec,
max(toNumber(query_time)) as max_query_sec,
sum(toNumber(rows_examined)) as total_rows_examined
by sql_text
| sort max_query_sec desc
| limit 20
Aurora PostgreSQL: スロークエリ上位集計
-- duration が大きいクエリを集計
fields @timestamp, @message
| filter @message like /duration:/
| parse @message "duration: * ms" as duration_ms
| parse @message "statement: *" as sql_text
| stats
count() as executions,
avg(toNumber(duration_ms)) as avg_ms,
max(toNumber(duration_ms)) as max_ms
by sql_text
| sort max_ms desc
| limit 20
-- 時間帯別のスロークエリ発生数
fields @timestamp, @message
| filter @message like /duration:/
| parse @message "duration: * ms" as duration_ms
| filter toNumber(duration_ms) > 3000
| stats count() as slow_count by bin(5m)
| sort @timestamp asc
Logs Insights のクエリ結果はマネジメントコンソールからCSVエクスポートできます。 繰り返し使うクエリは「保存したクエリ」に登録しておくと便利です。
6. Database Activity Streams による監査ログ
Database Activity Streams(DAS)は Aurora の全データベースアクティビティを リアルタイムで Amazon Kinesis Data Streams に送信する機能です。 Oracle の統合監査(Unified Auditing)に相当するセキュリティ・コンプライアンス用途の監査証跡を提供します。
有効化(AWS CLI)
# Database Activity Streams を同期モードで有効化
aws rds start-activity-stream \
--resource-arn arn:aws:rds:ap-northeast-1:123456789012:cluster:my-aurora-cluster \
--mode sync \
--kms-key-id arn:aws:kms:ap-northeast-1:123456789012:key/YOUR-KEY-ID \
--apply-immediately
DAS イベントの主なフィールド
| フィールド | 説明 | AWR/監査 対応 |
|---|---|---|
| type | イベントタイプ(connect / disconnect / query / record) | 監査イベント種別 |
| dbUserName | 実行ユーザー | 監査:実行者 |
| databaseName | 対象データベース名 | 監査:対象 DB |
| command | 実行した SQL コマンドタイプ(SELECT・INSERT・UPDATE・DELETE・DDL など) | 監査:SQL 種別 |
| commandText | 実行された SQL テキスト(難読化設定に依存) | 監査:SQL Text |
| remoteHost | 接続元 IP アドレス | 監査:接続元 |
| exitCode | 実行結果コード(0 = 成功) | 監査:成功/失敗 |
Database Activity Streams は追加コストが発生します。 書き込まれる Kinesis シャード数と処理量に応じて課金されます。 セキュリティ・コンプライアンス要件がない場合はスロークエリログで代替することを検討してください。
7. セクション定義まとめ
| セクション | エンジン | 主な取得情報 | Oracle AWR 対応 | 送信先 |
|---|---|---|---|---|
| スロークエリログ | Aurora MySQL | Query_time・Lock_time・Rows_examined・SQL テキスト | SQL Statistics(重い SQL) | CWL /slowquery |
| スロークエリログ | Aurora PostgreSQL | duration・user・db・app・SQL テキスト | SQL Statistics(重い SQL) | CWL /postgresql |
| 一般クエリログ | Aurora MySQL | 全クエリの接続・実行記録(量が多いため通常は無効) | 全 SQL トレース相当 | CWL /general |
| エラーログ | 両エンジン | エラー・警告・起動停止ログ | Alert Log | CWL /error |
| Database Activity Streams | 両エンジン | 全 SQL アクティビティ・ユーザー・接続元・成功/失敗 | Oracle 統合監査 | Kinesis Data Streams |