2022/04/20に更新

【GASで監視】WEBサイトの稼働状況をチェックする

スプレッドシート業務改善

指定したWEBサイトの稼働状況を監視するGoogle Apps Scriptです。自分や自社のサイトを監視したいけどお金をかけたくないときにどうぞ。

こんな悩みを解決します


  • 自分のWEBサイトがダウンしていないか監視したい、けどお金はかけたくない。

用意するもの


特にありません。GoogleスプレッドシートとGASで実現できます。

このスクリプトで出来ること


  • シートに入力されたURLにアクセスし、WEBサイトが正常に稼働しているかチェックしてくれます。
  • エラーが発生した場合はそのエラー内容も記録してくれます。
  • 正常、異常の累計数も記録しますので、一定期間の稼働率も計算できなくもないです。

使い方


1.準備

A列に監視対象のURLを入力してください。
サンプルとして当サイトやヤフー、存在しないページや存在しないドメインを入力してみました。
B列以降はスクリプトが結果を書き込んでくれます。

2.スクリプトの実行

URLの入力が終わったら一度テスト実行してみましょう。
上部のメニューから「WEBサイトの稼働状況をチェックする」を実行します。

3.結果の確認

B列以降に結果が書き込まれるはずです。
2-3行目は成功、4-5行目は失敗していますね。失敗理由も確認できます。

4.トリガーの設定

テストで問題がなければ、自動的に監視をするためにトリガーを登録します。
監視目的なので短めの1分間隔で登録してみます。

  • 実行する関数: check_http_status
  • 実行するデプロイ: HEAD
  • イベントのソース: 時間主導型
  • 時間ベースのトリガーのタイプ: 分ベースのタイマー
  • 時間の間隔を選択: 1分

しばらく待つと・・・累計OK/NG数が増えていますね。

5.注意点

  • 例として1分間隔のトリガーを登録しましたが、監視対象が増えてくると1分で終わらなくなってしまうと思います。手動で実行したときにかかる時間から、適切な間隔で登録してみてください。
  • 本スクリプトではHTTPステータスコードしか見ていません。正常稼働を厳密に判定したい場合は、サイトをスクレイピングして文字列の存在チェック等を行うことをオススメします。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00072/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('WEBサイトの稼働状況をチェックする', 'check_http_status');

  // メニューを画面に追加する
  menu.addToUi();
}

function check_http_status() {

  // アクティブなスプレッドシート、シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // シートが使用されている範囲を取得
  let range = sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn());

  // シートの値を取得する
  const values = range.getValues();

  // 監視対象分、ループして処理していく
  for (let i = 1; i < values.length; i++) {

    // 使用する値を格納する
    let url = values[i][0]; // URL
    let counter_ok = values[i][3]; // 累計OK数
    let counter_ng = values[i][4]; // 累計NG数

    // 累計OK/NG数が空欄の場合(初回の監視)はゼロをセットする
    if (counter_ok == '') {
      counter_ok = 0;
    }

    if (counter_ng == '') {
      counter_ng = 0;
    }

    // サイトにアクセスしたときの返答を格納するための変数を宣言
    let response = '';

    // 確認結果を格納するための変数を宣言
    let result = '';

    // URLフェッチでサイトにアクセスする。エラーが出がちなのでtry catchする
    try {
      response = UrlFetchApp.fetch(url).getResponseCode();
    } catch (e) {
      response = e.message; // URLフェッチでエラーが発生した場合はエラーメッセージをresponseに入れる
    }

    // サイトに正常にアクセスできる = HTTPステータスコード:200が返ってくるので、OKと判断。それ以外はエラーメッセージを格納。
    if (response == 200) {
      result = 'OK';
      counter_ok++;
    } else {
      result = response;
      counter_ng++;
    }

    // 結果を書き込むため、書き込み範囲のrangeオブジェクトを取得
    let range = sheet.getRange(i + 1, 2, 1, 4);

    // 結果をシートに書き込む
    range.setValues([[result, new Date(), counter_ok, counter_ng]]);

  }
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp