今月誕生日の人、おめでとうございます🎉 エデュケーショナルサービス課の森純子です。
「ログにERRORが出たらすぐ気づきたい。でもメトリクスフィルター作るの面倒…」 そんなお悩み、ありませんでしたか?
2026年7月1日のアップデートで、CloudWatch Logsのクエリ結果から直接アラームを作成できる機能 がリリースされました🎉
Amazon CloudWatch supports creating alarms from log queries(2026年7月1日)
従来はログからアラームを作るために「メトリクスフィルター作成 → カスタムメトリクス生成 → アラーム設定」と3ステップ必要でした。今回の機能で、ログクエリに直接閾値を設定してアラームを作成できます。中間ステップ不要です。
ということで、やってみました。
本記事の登場サービス
| 略称 | 正式名称 |
|---|---|
| CloudWatch | Amazon CloudWatch |
| CloudWatch Logs | Amazon CloudWatch Logs |
| Logs Insights | Amazon CloudWatch Logs Insights |
| Lambda | AWS Lambda |
| SNS | Amazon Simple Notification Service |
対象読者
- CloudWatch Logsを使っていて、ログ監視をもっと簡単にしたい方
- メトリクスフィルターの管理が面倒だと感じている方
- ログからアラームを設定したいが、手順が多くて諦めていた方
本記事で分かること
- ログクエリアラーム(Log Alarm)の作成手順(マネジメントコンソール)
- 従来のメトリクスフィルター方式との違い
- アラーム通知メールにログ行が含まれる設定方法
- 作成から発火までの所要時間
従来の方法との違い
従来(メトリクスフィルター方式):
- ロググループにメトリクスフィルターを作成
- フィルターがカスタムメトリクスを生成
- カスタムメトリクスに対してアラームを設定
今回の新機能(Log Alarm方式):
- ログクエリを書いて閾値を設定 → 完了
メトリクスフィルターの作成・管理が不要になります。さらに、Logs Insightsのクエリをそのまま使えるので、filter @message like /ERROR/ のような柔軟なフィルタ条件を直接アラームに設定できます。
検証手順と結果
検証環境
| 項目 | 設定 |
|---|---|
| リージョン | ap-northeast-1(アジアパシフィック(東京)) |
| 検証用リソース | AWS Lambda関数 |
| ロググループ | /aws/lambda/cwlogs-tag-enrichment-test |
| 通知先 | Amazon SNSトピック(Eメール) |
手順1: SNSトピックを作成する
アラーム通知の送信先を作成します。
- Amazon SNS コンソールを開く
- 「トピックの作成」→ タイプ: スタンダード、名前を入力して作成
- 作成したトピックに「サブスクリプションの作成」→ プロトコル: Eメール、エンドポイントにメールアドレスを入力
- 届いたメールの「Confirm subscription」をクリック

クリック後、新しいブラウザタブに「Subscription confirmed!」のメッセージが出れば成功です。

手順2: ERRORログを出力するLambda関数を用意する
アラーム発火を確認するため、ERRORログを出力するLambda関数を用意して実行します。
def handler(event, context): print("Hello from cwlogs-tag-enrichment-test!") print("ERROR: This is a test error for log alarm verification.") return {"statusCode": 200, "body": "OK"}
手順3: ログアラームを作成する
ここが今回の本題です。
1.CloudWatch コンソール → 左メニュー「アラーム」→「アラームの作成」
2.データソースで「ログ」を選択
3.Log AnalyticsはLogs Insights・Live Tail・Contributor Insightsを統合した新しいUIです。クエリの書き方は従来のLogs Insightsと同じです。「Log Analyticsでクエリを作成」を押す → Log Analyticsの画面に遷移

4.ロググループを選択し、以下のクエリを入力して「実行」
fields @timestamp, @message | filter @message like /ERROR/ | sort @timestamp desc | limit 10
5.ERRORログが取れることを確認したら、右上の「アラームに進む」を押す

6.アラームの条件を設定:
| 設定項目 | 値 |
|---|---|
| 集計式 | COUNT(*) |
| 比較演算子 | より大きい(>) |
| しきい値 | 0 |
| 評価頻度 | 5分 |
| 開始時間オフセット | 5分 |
| データポイント | 1 / 1 |
| 欠落データの処理 | 欠落データを見つかりませんとして処理 |
7.IAM権限: 「必要な権限を持つ新しいロールを作成」→「ロールを作成」を押す

8.「次へ」→ アクションの設定画面へ
9.「クエリ結果をアクションに含める」を展開し、クエリ結果の数を 5 に設定。IAMロールも「ロールを作成」を押す
10.「通知の追加」→ アラーム状態のときに作成したSNSトピックへ通知を設定
11.「次へ」→ アラーム名を入力 →「次へ」→ プレビューを確認して「ログアラームを作成」
次の成功メッセージが出ればOKです。

結果
アラーム作成から約10分後、アラームがALARM状態に遷移しました。

同時にSNS通知メールが届きました。メールには以下の情報が含まれています:
- アラーム名と状態遷移理由
- クエリ文字列と集計式
- アラームを発火させたログ行(
ERROR: This is a test error for log alarm verification.) - Logs Insightsでクエリ結果を表示するリンク

従来のメトリクスフィルター方式では、アラーム通知に「メトリクスの値が閾値を超えた」としか書かれず、どのログ行が原因かは別途Logs Insightsで確認する必要がありました。Log Alarm方式では、通知メールに直接ログ行が含まれるため、メールを見ただけで何が起きたか分かります。
作成されるIAMロール
マネジメントコンソールからLog Alarmを作成すると、以下の2つのIAMロールが自動作成されます。
| ロール | 用途 |
|---|---|
| Log-Alarm-execute-query-* | スケジュールクエリの実行用。logs.amazonaws.comが引き受ける |
| Log-Alarm-include-query-results-in-action-* | 通知にログ行を含める用。cloudwatch.amazonaws.comが引き受ける |
CLIで作成する場合は手動でIAMロールを用意する必要がありますが、コンソールならボタン1つで作成してくれます。
利用時の注意点
- 作成直後は「データ不足(INSUFFICIENT_DATA)」状態から始まる。最初のスケジュールクエリが実行されるまで待つ
- 評価頻度の最小は1分、最大は24時間。検証時は5分がちょうど良い
- 対応リージョン: 全商用リージョン(中東(UAE)、中東(バーレーン)を除く)
- コンソール、AWS CLI、AWS CloudFormation、AWS SDKで作成可能
- 自動作成されたIAMロールは削除・編集しないこと(アラームが動作しなくなる)
コスト
| 項目 | コスト |
|---|---|
| Log Alarm | アラーム1つあたり$0.10/月(標準アラームと同じ) |
| スケジュールクエリ | Logs Insightsのクエリスキャン量に応じた通常料金 |
| SNS通知 | Eメール通知は無料(1,000件/月まで) |
| Lambda(検証用) | 無料利用枠内 |
メトリクスフィルター方式と比較して、カスタムメトリクスの料金($0.30/月/メトリクス)が不要になります。
まとめ
- Log Alarmはログクエリから直接アラームを作成できる。メトリクスフィルター不要
- マネジメントコンソールからIAMロール作成含めて全てGUIで完結する
- 通知メールにアラームを発火させたログ行が含まれる。原因特定が即座にできる
- 作成から発火まで約10分(評価頻度5分の場合)
- 従来のメトリクスフィルター方式より手順が少なく、カスタムメトリクス料金も不要
「ログにERRORが出たら通知してほしい」という要件なら、今後はLog Alarm一択です。ぜひ試してみてください!
CLIで作成する場合
マネジメントコンソールを使わずCLIで作成する場合は put-log-alarm コマンドを使用します。
aws cloudwatch put-log-alarm \
--alarm-name "lambda-error-log-alarm" \
--comparison-operator GreaterThanThreshold \
--threshold 0 \
--query-results-to-evaluate 1 \
--query-results-to-alarm 1 \
--treat-missing-data notBreaching \
--alarm-actions "arn:aws:sns:ap-northeast-1:<アカウントID>:cloudwatch-log-alarm" \
--scheduled-query-configuration '{
"QueryString": "fields @timestamp, @message | filter @message like /ERROR/",
"LogGroupIdentifiers": ["/aws/lambda/cwlogs-tag-enrichment-test"],
"ScheduledQueryRoleARN": "arn:aws:iam::<アカウントID>:role/CWLogsScheduledQueryRole",
"AggregationExpression": "count(*)",
"ScheduleConfiguration": {
"ScheduleExpression": "rate(5 minutes)",
"StartTimeOffset": 300
}
}' \
--region ap-northeast-1
CLIの場合はIAMロールを事前に作成する必要があります。詳細は公式ドキュメントを参照してください。