RDS でスロークエリログが発生したことを検知する CloudWatch Alarm をマネジメントコンソールから設定してみた

RDS でスロークエリログが発生したことを検知する CloudWatch Alarm をマネジメントコンソールから設定してみた

Clock Icon2025.05.09

こんにちは、岩城です。

先日、RDS でスロークエリログが発生したことを検知したいことがありましたので、方法を共有したいと思います。

今回のケースでは、スロークエリログが出力したことだけを検知したかったので、実際のログ内容を検知内容に含める必要はありませんでした。

アラームに設定するメトリクスは IncomingLogEvents

アラームに設定するメトリクスはIncomingLogEventsにしました。

IncomingLogEventsは、CloudWatch Logs のロググループにアップロードされたログイベントの数をカウントするメトリクスです。

vscode-drop-1746753347082-esequhljkcf.png
CloudWatch Logs のメトリック

CloudWatch Alarm を設定する

CloudWatch Alarm を設定する方法は様々あるのですが、本エントリではマネジメントコンソールから設定します。

vscode-drop-1746755748210-6r0949idpyl.png

メトリクスを選択する際、マネジメントコンソール特有の注意があります。

選択可能なメトリクスは、一度でもメトリクスが記録されたものが対象になる、ということです。

この時点では RDS のスロークエリログがまだ一度も出力されていなかったので、エラーログ以外はメトリクスが存在しませんでした。

vscode-drop-1746756775140-6t34xst8tf2.png

vscode-drop-1746756835927-xt66vx9c438.png

では、どうすれば良いでしょうか。

答えは簡単です。適当なロググループを選択して先に進み、後からロググループ名を書き換えれば良いです。

適当なロググループのIncomingLogEventsを選択して先に進みます。

vscode-drop-1746757866139-ljlpm4pmhd8.png

メトリクスと条件の指定でLogGroupNameをスロークエリログのロググループ名である/aws/rds/instance/<インスタンス名>/slowqueryに書き換えます。

1 件でも出力されたらすぐに検知したかったので、統計を 合計 期間を 1 分、1 以上のときにアラームをトリガーするようにしました。

vscode-drop-1746760441613-05ad7knodoa.png

メール本文に記載するアラームの説明は「SlowQueryが発生しました!」にしました。

vscode-drop-1746761711605-e5yga24xskn.png

以上でアラームの設定は完了です。

意図的にスロークエリを発生させて CloudWatch Alarm をトリガーする

CloudShell VPC environment から RDS に接続して、クエリをスリープさせて意図的にスロークエリを発生させます。

CloudShell VPC environment は、VPC 上で CloudShell を起動する機能です。

MySQL クライアントが標準インストールされているので、わざわざ EC2 を起動せずとも簡単に RDS に接続できるので便利です。

[アップデート] CloudShell を任意の VPC 上で起動できる CloudShell VPC environment が提供されました! | DevelopersIO

RDS のパラメーターグループでlong_query_timeを 1 に設定していたので、5 秒スリープさせればスロークエリログが出力されます。

vscode-drop-1746767055191-bb0cgb0toqb.png

MySQL [(none)]> SELECT sleep(5);
+----------+
| sleep(5) |
+----------+
|        0 |
+----------+
1 row in set (5.001 sec)

スロークエリログが出力されたことでアラームがトリガーされました。

vscode-drop-1746767151989-kfuq1kg6tw.png

無事メールも飛んできました。

vscode-drop-1746767291795-kvcgk2sg7ol.png

以上でスロークエリログが 1 件でも出力された検知できるようになりました。

おわりに

メトリクスがまだ記録されていない状態で、CloudWatch Alarm を作成し、アラームがトリガーされることを確認できました。

普段マネジメントコンソールから CloudWatch Alarm を作成することがないので、メトリクスを選択できなかった時は一瞬戸惑いました。

本エントリがどなたかのお役に立てれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.