40
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GASでサイトの死活監視をするスクリプト[改良版]

Last updated at Posted at 2017-05-11

サイトの死活監視に、Cronを使えるサーバを用意しなくても、GAS[Google Apps Script]だけでいけるとのことで、下記のページを見つけました。

サイトの死活監視用Google Apps Script - Qiita

このページの方法では、実際の利用にあたり下記のような問題点がありました。

  • サイトアクセスできないときのみ通知メールが送信され、復旧した時に通知メールがない。
  • 長時間サイトが死んでいると、トリガー発生のたびに通知メールが送られてしまう。

そこで、機能変更/追加したスクリプトを考えてみました。

GASのスクリプトプロパティにサイトの死活状態を保存しておくことで、[OK] -> [NG]または[NG] -> [OK]と状態が変化したときのみ、メールを送信するようにしてみました。

サイトの死活は、監視URLをフェッチして、そのレスポンスコードが200かで判定しています。


var siteURL = "http://監視するURL";
var mailto = "通知先メールアドレス";
var STAT_OK = "OK";
var STAT_NG = "NG";

function myFunction() {

  try {

    // URLをフェッチ - muteHttpExceptions:trueの場合、HTTPエラーの際に例外をスローしない
    var response = UrlFetchApp.fetch(siteURL, { muteHttpExceptions:true });
    // レスポンスコード
    var code = response.getResponseCode();

    // スクリプトプロパティ
    var scriptProperties = PropertiesService.getScriptProperties();
    // スクリプトプロパティからサイトの死活状態を取得
    var siteStat =  scriptProperties.getProperty('SITE_STAT');

    // レスポンスコード 200をチェックする
    if(code == 200) {
      if(siteStat != STAT_OK ) {
        // サイト状況OKをスクリプトプロパティにセット
        setSiteStat(STAT_OK);
        // 通知メール送信
        sendNoticeMail( "access OK\n" + "code: " + code + "\n");
      } else {
        // do nothing
      }
    } else {
      if(siteStat != STAT_NG ) {
        // サイト状況NGをスクリプトプロパティにセット
        setSiteStat(STAT_NG);
        // 通知メール送信
        sendNoticeMail( "access NG \n" + "code: " + code + "\n");
      } else {
        // do nothing     
      }
    }

  } catch(err) {
    // catch : DNSエラーなどでURLをfetch出来ないとき

    // サイト状況NGをスクリプトプロパティにセット
    setSiteStat(STAT_NG);
    // 通知メール送信
    sendNoticeMail( "access NG \n" + err  + "\n");
  }

}

// 通知メール送信
function sendNoticeMail(txtBody){

  var subject = "[死活監視] " + siteURL ;
  var body = siteURL + "\n" + txtBody;

  MailApp.sendEmail(
    mailto, 
    subject, 
    body
  )

}

// スクリプトプロパティに死活状態をセット
// bStat - OK / NG
function setSiteStat(bStat){

  // スクリプトプロパティをセット
  var scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperty('SITE_STAT', bStat);

}

ちょっとした値を保存しておく際に、GASのスクリプトプロパティは簡単で便利ですね。GAS編集画面のメニューから、[ファイル]-[プロジェクトのプロパティ]-[スクリプトのプロパティ]とたどると、保存されている値を確認できます。

screenshot-script.google.com 2017-05-11 23-55-27.png

40
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?