AuroraAWS

Amazon AuroraのスロークエリをCloudWatchへ出力する

AuroraのスロークエリをCloudWatchへ出力してみます。

default.aurora-mysql5.7やdefault.mariadb10.6など、あらかじめAWSで用意されているデフォルトパラメータグループは各設定値の変更ができません。

そのため稼働中のAuroraにデフォルトのパラメータグループが適用されている場合(Aurora作成時に明示的に変更しないとデフォルトパラメータグループが適用されます)は、別のパラメータグループを作った上で、それをDBクラスタへ適用します。

なおスロークエリをCloudWatch出力することに関してはDBの再起動は不要です。

AWSマネジメントコンソール上での設定が2箇所あり少し戸惑ったのでメモっておきます。

スポンサーリンク

スロークエリのCloudWatch出力手順

スロークエリを出力する設定と、それをCloudWatchへ出力する設定2つの設定を有効にします。

パラメータグループの新規作成

AWSマネジメントコンソールの画面上部検索窓 [ RDS ] で検索 → 当該サービスをクリック → RDS画面の左ペイン [ パラメータグループ ] → 画面右の [ パラメータグループの作成 ] をクリックし、次画面でパラメータグループを設定します。

パラメータグループの詳細画面で [ タイプ ] を2種類の中から選択します。

DBクラスター全体に適用させたい場合は、DB Cluster Parameter Group を選択、逆にDBクラスターの各インスタンス個別に適用させたい場合は、DB Parameter Group を選択します。

そのほか、パラメータグループファミリーやグループ名を設定したら [ 作成 ] をクリックします。

パラメータグループの適用とCloudWatchへの出力設定

パラメータグループの適用

RDS画面の左ペイン [ データベース ] → 変更対象のDB識別子 にチェック → 画面上の [ 変更 ] をクリック → [ DB クラスターのパラメータグループ ] もしくは [ DB パラメータグループ ] を作成したパラメータグループ へ変更します。

[ DB クラスターのパラメータグループ ] を変更した場合は、変更したインスタンス以外の当該設定も自動的に変更されます。クラスター全体が対象となります。

CloudWatchへの出力設定

[ ログのエクスポート ] のスロークエリログにチェックを入れます。

設定の保存

画面下部の [ 続行 ] をクリックします。

次画面で [ 変更を適用するタイミング ] の すぐに適用 にチェックを入れ → [ クラスターの変更 ] もしくは [ DBインスタンスの変更 ] をクリックします。

パラメータグループのスロークエリの設定を変更

作成したパラメータグループをクリックし次画面の検索ボックスで slow_query_log と入力 → 画面右上の[ パラメータの編集 ] をクリック → slow_query_logのプルダウンから 1 を選択 → 画面右上の [ 変更の保存 ] をクリックします。

スロークエリを出力する閾値(デフォルトは10秒以上)を変更する場合は、検索ボックスで long_query_time と入力 → 画面右上の[ パラメータの編集 ] をクリック → 値に数値を入力します。ミリ秒を指定するときは2.2と小数を入れます。

スロークエリがCloudWatchへ出力されることの確認

変更後、Auroraへ接続しsleepコマンドでスロークエリを出力してみます。

mysql> select sleep(2.3);
+------------+
| sleep(2.3) |
+------------+
|          0 |
+------------+
1 row in set (2.30 sec)

mysql>

AWSマネジメントコンソールの画面上部検索窓 [ CloudWatch ] で検索 → 当該サービスをクリック → 画面の左ペイン [ ログ ] → [ ロググループ ] → /aws/rds/cluster/クラスター名/slowquery をクリックします。

当該インスタンスのログストリームをクリックすると以下のようにスロークエリが出力されています。

# Time: 2023-02-23T04:05:07.540896Z
# User@Host: admin[admin] @  [10.1.0.47]  Id:    18
# Query_time: 2.301587  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1677125107;
select sleep(2.3);

Tips

Auroraに接続して設定を確認

mysqlコマンドなどでAuroraへ直接接続して実際にパラメータが変更されているかを確認できます。

mysql> show global variables like 'slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | ON    |
+----------------+-------+
1 row in set (0.01 sec)

mysql>
mysql> show global variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 2.200000 |
+-----------------+----------+
1 row in set (0.00 sec)

mysql>

パラメータグループを適用した後にスロークエリの設定を変更すると再起動が不要

こちらのAWS公式ブログでは、パラメータグループを作成して、スロークエリの設定を変更した後にDBクラスタに適用して再起動しています。

AuroraのタイムゾーンをUTCからJSTへ変更する記事でも言及しましたが、パラメータグループを適用した後にスロークエリの出力設定を変更すると再起動が不要となります。

再起動が許されない場面では本記事の流れでやってみてください。

今回は以上です〜ノシ

参考

(´・ω・`)ゞアリガトゴザイマス.。.・゚

Aurora MySQL データベースログの概要
Amazon CloudWatch Logs への Amazon Aurora MySQL ログの発行
Amazon RDS MySQL DB インスタンスのログを有効にしてモニタリングする方法を教えてください。