ようへいの日々精進XP

よかろうもん

さくらのクラウドのシンプル監視を Terraform で管理する 〜 さくらのクラウドのシンプル監視 + Terraform チュートリアル 〜

tl;dr

新しい職場で教えて頂いた「さくらのクラウド」の「シンプル監視」が, その名の通り, 設定もコンセプトも非常にシンプルで扱い易いし, 料金も安くて, とても良いと思ったので触ってみました. また, せっかくなので設定自体は Terraform を使ってコードで管理するようにしてみました.

シンプル監視

シンプル監視について

こちら より引用させて頂きました.

お客様のサーバーやサービスを定期的に監視し、異常が発生した際にメールなどで通知するサービスです。PING監視、HTTP/HTTPSのステータス監視、TCPポートの死活監視等のサーバー死活監視の他に料金アラート設定が可能です。

下図の通り (ドキュメント より引用させて頂きました.), Ping や HTTP, HTTPS 等のプロトコルで対象のホストの死活を監視することが出来ます. また, 興味深いのは, サーバー証明書の期限や FTP ポートの死活や, SMTP ポートの死活, DNS の名前解決, クラウドサービスの請求金額についても監視することが出来る点です.

また, 異常を検知した際には, 標準でメールまたは Slack に通知することが出来るので, サービスを公開したらサクッと簡単な死活監視を始められるというのは素晴らしいと思います.

コスト

さくらのクラウドのオプションサービスとして提供されていて, 以下のような料金体系となっています.

  • 監視対象が IPv4 アドレスで, 且つ, さくらの VPS, さくらの専用サーバ等で提供しているグローバル IP アドレスである場合には無料
  • 上記以外は 1 日 1 円/ 1 監視対象あたり, 月額 21 円/ 1 監視対象あたり
  • SSL サーバー証明書の期限監視については, 上記の料金が適用される

さくらインターネットの各種サービスを使ってサービスを提供している場合には, 使わないと勿体無いような気がします.

設定画面

設定画面は下図のようになっており, とても使いやすい設定画面だと思います.

f:id:inokara:20190114201325g:plain

oreno.tools というサイトを https で監視設定している図です.

Terraform で設定する

ポチポチするのも

苦にならないくらいシンプルな設定画面ですが, 「さくらのクラウド」向け Terraform プロバイダが提供されていますので, Terraform でシンプル監視の設定をコード化してみたいと思います.

github.com

サンプル

以下のサンプルを元に進めます.

github.com

Circle CI でフォーマットのチェックや構文チェックが行えるように .circleci/config.yml を忍ばせています.

コード

特に難しい内容ではありません. リソースを定義する simple-monitoring.tf と, 監視対象の FQDN が定義されている variables.tf に分かれています.

以下, simple-monitoring.tf です.

resource sakuracloud_simple_monitor "http-monitor" {
  count  = "${ length( var.http_endpoints ) }"
  target = "${ element(var.http_endpoints, count.index) }"

  health_check = {
    protocol   = "https"
    delay_loop = 3600
    path       = "/"
    status     = "200"
  }

  notify_email_enabled = true
  description          = "${ element(var.http_endpoints, count.index) } URL Monitoring."
}

resource "sakuracloud_simple_monitor" "ssl-monitor" {
  count  = "${ length( var.ssl_endpoints ) }"
  target = "${ element(var.ssl_endpoints, count.index) }"

  health_check = {
    protocol = "sslcertificate"
  }

  notify_email_enabled = true
  description          = "${ element(var.ssl_endpoints, count.index) } SSL Certificate Monitoring."
}

以下, variables.tf です.

variable "http_endpoints" {
  default = [
    "kome.inokara.com",
    "oreno.tools",
  ]
}

variable "ssl_endpoints" {
  default = [
    "oreno.tools",
    "github.com",
  ]
}

監視対象を追加する

make コマンド化しているので, 以下のように make plan からの make apply で監視対象を追加します.

f:id:inokara:20190114201508g:plain

下図のように監視対象が追加されています.

f:id:inokara:20190114201531p:plain

監視対象の一部を削除する

ここからは, Terraform の世界になるので, シンプル監視に限らず, Terraform を触る上で自分に役立ちそうな事を書いてみます.

f:id:inokara:20190114201555g:plain

以下のように destroy サブコマンドに -target オプションを利用して, 指定したリソースのみを削除します.

make show
~/bin/terraform destroy -target=sakuracloud_simple_monitor.ssl-monitor[1]

terraform show を使うことで, 対象となるリソースを確認することが出来ます.

Web コンソールで設定した内容をインポートする

ある日, 障害が発生したことを契機に急ぎで監視対象を Web コンソールで追加しました. この設定を Terraform に取り込みたいと思います.

画像

github.com をサンプルとして利用させて頂きました.

以下のように, import サブコマンドを利用して Web コンソールで追加したリソースの情報をインポートします.

make show
~/bin/terraform import sakuracloud_simple_monitor.http-monitor[2] ${リソースの ID (シンプル監視においては, リソース ID が該当します)}

インポートした後, variables.tf に関し対象を追加しておきましょう.

variable "http_endpoints" {
  default = [
    "kome.inokara.com",
    "oreno.tools",
    "github.com",
  ]
}

variable "ssl_endpoints" {
  default = [
    "oreno.tools",
    "github.com",
  ]
}

variables.tf に追加することで, 監視対象自体の整合性は実際のリソースと Terraform の状態 (tfstate) との整合性が取れることになります. (細かいパラメータについては整合性が取れていない場合がある為, この後に terraform plan を実行すると差分が出てしまうことがあります.)

以上

さくらのクラウド」の「シンプル監視」が本当にシンプルでイケているサービスであることを確認出来ました. また, Terraform を使うことで監視対象をコードで管理出来ることも確認しました.

それでは, 良い監視とインフラストラクチャー・アズ・コード生活をお過ごし下さい.