fbpx

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

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

準備

スプレッドシートを用意

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

https://docs.google.com/spreadsheets/d/1jBUZjIvF2wNm_ZogDhmgO2WxDQEDI71f2Jof6TrcqO4/edit?usp=sharing

監視したい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];
    if(isUrlDown(URL)) { // サイトが落ちてたとき(メール通知)        sendMail(URL);
        var result = 'サイトダウン';    }    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() !== 200); // HTTPステータスコードが、「200」以外はエラーとする
}
function sendMail(URL) {
    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)        `    });      }}
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したいと思います。それでは!

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