Amazon CloudWatch Syntheticsのリンク切れチェッカーを試してみた

2021.11.16

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

こんにちは、コンサル部@大阪オフィスのTodaです。

Amazon CloudWatch Syntheticsのリンク切れチェッカーを操作する機会がありましたので、紹介させていただきます。

利用した感想

スクレイピングを利用してリンクを探し、次のページに移動しながらリンク切れ調査をおこなうことが簡易に実装できました。
昔、独自でスクレイピングをおこない監視をしていましたが準備の工数を削減する事が可能です。

Amazon CloudWatch Syntheticsとは?

CloudWatch Syntheticsとは、ウェブサイトや API のエンドポイントなどに対して、利用ユーザー視点でパフォーマンスや可用性をモニタリングをする事ができます。 チェック処理はLambdaのコードになっているためカスタマイズにて調査、判定の調整も可能になります。

リンク切れチェッカー

リンク切れチェッカーは調査対象に指定したページにあるリンクをスクレイピングして、リンク先に移動をおこない、再度スクレイピングを繰り返しながらリンク先ページが存在するか?障害が発生していないか?調査をおこないます。

■ 処理イメージ 処理イメージ

検証環境準備

上記、処理イメージで画面移動できるhtmlを簡易に作成いたしました。 検証環境準備

実際に設定してみる

Canaryの新規作成

AWSコンソールにログインをおこないます。
サービスから[CloudWatch] > 表示される左メニューから[Synthetics Canaries]をクリックします。
ページ中部の[Canaryを作成する]をクリックします。

Canaryの新規作成

Canaryの設定

今回は設計図をベースに設定いたします。
設計図の選択、Canary ビルダーの設定をおこないます。
「フォローされるリンクの最大数」は調査をおこなうリンクの数になります。
再帰的に子ページを解析する場合、調査数は合算して指定する必要があります。
今回の検証環境の場合は、リンク数が7点あるため7以上の値を指定する必要があります。

Canaryの設定1

スクリプトエディタではデフォルト nodejsにてpuppeteerのプログラムが組まれています。
puppeteerは ヘッドレスChrome または Chromium を制御するためのライブラリでスクレイピングの制御をおこないます。
今回はプログラムの変更はしないで利用いたします。

Canaryの設定2

スケジュールは継続・Cron指定・1回の実行が選択できます。
今回は特に指定ございませんので継続(5分)にて設定をおこないます。

Canaryの設定3

データ保持とデータストレージは調査時のデータを保持する期間と保存先のS3バケットを指定します。
デフォルトは1ヶ月になります。

Canaryの設定4

その他設定はデフォルトのままにして設定を完了させます。
[Canaryの作成]をクリックします。
上記で設定操作は完了になります。

結果を確認

Canaryの作成が終わると、スケジュールによりスクレイピングが実行されます。
トップ画面にはスクレイピングの結果が成功か失敗かがわかりやすく表示されます。

結果を確認1

実際の内容を確認いたします。
Canaryの一覧に表示される名前をクリックして詳細画面を表示します。
[可用性]の欄には、スクレイピングで調査されたページのURLが表示されてそれぞれステータスが200で表示されている事がわかります。
またスクリーンショットをクリックする事で表示された内容を画像で確認することも可能です。

結果を確認2

[メトリクス]の欄には解析にかかった時間やステータス404,500の数を把握する事ができます。

結果を確認3

リンク切れが発生した場合の表示

リンク切れが発生した場合の調査をしています。
検証環境で表示されるページCのリンク先を削除してリンク切れをおこないます。

リンク切れが発生した場合の表示1

しばらく時間をおくと、Canary実行の結果が失敗に変わりました。
詳細を確認するとページCの内容がステータス404に変わり、失敗となっています。

リンク切れが発生した場合の表示2

リンク切れが発生した場合の表示3

リンク切れが発生した場合の表4

問題発生時のアラートについて

CloudWatchアラームとSNSを連携させることでリンク切れが発生した場合に通知をおこなう仕組みが実装可能です。

Canaryの設定変更

対象のCanary実行を選択頂き[編集]をクリックください。
編集項目内の[CloudWatch アラーム - オプション]を選択頂き、アラームの判定条件を指定します。
当画面ではSNSの設定ができないため上記設定後、1度保存をします。
※新規登録時はSNSの設定項目がございます。

アラーム設定

左メニューから[アラーム] > [すべてのアラーム]をクリックします。
作成された「Synthetics-Alarm-xxxxxxxx」の設定を編集します。
メトリクスと条件の指定は変更せず、[次へ]をクリックします。

通知の欄にある[通知の追加]をクリックして通知先の設定をおこないます。
※既に通知先SNSが存在する場合は既存のSNSトピックを指定ください。

アラーム設定

上記設定をおこない保存をおこないます。
保存後、通知を試したところ下記メール内容が送信されていることを確認いたしました。

通知メール

さいごに

今回は簡易ですが CloudWatch Syntheticsのリンク切れチェッカーを試してみました。
昔独自スクレイピングにてサイトを監視していたことがあり、実装に手間が掛かったのですがリンク切れチェッカーを利用した場合、 サクッと組めたため準備をする工数が大きく減らせると考えます。
少しでもお客様の作りたい物の参考になればと考えております。