RDS for MySQLでスロークエリログを出力させる

## 現在の設定の確認方法

* スロークエリのログ出力がオンになっているか確認

```
SHOW VARIABLES LIKE 'slow_query%'
```

* 何秒をスロークエリと判断しているか確認

```
show variables like 'long%';
```

* スロークエリログを見る ※log_outputがTABLEになっている場合

```
SELECT * FROM mysql.slow_log; 
```

## スロークエリを出力させる手順

ログ関連の設定に限らず、RDSのサーバーには直接SSHすることはできないため、DBパラメーターの変更は「パラメーターグループ」を設定し、インスタンスに関連づけます。
動的パラメータは値の変更後すぐ適用、静的パラメータはDBインスタンスを手動で再起動することで適用されます。
スロークエリのログ出力のために変更が必要なパラメーターは全て動的パラメータのため、設定による再起動は不要です。

### カスタムパラメーターグループの作成
* デフォルトのパラメーターグループは値を変更できないため、カスタムのパラメーターグループを作成し、以下の通り値を編集し、インスタンスに適用する。 [MySQL データベースログファイル](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html)
    * slow_query_log → 1
    * long_query_time → 任意の秒数
    * log_output → FILE（ClowdWatchに出力するために必要）
    
![100857160-b5542f80-34cf-11eb-85f6-23a9fe329226.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260824/7e9c085f-b53b-b278-2333-d925544686d1.png)

### パラメーターグループの適用
* DBインスタンスの変更メニューから、作成したパラメーターグループを適用する。
*  RDSは週次でメンテナンスが行われており（[メンテナンスウィンドウ](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_UpgradeDBInstance.Maintenance.html)）、即時反映の場合を覗きインスタンスの設定変更はその時反映される。

![100857173-b8e7b680-34cf-11eb-8452-d134b1f2d966.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260824/e65d562d-38a3-40f1-9fe3-b3101be9e049.png)

* インスタンスの設定を変更する
    * スロークエリにチェック

![100857179-bbe2a700-34cf-11eb-9896-ab0152974e48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260824/5922cc06-ee2a-9c5f-0435-c7cdff15224a.png)

### 設定反映の確認
* 意図的に5秒のスロークエリを流す

```
select sleep(5); 
```
* するとすぐにClowdWatchに新しいロググループが追加される。

### アラームを作成する
* Cloudwatchにログが出力された際にSNSに通知するには、メトリクスに対してアラームを作成します。
* コンソールからアラームの作成を選択
![100857199-c1d88800-34cf-11eb-9feb-d8a8f79dcb20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260824/df59ac7f-7b54-96d4-5927-2f2f531085cd.png)


* メトリクスの選択で「ログ」を選択
![100857200-c2711e80-34cf-11eb-9dcb-1c88db6e9073.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260824/1275b2fe-5f4c-a609-4b7c-8b743cbe2efa.png)


* 該当のロググループの「IncomingLogEvents」を選択（[参考](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CloudWatch-Logs-Monitoring-CloudWatch-Metrics.html)）
![100857203-c3a24b80-34cf-11eb-8195-d90c82027e01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260824/06c4ee08-7d98-c45a-97fb-8791c5262c9a.png)

* 今回は合計が0より大きい場合にアラームを出す
![100857187-be450100-34cf-11eb-8e51-9e8f208d0968.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260824/418c3677-6652-1bc8-6f66-16a049c32f40.png)

* 通知したいSNSトピックを選択もしくは新規作成
![100857191-bf762e00-34cf-11eb-951e-43ceeb03c28f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260824/c875f0c1-507f-1e70-6370-0da77ce8343c.png)


## 参考
### 公式
* [MySQL データベースログファイル](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_LogAccess.Concepts.MySQL.html#USER_LogAccess.MySQL.Generallog)
* [DB パラメータグループを使用する](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html)
* [Amazon RDS MySQL DB インスタンスのログを有効にしてモニタリングする方法を教えてください。](https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-mysql-logs/)

### その他
* [Amazon RDS for MySQLでスロークエリーログを出力させる手順](http://blog.serverworks.co.jp/tech/2016/05/09/rds-for-mysql-slow-query-log/)
* [RDSパラメーターグループはいつ変更が有効になるのか?](https://dev.classmethod.jp/cloud/aws/when-are-rds-parameters-applied/)