Google Cloudの稼働時間チェックを使ったお手軽死活監視の紹介

はじめに

皆様こんにちは。イノベーションセンター SkyWay DevOps プロジェクト所属の @sublimer です。

私達のチームは、1月31日に新しいSkyWayをリリースしました。

skyway.ntt.com

新しいSkyWayでは、公式サイトや、アプリケーションを管理するコンソールも全く新しいものとなっています。

今回は、新しいSkyWayの公式サイトやコンソールの死活監視に利用している、Google Cloudの「稼働時間チェック」機能についてご紹介します。

稼働時間チェックとは

稼働時間チェックは、Google CloudのCloud Monitoringが提供している機能の1つです。 予め設定したエンドポイントに対して、HTTP・HTTPS・TCPのいずれかのプロトコルで定期的にリクエストを送り、そのレスポンスがアラート条件を満たした場合に通知してくれるサービスです。 監視対象のエンドポイントはURLやIPアドレスでも設定できるので、Google Cloud以外の環境に対して監視したい場合でも活用できます。

稼働時間チェックの特徴として、アラート条件を柔軟に設定できる点が挙げられます。 単純にステータスコード等をチェックするだけでなく、レスポンスのJSONの特定のキーが予め指定された値になっているか等の条件も設定できます。 また、比較的大きめの無料枠が提供されている点も特徴として挙げられます。 稼働時間チェックは、1,000回の実行につき$0.30という料金設定ですが、Google Cloudのプロジェクト1つあたり100万回の実行まで毎月無料で利用できます。

cloud.google.com

3つのリージョンから毎分チェックを実行した場合の1ヶ月間の実行回数は、 3リージョン x 60分 x 24時間 x 31日 = 133,920回なので、だいたい7個のエンドポイントに対して無料でチェックができます。

稼働時間チェックの設定方法

監視対象の設定

稼働時間チェックは、以下のURLから設定できます。

https://console.cloud.google.com/monitoring/uptime/create

基本的には入力欄を埋めていくだけで設定が完了するのですが、一点だけ注意点があります。 設定画面の「More target options」をクリックするとより詳細な設定画面が表示されるのですが、「Regions」の設定はデフォルトで「グローバル」となっています。 Regionsは、最低3箇所、最大6箇所の範囲で自由に決めることができます。 実行回数はリージョン数との掛け算で決まるため、無料枠の範囲内に収めるためには3リージョンを設定するのが望ましいです。 今回は、以下の画像のように、アジア太平洋(シンガポール)、ヨーロッパ(ベルギー)、米国(オレゴン)を設定しました。

レスポンスの検証の設定

レスポンスの検証の設定画面は以下の画像のようになっています。

ここでは、以下の項目を設定しています。

  • タイムアウト時間は10秒
  • レスポンスのJSONの status というキーの値が "OK" と完全に一致すること
  • レスポンスのステータスコードが200であること

したがって、10秒以内にステータスコード200で、 status というキーの値が "OK" のJSONがレスポンスとして返されていれば正常と判定されます。 コンテンツマッチの設定は、上記のJSON Pathによるものの他、特定の文字列が含まれているかどうかや正規表現によるチェックもできます。 なお、JSON Pathで指定したキーについて文字列で値が返される場合は、Response Contentの設定は、ダブルクオーテーション (") を含めて設定する必要があります。

通知先の設定

「アラートと通知」の設定画面では、アラートの通知先を設定できます。

稼働時間チェックの通知先は、「通知チャンネル」として予め設定した通知先の中から選択できます。 通知チャンネルには、SlackやEmailの他、Cloud Pub/SubやPagerDutyを設定することもできます。 今回はSlackを通知先として設定することにしました。

ここまで設定できたら、最後に確認画面で「TEST」ボタンを押し、正しくレスポンスのチェックができているかを確認します。

アラートのカスタマイズ

Slackの通知メッセージの変更

Slackに通知されるメッセージの内容は、以下のURLからアラートポリシーを開き、編集画面の「通知と名前」から変更できます。

https://console.cloud.google.com/monitoring/alerting

今回は、チャンネル全体へのメンションと、いくつかのラベルを表示させるため、以下のように設定しました。

<!channel> ${policy.display_name}

Checker Location: ${metric.label.checker_location}

Target Host: ${resource.label.host}

Slackの @channel のメンションは、 <!channel> で設定できます。 メッセージ内で利用できる変数は、以下のドキュメントに記載されています。

cloud.google.com

リクエスト送信元ごとのアラート条件を設定する

アラートポリシーの設定画面で「時系列のグループ化の基準」に checker_location を追加すると、稼働時間チェックのリクエスト送信元ごとに条件判定ができるようになります。

動作確認

動作確認として、あるリージョンからのリクエストのみを受け付けないようにして、正常に通知が行われるかを確かめます。

今回、チェック対象は私の自宅にあるWebサーバーとしたので、Webサーバーのnginxで ASIA_PACIFIC からのリクエストを拒否するように設定します。

稼働時間チェックの送信元IPアドレスの一覧は、以下のURLの「稼働時間チェックを作成」の左隣にある下向き矢印をクリックするとダウンロードできます。

https://console.cloud.google.com/monitoring/uptime

テキストファイルとしてダウンロードされますが、中身はJSONのファイルなので、jqを使ってシュッと ASIA_PACIFIC のIPアドレスだけ抜き出します。

cat uptime-source-ips.txt | jq -c '.[] | select(.region == "ASIA_PACIFIC").ipAddress' -r

あとは、これらのアドレスをnginxの設定ファイルで以下のように追記すれば、 ASIA_PACIFIC からのリクエストのみを拒否する設定ができます。(IPアドレスは例示用のダミーの値です。)

deny 203.0.113.1;
deny 203.0.113.2;
deny 203.0.113.3;
deny 203.0.113.4;
deny 203.0.113.5;
deny 203.0.113.6;
deny 203.0.113.7;
deny 203.0.113.8;
deny 203.0.113.9;
allow all;

nginxの設定変更後、少し経つと以下のようなアラート通知がSlackに送られるはずです。

おわりに

新しいSkyWayの公式サイトやコンソールの死活監視に利用している「稼働時間チェック」機能について、設定例も交えながら紹介しました。

今回、新しいSkyWayにおいて死活監視をどのように行うかを検討する上で様々なSaaSについて比較検討を行いましたが、チェックのリクエストを送る間隔の短さや監視設定の柔軟さという点で、稼働時間チェックが一番使いやすい印象を受けました。

シンプルな死活監視であれば比較的簡単に設定ができるので、とりあえずお手軽に死活監視をしたい場合は稼働時間チェック機能を使ってみてはいかがでしょうか? 稼働時間チェック機能には設定可能な項目がいろいろあるので、ある程度凝った監視をしたい場合でも役立つのではないかと思います。

稼働時間チェック機能でしっかり監視をしている新しいSkyWayを、ぜひ使ってみてください!!

参考サイト

© NTT Communications Corporation All Rights Reserved.