気がついたら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 のスクリーンショットを保存できます。
下記はマネージメントコンソールの画面ですが、こちらの方がわかりやすい気がします。 そして、「簡単なウェブテスト」と書いてあるので、今回はこれを試してみます。
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作成ボタンをクリック
3-2.Canary名と監視対象のURLを入力
URLを入力すると、デフォルトで生成されるコード上のURL変数に自動的に入力されます。 コードをざっとみると、ステータスコード:200で判別しているのがわかります。
3-3.スケジュール設定
選択肢は、以下の通りです。
- 1分に1回
- 5分に1回(デフォルト)
- 1時間に1回
3-4.データ保持期間と保存先のS3バケット
障害データの保持と成功データの保持がありますが、それぞれ以下から選択可能です。
- 31日(〜1か月)(デフォルト)
- 92日(〜3か月)
- 183日(〜6か月)
- 365日(12か月)
- カスタム値を入力(1-455日)
3-5.しきい値
一旦、未設定のままにしておきます。
3-6.アクセス許可
今回はデフォルトのままにしました。
Canaryを作成ボタンをクリックすれば、1分くらいで作成されます。
4.確認
4-1.成功時
データが無いときは円グラフが灰色ですが、成功すると水色になります。
4-2.失敗時
試しにNginxをstopしたところ、失敗となり、赤色になりました。
監視スクリプトのログ
ステータスにLambdaに関するものが表示されたります。 なるほど、監視スクリプトはLambda関数だったんですね。
スクリーンキャプチャ
各監視時点でのスクリーンキャプチャが確認できます。
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年入社 / 地味な内容を丁寧に書きたい