CloudWatch SyntheticsでHTTP監視をする

記事タイトルとURLをコピーする

気がついたらCloudWatchファミリーにSyntheticsという仲間が追加されていました。

そして日本リージョンでも使えるようになっていました。

Amazon CloudWatch Synthetics が新たに 13 のリージョンで利用可能に

1.CloudWatch Syntheticsって何ですか?

Syntheticは、「合成の」「合成物質」といった意味のようですが、ちょっとピンと来ないですね。 公式ドキュメントを見ても、いまいち理解ができませんでした。

Amazon CloudWatch Synthetics を使用すると、Canary を作成して、エンドポイントと API を監視できます。Canary は、同じルートをたどり、お客様と同じアクションを実行する設定可能なスクリプトです。これにより、お客様のエクスペリエンス、およびサービスの可用性をお客様の視点から見ることができます。 Canary は 1 度、または定期的なスケジュールで実行できます。スケジュールされた Canary は、1 日 24 時間、1 分間に 1 度の頻度で実行することができます。Canary はエンドポイントの可用性とレイテンシーをチェックし、ロード時間データと UI のスクリーンショットを保存できます。

下記はマネージメントコンソールの画面ですが、こちらの方がわかりやすい気がします。 そして、「簡単なウェブテスト」と書いてあるので、今回はこれを試してみます。

f:id:swx-watanabe:20210201154712p:plain f:id:swx-watanabe:20210201154723p:plain f:id:swx-watanabe:20210201154732p:plain

2.監視される役のWebサーバーを作成

テスト用に適当にWebサーバーを作成しました。 このサーバーをCloudWatch Syntheticsで監視し、正常時と停止時にきちんと検知するか試してみます。

// トップページは200 OKを返す
~$ curl -s http://13.230.222.94 -o /dev/null -w '%{http_code}\n'
200

3.Canary作成

CloudWatch Syntheticsは、Canaryという単位で作成するようです。

3-1.Canary作成ボタンをクリック

Canary作成ボタンをクリック

f:id:swx-watanabe:20210201154837p:plain

3-2.Canary名と監視対象のURLを入力

f:id:swx-watanabe:20210201154850p:plain

URLを入力すると、デフォルトで生成されるコード上のURL変数に自動的に入力されます。 コードをざっとみると、ステータスコード:200で判別しているのがわかります。

3-3.スケジュール設定

f:id:swx-watanabe:20210201154902p:plain

選択肢は、以下の通りです。

  • 1分に1回
  • 5分に1回(デフォルト)
  • 1時間に1回

3-4.データ保持期間と保存先のS3バケット

f:id:swx-watanabe:20210201154913p:plain

障害データの保持と成功データの保持がありますが、それぞれ以下から選択可能です。

  • 31日(〜1か月)(デフォルト)
  • 92日(〜3か月)
  • 183日(〜6か月)
  • 365日(12か月)
  • カスタム値を入力(1-455日)

3-5.しきい値

一旦、未設定のままにしておきます。

f:id:swx-watanabe:20210201154930p:plain

3-6.アクセス許可

今回はデフォルトのままにしました。

f:id:swx-watanabe:20210201155004p:plain

Canaryを作成ボタンをクリックすれば、1分くらいで作成されます。

4.確認

4-1.成功時

データが無いときは円グラフが灰色ですが、成功すると水色になります。

f:id:swx-watanabe:20210201155015p:plain

4-2.失敗時

試しにNginxをstopしたところ、失敗となり、赤色になりました。

f:id:swx-watanabe:20210201155029p:plain

監視スクリプトのログ

f:id:swx-watanabe:20210201155053p:plain

ステータスにLambdaに関するものが表示されたります。 なるほど、監視スクリプトはLambda関数だったんですね。

f:id:swx-watanabe:20210201155107p:plain

スクリーンキャプチャ

各監視時点でのスクリーンキャプチャが確認できます。

f:id:swx-watanabe:20210201155122p:plain

Webサーバ側のログ

Nginxのアクセスログには下記のように記録されます。 HeadlessChrome、CloudWatchSynthetics等、特徴のあるログが出ますね。 IPアドレスは、おそらくLambda関数のものと思われます。

54.238.168.82 - - [28/Jan/2020:13:11:22 +0000] "GET / HTTP/1.1" 200 3520 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/75.0.3738.0 Safari/537.36 CloudWatchSynthetics/arn:aws:synthetics:ap-northeast-1:xxxxxxxxxxxx:canary:web-server" "-"
54.238.168.82 - - [28/Jan/2020:13:11:22 +0000] "GET /nginx-logo.png HTTP/1.1" 404 3665 "http://13.230.222.94/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/75.0.3738.0 Safari/537.36 CloudWatchSynthetics/arn:aws:synthetics:ap-northeast-1:xxxxxxxxxxxx:canary:web-server" "-"

54.238.168.82 - - [28/Jan/2020:13:12:22 +0000] "GET / HTTP/1.1" 200 3520 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/75.0.3738.0 Safari/537.36 CloudWatchSynthetics/arn:aws:synthetics:ap-northeast-1:xxxxxxxxxxxx:canary:web-server" "-"
54.238.168.82 - - [28/Jan/2020:13:12:22 +0000] "GET /nginx-logo.png HTTP/1.1" 404 3665 "http://13.230.222.94/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/75.0.3738.0 Safari/537.36 CloudWatchSynthetics/arn:aws:synthetics:ap-northeast-1:xxxxxxxxxxxx:canary:web-server" "-"

まとめ

  • CloudWatch SyntheticsでHTTP監視ができた
  • 監視スクリプトの中身はLambda関数なのでカスタマイズできそう
  • 監視履歴にスクリーンキャプチャやログも保存される

次回は、CloudWatch Syntheticsで失敗となった場合のアラートの上げ方について見ていきたいと思います。

渡辺 信秀(記事一覧)

2017年入社 / 地味な内容を丁寧に書きたい