nmtysh.log

Tech系のネタや日々の独り言などを書いています。

Google Apps Script で死活監視を行う

業務でWebサイトを構築すると大抵サービスの監視を行います。
ほとんどの場合は会社のネットワーク内に監視サーバーがあると思いますが、外部ネットワークのエラーによる不通は把握できないかと思います。
なので、ネットワーク障害に備えて外部からも監視をしたいところです。
調べるとどうやらGoogle Apps Scriptを使うとサーバーを用意したりせずに手軽に出来そうです。

ネット上にあるサンプルだとレスポンスコードをチェックするスクリプトが多かったですが、レスポンスは正常でもコンテンツに問題が発生するケースもあります。
そこで、コンテンツの中身をチェックするスクリプトを作成しました。

function doCheck() {
  var mailaddress = "(メールアドレス)";
  var hosts = [
    {
      "url" : "http://example.com/",
      "mail" : mailaddress,
      "subject" : "[GAS_Alert] http://example.com/ is down!"
    }
  ];

  for (var index in hosts) {
    var host = hosts[index];
    var res = UrlFetchApp.fetch(host['url']);
    var str = res.getContentText();
    
    if ( str.indexOf("Example") == -1) {
      var now = new Date();
      var now_str = now.getFullYear() + "/" + (now.getMonth() + 1) + "/" + now.getDate() + " " + now.getHours() + ":" + now.getMinutes();
      MailApp.sendEmail(host['mail'], 
                        host['subject'], 
                        "Check Date: " + now_str + "\n" + 
                        "Check Site: " + host['url'] + "\n" + 
                        "-----\n" + 
                        res.getContentText(),
        {
          "bcc": "",
          "replyTo": "(メールアドレス)",
        });
    }
  }
}


これを[リソース]-[現在のプロジェクトのトリガー]から定期実行するようにすれば死活監視の出来上がりです。

複数のサービスを一括して監視できるように作りましたが、実行感覚が短かったり監視対象が多すぎるとAPIのリクエスト過多でエラーになるようです。