AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、AWSで合成モニタリングができるマネージドサービス「Amazon CloudWatch Synthetics」を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、AWSで合成モニタリングができるマネージドサービス「Amazon CloudWatch Synthetics」についての簡単に紹介し、AWS提供のテンプレートから合成モニタリングをどのように設定、動作するかの一例を解説します。
なお、利用料金に関しては公式情報をご参照ください。
Amazon CloudWatch Synthetics(以下、Synthetics)とは、合成モニタリングを行うマネージドサービスです。
合成モニタリングの定義は「Synthetic monitoring(合成モニタリング)- MDN Web Docs 用語集」によると、下記のようになっています。
合成モニタリングは、可能な限り一貫性のある環境で、通常は自動化ツールを使用して、「実験室」環境でページの性能をモニタリングすることです。一貫性のあるベースラインがあれば、合成モニタリングはコード変更が性能に及ぼす影響を測定するのに適しています。しかし、必ずしもユーザーが体験していることを反映しているとは限りません。
合成モニタリングでは、エンドユーザーがWebアプリケーションを介して進む経路をシミュレートするためのスクリプトを展開し、シミュレーターが体験した性能をレポートします。一般的な合成モニタリングツールの例としては、WebPageTestやLighthouseなどがあります。測定されるトラフィックは、ユーザーのものではなく、ページの性能に関するデータを収集するために合成して生成されたトラフィックです。
RUM(Real user monitoring)とは異なり、合成モニタリングはユーザーの違いを考慮せず、性能の狭い範囲のビューを提供するため、アプリケーションの性能に関する基本的なデータを取得したり、開発環境で性能をスポットチェックしたりするのに役立ちます。ネットワークスロットリングなどの他のツールと組み合わせることで、潜在的な問題領域についての優れた洞察を提供することができます。
Syntheticsを利用することによって、AWSが用意したテンプレートで簡単に合成モニタリングを設定できます。自身でのカスタマイズも可能です。Syntheticsのテンプレートを利用せず自分で一から同等の仕組みを作ろうとした場合、次の3点が必要です。
できるだけ簡単に合成モニタリングを運用したい場合、Syntheticsは良い選択肢といえるでしょう。
今回は下記のようなWebサーバ1台を公開していると仮定して、そのサーバに対してSyntheticsによるハートビート監視を設定します。
手順としては次の4ステップです。
なお今回は「バージニア北部」リージョンを利用しています。
「マネージメントコンソール」で「EC2」サービスを選択して「インスタンスの起動」を選択します。インスタンス起動画面で下記のように値を入力、選択します。
以上で、EC2を起動し、下記のように「実行中」のステータスとなればSTEP1は完了です。
ここからはSTEP1で構築したEC2にsshで接続し、Apacheをインストールします。
STEP1で作成した「EC2のパブリックIP」と「キーペア」を利用してEC2にsshで接続してください。ssh接続が完了した後、下記のコマンドを実行して、Apacheのインストールと起動を行ってください
sudo yum install httpd -y
インストールが正常に行われて下記のように最後に「Complete」が表示されていればOKです。
ここからは、Apacheを起動し、ステータスを確認します。下記コマンドでApacheをスタートさせます。
sudo systemctl start httpd
下記のコマンドでステータスを表示させます。
sudo systemctl status httpd
ステータス表示の結果で「active(running)」となれば正常にApacheのサービスが稼働しています。
念のため、「http://<EC2のパブリックIP>」とブラウザに入力して確認します。下記のようにApacheのテストページが表示されていれば想定通りです。
EC2上でSyntheticsで監視するページを作成します。Vimなどのエディタで下記ファイルを作成してください。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <h1>!!Synthetics Test Page!!</h1> </body> </html>
作成したindex.htmlを下記コマンドで/var/www/htmlに配置します。
sudo cp index.html /var/www/html
下記コマンドでApacheを再起動します。
sudo systemctl restart httpd
ブラウザに「http://<EC2のパブリックIP>/」と入力し、下記のように作成したindex.htmlの内容が表示されればOKです。
ここから本稿のメインテーマ、Syntheticsの設定です。「マネージメントコンソール」から「CloudWatch」を検索してメニューから「アプリケーションのモニタリング」→「Synthetics Canaries」を選択します。
下記の画面が表示されるので、「Canaryを作成」をクリックします。
すると「Canaryを作成」画面に遷移します。Syntheticsでは一つ一つの監視設定を「Canary」といいます。
大まかな流れとして下記を設定し、Canaryを作成します。
実行頻度、実行結果を保存するS3、異常時での通知などの設定については、今回は下記のようにEC2のハートビート監視を設定します。
「Canaryを作成」で下記のように設定します。
「Canaryビルダー」で下記のように設定します。
「スクリプトエディタ」は、今回はデフォルトのままで進めます。Node.jsでは「puppeteer,python」だとSeleniumが使われたLambda関数が作成されます。もしPuppeteerやSeleniumを利用したことがあり、デフォルトの処理からカスタムしたい場合は、表示されているエディタで編集も可能です。
「スケジュール」で下記のように設定します。
「データ保持」は、今回はデフォルトのまま進めます。
「データストレージ」も今回はデフォルトのまま進めます。
「アクセス許可」は、今回はデフォルトのままで、新規でロール作成します。
「CloudWatchアラーム - オプション」で下記のように設定します。
他はデフォルトのままで「Canaryを作成」をクリックしたら設定完了です。設定に数分かかる可能性がありますが、そのまま待ちます。SNSトピックの購読通知メールが届いているので購読を許可しておきます。
Syntheticsでの監視で失敗していることを検知するために、今回はEC2を停止してみます。
しばらくすると、上記監視対象のEC2の停止によって、Syntheticsで異常を検知します。作成したCanary「apache-test-canary」の詳細画面を見てみます。
詳細画面の概要では下記を確認できます。
「可用性」タブでは、「問題」を選択すると、「どんな問題が起きていたか」について下記を確認できます。ログだけでなくスクリーンショットでの視覚的な確認も可能です。
今回のCanaryの実行ログを確認してみると下記の通り、TimeOutErrorが起きており、レスポンスに時間がかかっていた(いつまでたっても返却されなかった)ことが分かります。
「モニタリング」タブではCloudWatchメトリクスのSyntheticsについての値を確認できます。
以上で簡単ですがSyntheticsの設定と確認は終わりです。
※今回作成したリソースについては適宜削除してください。
Syntheticsでは、監視結果の情報がログ、スクリーンショットで記録、集約され、異常が起きた際のトラブルシュートにとても有用だと思います。この仕組みが、マネージド、サーバレスで利用できるのはとても便利です。
今回はハートビートのテンプレートを紹介しましたが、他にも「画面の変化を検知」「画面操作を実行」などの便利なテンプレートが用意されているので活用してみてはいかがでしょうか。
Copyright © ITmedia, Inc. All Rights Reserved.