10分で作れる無料WEB監視ツールを作ってみた

404 computer error - not found on an open laptop screen with a confused black man and businessman trying to conduct a web search, vector illustration

久々の投稿になりました。今回は、スプレッドシートとGoogle App Scriptで作れる、無料WEB監視ツールを作ってみました。WEBサイトが正常に動作していない(4xx, 5xx等の200以外のレスポンス)時、メールを送信してくれるスクリプトです。

追記
2021/9/17:メール本文にエラーの原因(エラーコード)を表示されるようにしました。

準備

スプレッドシートを用意

こちらのスプレッドシートのコピーを作成してください。

スプレッドシート

監視したいURLを記入

コピーしたシートの”URLlist”の”URL”列に、監視したいWEBサイトのURLを記入します。リストに記載されているURL全てが監視対象になります。

メール送信対象者を記入

シートの”emailList”の”Email”列に、エラーを検知した際にメールを送信する対象者を追加します。こちらも複数の人への配信が可能です。*Google Mail APIの送信制限によります。

スクリプトの作成

スプレッドシートの準備ができたら、スクリプトを作成していきます。”ツール” > “スクリプトエディタ”でスクリプトエディタを開いてください。開いたら、プロジェクト名を何でも良いので適宜変えておいてください。

スクリプト

スクリプトを貼っておきますので、コピペしてください。

function main() {
  var url_list = url()
  var dateTime = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd HH:mm:ss');

  for(var i in url_list) {
    var URL = url_list[i][1];
    var responseCode = isUrlDown(URL)
    if(responseCode !== 200) { // サイトが落ちてたとき(メール通知)
        sendMail(URL,responseCode);
        PostChatwork(URL);
        var result = 'サイトダウン' + responseCode;
    }
    else {
        Logger.log('正常に作動しています'); // ログに出力
        var result = '正常に作動しています';
    }
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("log");
    var log = [dateTime,URL,result];
    sheet.appendRow(log);
  }
}

function isUrlDown(URL) {

    var response = UrlFetchApp.fetch(URL, {
        muteHttpExceptions: true // 例外処理はしないようにする
    });

    return (response.getResponseCode() ); // HTTPステータスコードが、「200」以外はエラーとする

}

function sendMail(URL,responseCode) {

    const dateTime = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd HH:mm');
    var email_list = email()

      for(var i in email_list){
        var EMAIL = email_list[i][0];
        MailApp.sendEmail({
          to: EMAIL,
          subject: '【サイトダウン】検知しました',
          htmlBody: `
              以下のURLでサイトダウンを検知しました。<hr>
              URL: <a href="${URL}">${URL}</a><br>
              日時: ${dateTime} (JST)
              Response Code: ${responseCode}
        `
    });
      }
}

function url(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("URLlist");
  var url_list = sheet.getRange(2,1,sheet.getLastRow()-1,3).getValues();
  Logger.log(url_list);
  return url_list;
}

function email(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("emaillist");
  var email_list = sheet.getRange(2,1,sheet.getLastRow()-1,1).getValues();
  Logger.log(email_list);

  return email_list
}

“サービス”の追加

今回は、”Google Sheets API”を使用するので、サイドメニューの”サービス”から選択して、追加をします。これで準備が整いました!(かーんたん!)

テスト

”デバッグ”を押して、実行してみましょう。初回は、認証や権限リクエストが要求されるので、”許可”を押してください。

ログとメールの確認

これでスクリプトが完成しました。早速テストを実行してみましょう。実行すると、スプレッドシートの”Log”シートに、実行履歴が追加されます。

また、実際にエラーが検知されるとこの様なメールが配信されます。

定期監視の設定

Google App Scriptのトリガー機能を使って、定期監視をするための設定をします。
サイドメニューの”トリガー”から”トリガーを追加”を押します。トリガーを以下の通り設定し、保存します。

  • 実行する関数:main
  • 実行するデプロイ:Head
  • イベントのソースを選択:時間主導型
  • 時間ベースのトリガーのタイプを選択:時間ベースのタイマー
  • 時間の間隔を選択(時間):1時間おき
トリガーの設定画面

この設定をすることで、URLリストに記載されているURLの監視を毎時間実施する設定になりました。もちろん、この間隔は日時や2時間おき等、適宜変更していただいて構いません。

以上、参考になりましたでしょうか?WEB監視ツールは無料のものから高額なものまで数多ありますが、簡単な検知ツールとして今回のスクリプトを作ってみてはいかがでしょうか。
Slack連携も出来るので、次回UPしたいと思います。それでは!

<今回参考にさせて頂いたサイト>

おすすめ