Server

ECSとCWLでのアラームの設定

投稿日:

はじめに

ECS上のタスクで特定の文字列をログに出力した際にCloudWatch Logsでアラームとして表示する方法を紹介します。

全体の流れ

やることは以下の通りです。

  • CloudWatch Logsでロググループを作成する(任意)
  • ECSでタスク定義を作成(更新)する(任意)
  • CloudWatch Logsでメトリクスフィルタを作成する
  • SNSでトピックとサブスクリプションを作成する
  • CloudWatch Logsでアラームを作成する

ECSのデフォルトのロググループを使用する場合はロググループの作成は不要です。また、すでにタスク定義があり、ロググループを変更しない場合はタスク定義の作成(更新)は不要です。

CloudWatch Logsでロググループを作成する

まず始めにCloudWatch Logsでロググループを作成します。サイドバーの「ロググループ」の「ロググループの作成」から作成します。

ロググループ名と保存期間を決めてロググループを作成します。

ECSでタスク定義を作成(更新)する

ロググループを作成したらECSのタスク定義を更新します。「新しいリビジョンの作成」の「JSONを使用した新しいリビジョンの作成」をクリックし、「containerDefinitions」の中の「logConfiguration」の「awslogs-group」を作成したロググループ名にします。

更新後、新しいタスク定義をデプロイしておいてください。

CloudWatch Logsでメトリクスフィルタを作成する

タスクが立ち上がったら作成したロググループの「メトリクスフィルタ」のタブを開き、「メトリクスフィルタの作成」をクリックします。

フィルターパターンに検知したいログの文字列を入力します。

フィルター対象のログデータを選択し、パターンをテストしておきます(事前にログを出力させておきます)。

正しく検知できていれば、次へ進み任意のフィルタ名を入力します。

最後に、細かな設定を行っていきます。

「メトリクス名前空間」と「メトリクス名」に任意の名前を入力します。

「メトリクス値」はログが検知された際に記録される値(重み)です。今回は1にしておきます。

これらが設定できたら作成します。

SNSでトピックとサブスクリプションを作成する

アラームを作成する際に最低1つの通知先を登録する必要があるので、SNSでメールの送信先を登録します。

「トピック」から「トピックの作成」をクリックします。

「タイプ」で「スタンダード」を選択し、任意の名前を入力して作成します。

次に「サブスクリプションの作成」をクリックします。

「プロトコル」にEメールを選択し、通知先のメールアドレスを入力して作成します。

サブスクリプションを作成すると以下のようなメールが送られてくるので、リンクをクリックしてSNSの設定は完了です。

CloudWatch Logsでアラームを作成する

最後にアラームを設定します。サイドバーの「アラームの作成」を開き、「アラームの作成」をクリックします。

メトリクスの選択で、先程作成したメトリクスを選択します(カスタム名前空間の中にある入力したメトリクス名前空間をクリックし、ディメンションなしのメトリクスに作成したメトリクスフィルターがあります)。

注意点として、1度でもメトリクスが記録されないと一覧に出てこないので、予めログを出力させてメトリクスフィルターに反映されていることを確認しておきます。

「メトリクスの選択」をクリックし、「条件」の「しきい値の種類」を「静的」、「以上」を選択し、しきい値の値(今回はすぐに確認したいので1とする)を入力して「次へ」をクリックします。

「アラーム状態トリガー」で「アラーム状態」を選択し、「通知の送信先」に先程作成したSNSのトピックを選択し、「次へ」をクリックします。

「アラーム名」に任意の名前を入力し、「次へ」をクリックします。

内容を確認して「アラームの作成」をクリックして作成します。作成後にログを出力させると以下のようなメールが送られてきます(一部抜粋)

その他

Slackに通知する

アラームが発生した際にSlackに通知する方法を紹介します。

Chatbotの画面を開き「チャットクライアント」にSlackを選択して「クライアント設定」をクリックします。

Slackとの連携画面が表示されるので連携したいワークスペースを選択して「許可する」をクリックします(事前にSlackへのログインが求められる場合があります)。

Slackのワークスペースが登録されたら、「新しいチャネルを設定」をクリックします。

任意の「設定名」を入力し、Slackチャネルを選択(プライベートチャネルの場合はチャネルIDを入力)します。

「アクセス許可」で任意のロール名を入力します。

 

「通知」でリージョンを選択し、トピックに先ほど作成したSNSのトピックを選択して「設定」をクリックします。

成功するとワークスペースにチャネルが追加されています。

構造化ログをメトリクスフィルタで扱う

構造化されたログを出力している場合、文字列一致ではなくキーとバリューが一致しているものを検知したいケースがあるとおもいます。その場合は以下のような書式で対応可能です。

特定のキーとバリューの組み合わせ

以下のように {($.キー=バリュー)} の書式でマッチさせることができます。

配列の場合

配列の場合は添字 [i] を付けます。

nullの場合

nullの場合は IS NULL を記載します。

他にもありますので詳しくは公式ドキュメントをご覧ください。

さいごに

ECSで特定の文字列をログ出力した際にCloud Watch Logsでアラームに表示する方法を紹介しました。

おすすめ書籍

AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) AWS運用入門 押さえておきたいAWSの基本と運用ノウハウ AWSではじめるインフラ構築入門 第2版 安全で堅牢な本番環境のつくり方

blog-page_footer_336




blog-page_footer_336




-Server
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

CircleCIを使ってみた(RailsのRSpecとデプロイのサンプル)

1 はじめに2 導入するにあたって3 項目B4 補足4.1 開発環境とCI環境でdatabase.ymlが異なる5 さいごに はじめに 個人的に作成しているアプリケーションのCIツールとして、Circ ...

DockerのQuickstart:Compose and Railsをやってみた

1 はじめに1.1 環境1.2 Docker for Macのインストール2 Railsプロジェクトを作成するまで2.1 Railsのプロジェクトディレクトリの作成2.2 Dockerfileの作成2 ...

aws

AWSのT3インスタンスの特徴

1 はじめに2 T3インスタンスとは2.1 T3インスタンスのスペック2.2 Unlimited Modeがデフォルトで有効2.3 ハイパーバイザはNitro3 T2インスタンスとの比較3.1 仮想C ...

Docker上でTensorFlowのチュートリアルをやってみた

1 はじめに1.1 環境2 TensorFlowのコンテナを起動する3 チュートリアルをやってみた3.1 ソースコード4 さいごに はじめに こんにちは、最近個人的な勉強でPython、ディープラーニ ...

aws

AWS LambdaとAPI GatewayでサーバレスなAPIを実装

1 はじめに2 AWS Lambdaとは2.1 利用できる言語2.2 Lambdaの制約3 LambdaでAPIをリリースするためにやること4 Lambda関数の作成4.1 関数の作成4.2 ランタイ ...

フォロー

blog-page_side_responsive

2023年5月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。