こんにちは。SCSKの磯野です。
Google CloudのVMで、外部に公開するようなWebサイトを運用している場合、該当のWebサイトの死活監視を行うためのモニタリングが必要となります。
今回は、VMで稼働しているパブリックなWebサイトに対して、どのように死活監視をすればよいかをご紹介します。
前提
本記事は以下を前提とします。
- VMインスタンスで構築しているWebサイトは、一般公開されているものとする
- VMインスタンスは、インスタンスグループに属しているものとする(マネージド/非マネージドは問わない)
本記事では、どのメトリクスを監視すればよいかについては言及しますが、実際の監視実装方法までは言及しません。
実装方法については以下の記事を参照ください。
方法①:URLでの稼働時間チェックを行う(推奨)
HTTP/HTTPS 稼働時間チェックは、デフォルトでレスポンス コードが 2xx
であることを確認します。いわゆる外形監視に該当するため、パブリックなWebサイトに対する死活監視としては最も推奨される方法となります。
HTTP と HTTPS の場合、すべての URL リダイレクトをフォローし、稼働時間チェックで受信した最終的なレスポンスから成功基準を評価します。HTTPS チェックの場合、SSL 証明書の有効期限は、最後のレスポンスで受信したサーバー証明書に基づいて計算されます。
稼働時間チェックに成功するには、次の条件を満たす必要があります。
- HTTP ステータスが指定した条件に一致する。
- レスポンス データに必須のコンテンツがないか、必要なコンテンツがすでに存在する。
方法②:VMのヘルスチェックログを監視する
インスタンスグループに属しているVMは、健全性変更ログ(ヘルスチェックログ)を出力します。UNHEALTHYログの監視を行うことで、VMのヘルスチェックステータスの監視に近いものを実装可能です。
ただし、特に非マネージドインスタンスグループについては、インスタンスが停止してWebサイトに5xxエラー等でアクセスできない場合でもヘルスチェックのUNHEALTHYログが出力されないケースがある(※)ため、方法①を推奨します。
※インスタンスを停止すると、0/0となりステータスが正常とみなされてしまうため
方法③:VMインスタンスの稼働時間チェックを行う
VMインスタンスの稼働時間チェックでは、稼働時間メトリクスが欠損していないかを監視することで「インスタンスが稼働しているか」の確認を行うことができます。Webサイトの稼働確認ではなく、あくまでもVMの稼働確認となるため、要件に応じて方法①を使用してください。
terraformでの作成例は以下の通りです。
resource "google_monitoring_alert_policy" "vm_stoped" {
display_name = "VM Instance - Uptime Absent(VM Stopped)"
combiner = "OR"
conditions {
display_name = "VM Instance - Uptime"
condition_prometheus_query_language {
query = <<EOT
absent(avg by (instance_name, project_id)(
increase(compute_googleapis_com:instance_uptime{
monitored_resource="gce_instance",
project_id="{プロジェクト名}",
instance_name="{インスタンス名}"}[5m]))
) == 1
EOT
duration = "240s" # 最大 240 秒間はデータは表示されないため
}
}
enabled = true
notification_channels = "xxx(通知先のslackなど)"
alert_strategy {
notification_prompts = ["OPENED"]
}
}
まとめ
いかがだったでしょうか。
今回は、VMで稼働しているパブリックなWebサイトに対して、どのように死活監視をすればよいかをご紹介しました。
本記事が皆様のお役に立てれば幸いです。