Amazon CloudWatch Events のログを Amazon CloudWatch Logs Insights で検索してみる!

Amazon CloudWatch Events のログを Amazon CloudWatch Logs Insights で検索してみる!

Clock Icon2019.06.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは 園部です。

Amazon CloudWatch Events(以降、CWE) のターゲットに、Amazon CloudWatch Logs(以降、CWL)を指定できるようになりました!

Amazon CloudWatch Events Now Supports Amazon CloudWatch Logs as a Target and Tagging of CloudWatch Events Rules

こちらについては、弊社中川がブログにしてくれています!

[アップデート] CloudWatch EventsのターゲットとしてCloudWatch Logsがサポートされました!

なので私の方は、ちょっと違うことをやってみたいと思います。

何ができそうのか?

CWE のターゲットとしてCWL へ保存出来ると何が出来るのか?

  • ログとして保存
  • CloudWatch Logs でメトリクスフィルタを作成してアラート通知
  • CloudWatch Logs Insights で検索・分析

やってみた

公式ドキュメント チュートリアル をベースに以下をやってみます。

  • パターン1: 一定期間内に3回以上起動と停止を繰り返した(3回停止)場合に通知
  • パターン2: アカウント内で期間内に停止していたインスタンスと回数を検索

事前準備

CloudWatch Events ルール作成

CloudWatch > イベント > ルール > ルールの作成 を選択

EC2 のステータスが停止となった場合をトリガーとしてイベントソースに設定します。

ターゲットに、ロググループ を選択し、グループ名を入力または指定します。

  • グループ: ec2 を入力
  • 入力の設定: 一致したイベント (インプットトランスフォーマーを利用すればカスタマイズしたメッセージをログに保存もできそう)

名前、説明、状態 を入力 > ルールの作成 を選択

設定の詳細 を選択

CloudWatch logs ロググループ確認

CloudWatch > ログ を選択

すでに、 /aws/events/ec2 が作成されています。

パターン1: CloudWatch Logs メトリクスフィルタ での監視・通知

EC2インスタンスが停止した際に自動復旧する仕組みを取っているケースはあるかと思います。

その復旧対応では、正常復旧しなかった場合に通知するケースを想定しています。

メトリクスフィルタ作成

CloudWatch > ログ > 今回作成したロググループを選択 > メトリクスフィルタの作成 を選択

フィルタパターン: stopped

メトリクスの割り当て を選択

メトリクスの詳細を入力 > フィルタの作成 を選択

アラート作成

アラームの作成 を選択

メトリクスの条件を指定していきます。

  • 統計: 合計
  • 期間: 15分
  • 条件: 以上
  • 閾値: 3

次へ を選択

SNSトピック(E-mail)を選択

それでは、起動と停止を繰り返します。

検知と通知

3回以上停止するとアラームとなります。

設定したメールアドレスに通知がされます。

パターン2: CloudWatch Logs Insights での検索

影響の大きな障害(ないといいですね...)報告などで、期間内に停止したインスタンスを検索するケースを想定しています。

ログ出力と確認

事前に、3台作成しておいたEC2を全て停止します。

CloudWatch > ログ を選択

3つ作成されています。詳細を確認すると以下のような内容が保存されています。

それでは、何度かインスタンスを起動と停止を繰り返してログを増やしていきます。

CloudWatch Logs Insight でログの分析

それでは、CloudWatch Logs Insight で対象期間内の停止回数を見ていきます。

CloudWatch > ログ > インサイト を選択

今回作成したロググループ( /aws/events/ec2 )を指定します。

まず、ログがCloudWatch Logs Insight で見れる確認します。

以下のSQLを実行します。

stats count() by(`detail.instance-id`)

期間内に停止したインスタンスIDと回数が表示されました。

さいごに

今回はEC2に注目した例ではありましたが、CWEがトリガーとなるため、利用シーンは多そうですね。また、ターゲット(CWL)へのアウトプットをカスタマイズするなども可能ではないかと思います!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.