クロスアカウント環境でCloudWatchLogsアラームを設定したい

2024.03.20

困っていたこと

クロスアカウント環境で、アカウントA(モニタリングアカウント)からアカウントB(ソースアカウント)のCloudWatchLogsを参照したアラームを設定したいです。 どのように設定すればいいでしょうか。

どうすればいいのか

CloudWatchクロスアカウントオブザーバビリティ機能を使い設定します。

1.クロスアカウントオブザーバビリティを設定

クロスアカウントオブザーバビリティを設定を設定すると、モニタリングアカウントからソースアカウントのCloudWatchメトリクス等が参照できるようになります。1

手順

1-1. モニタリングアカウントにて、CloudWatchダッシュボードから[設定]を選択

1-2. [Use a centralized monitoring account to monitor and troubleshoot applications seamlessly across multiple accounts]欄の[Monitoring account configuration]にある[設定]を選択

1-3. [テレメトリデータを選択]欄で共有するものを選択し、[モニタリングアカウントの許可範囲を選択]欄でソースアカウントIDを設定します。 OUのIDなどを設定することも可能です。

1-4. 設定完了後、[Monitoring account configuration」の「Resources to link accounts]を選択

1-5. [Any Account]を選択して[Copy URL]を選択し、発行されたURLをメモしておく

1-6. ソースアカウントにログインし、1-5でメモしたURLを開く
すでに情報が入力されているので、最下部の[Link]を選択

1-7. 確認画面が出てくるので、[Confirm]と入力して確認する

1-8. モニタリングアカウントに戻り、設定ができているか確認する
CloudWatchダッシュボードから[設定]を選択→[ソースアカウントを管理]
設定ができていれば、モニタリングアカウントの情報が表示される

2.ソースアカウントでロググループのメトリクスフィルターを作成

検証してみたところ、モニタリングアカウントからはメトリクスフィルターを作成できませんでした。

そのため、ソースアカウント側でメトリクスフィルターを作成します。2

手順

2-1. ソースアカウントで、CloudWatch コンソール→[ログ]→対象ロググループ を選択

2-2. [Actions]→[メトリクスフィルターの作成] を選択

2-3. [フィルターパターン] に、フィルターパターンを入力

2-4. [次へ] を選択し、メトリクスフィルターの名前を入力
[メトリクスの詳細] で、メトリクス名前空間 に、メトリクスを公開する CloudWatch 名前空間の名前を入力する
[メトリクス名] に名前を入力

2-5. メトリクスフィルターで指定したキーワードをカウントする場合、[メトリクス値] に「1」と入力する

2-6. [Create metric filter] を選択

今回はフィルターパターン「ERROR」を指定した以下のようなメトリクスフィルターを作成しました。

3.メトリクスフィルター作成後、フィルターに合致するログを送信する

メトリクスフィルター作成後、データポイントが作成されるまで該当メトリクスは表示されません。2

そのため、CloudWatchLogsにフィルターに合致するログをテスト送信してメトリクスを表示させます。3

手順

3-1. ソースアカウントにて、CloudWatchダッシュボード→[Log groups]→対象のロググループを選択→[ログストリーム]タブにて、何らかのログストリームを選択

3-2. ログイベントが表示されるので、[アクション]を選択し、[Create log event]を選択

3-3. 手順2のメトリクスフィルターで設定したキーワードを入力する

3-4. テストデータ送信後、メトリクスフィルター作成時に設定したメトリクスが生成されているか確認する
CloudWathダッシュボード→[すべてのメトリクス]から手順2で設定したメトリクス名を検索する
テスト送信を実施した時間に、データポイントが作成されていることが確認できます

4.モニタリングアカウントで、アラームを作成する

4-1. モニタリングアカウントにて、CloudWatchダッシュボード→[すべてのメトリクス]から手順3で生成されたソースアカウントのメトリクス検索し、選択

4-2. [アラームの作成]を選択

4-3. 参考ドキュメント44 を参考に通知先等を設定し、任意のアラームを作成する

結果

設定ができたので、再度CloudWatchLogsにテスト送信をしてアラームが通知されるか試してみます。

手順3で実施したテスト送信をもう一度実行すると、アラーム状態になります。

今回は通知先にメールを設定していたため、通知メールが届きました。

参考