【コピペで完了】サーバーダウンをSlackに即通知!GASで自作する無料監視システム

【コピペで完了】サーバーダウンをSlackに即通知!GASで自作する無料監視システム

「サイトが落ちているのに、顧客からの電話で初めて気づいた…」
「サーバーの不具合、上司に報告される前に知っておきたかった…」

IT担当者やサイト運営者なら、誰もが一度は冷や汗をかく瞬間です。しかし、高価な監視ツールを導入する予算はないし、24時間画面に張り付くわけにもいきません。

そんな悩みを解決するのが、Googleの無料ツール「GAS(Google Apps Script)」と「Slack」の連携です。

この記事では、プログラミング未経験の方でも「コピペするだけ」で、5分おきにサイトを自動監視し、異常があれば即座にSlackへ通知する魔法の仕組みを作る方法を解説します。

1. なぜ「GAS」での監視が最強なのか?

世の中には有料の監視サービス(SaaS)も多いですが、個人ブログや中小企業の社内ツールであれば、GASで十分です。

  • 完全無料: Googleアカウントさえあれば、追加費用は1円もかかりません。
  • サーバー不要: Googleのクラウド上で動くため、自分のPCを落としても監視は止まりません。
  • カスタマイズ自由: 通知文面や監視間隔を自分好みに自由に変えられます。

2. 【準備】SlackのWebhook URLを取得する

まずは、GASから通知を送るための「窓口」となるURLをSlackで作成します。

  1. 通知を送りたいSlackチャンネルを開き、チャンネル名をクリック。
  2. 「インテグレーション」タブ > 「アプリを追加する」を選択。
  3. 検索窓に「Incoming WebHooks」と入力し、追加ボタンを押します(※ブラウザが開きます)。
  4. 通知先のチャンネルを選択し、「Incoming Webhook インテグレーションの追加」をクリック。
  5. 表示された「Webhook URL」をコピーしてメモしておきましょう。

3. 【コピペOK】GASの作成とスクリプト設定

次に、監視の「心臓部」を作ります。

  1. Google Apps Script にアクセスし、「新しいプロジェクト」をクリック。
  2. エディタにある元々のコードをすべて消して、以下のコードをそのまま貼り付けてください。
/**
 * サイトの死活監視スクリプト
 * 異常検知時にSlackへ通知します
 */
// 【設定エリア】
const TARGET_URL = "https://example.com/"; // ←末尾に / を忘れずに
const SLACK_WEBHOOK_URL = "ここにコピーしたWebhook URLを貼る";

function checkWebsite() {
  const options = {
    "muteHttpExceptions": true,
    "headers": {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    }
  };

  try {
    const response = UrlFetchApp.fetch(TARGET_URL, options);
    const statusCode = response.getResponseCode();
    
    console.log("今回の結果(コード): " + statusCode);

    if (statusCode !== 200) {
      sendToSlack(`🚨【警告】サイト異常検知\nURL: ${TARGET_URL}\nステータス: ${statusCode}`);
    }
  } catch (e) {
    sendToSlack(`🔥【緊急】接続エラー\nURL: ${TARGET_URL}\nエラー内容: ${e.message}`);
  }
}

// Slackに送るための専用の箱
function sendToSlack(message) {
  const payload = { "text": message };
  const options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  
  // ここで直接 SLACK_WEBHOOK_URL を使うために、変数を一番上に移動しました
  UrlFetchApp.fetch(SLACK_WEBHOOK_URL, options);
}
JavaScript

書き換えのポイント

  • TARGET_URL: あなたの監視したいサイトのURLに変更してください。
  • SLACK_WEBHOOK_URL: 先ほどメモしたSlackのURLに置き換えてください(2箇所あります)。

貼り付けたら、上部の「保存(フロッピーアイコン)」を押し、「実行」ボタンでテストしてみてください。自分のSlackに通知が飛べば成功です!

4. 【重要】5分に1回自動実行する「トリガー」設定

今のままでは手動実行なので、これを「自動」にします。

  1. 左側のメニューから「トリガー(時計アイコン)」をクリック。
  2. 右下の「トリガーを追加」をクリック。
  3. 以下のように設定して保存します。
    • 実行する関数:checkWebsite
    • イベントのソース:時間主導型
    • 時間ベースのタイマーのタイプ:分ベースのタイマー
    • 時間の間隔:5分おき(※お好みで)

これで、Googleがあなたに代わって24時間365日、5分おきにサイトの生存確認をしてくれるようになりました。

5. よくあるエラーと対処法(トラブルシューティング)

「設定は正しいはずなのに通知が来ない」「エラーコードが返ってくる」という場合は、以下のステップを上から順番に確認してください。実は、ここが一番の「ハマりどころ」です。

① Googleの「承認」が済んでいない(初回のみ)

初めて「実行」ボタンを押した際、「承認が必要です」というポップアップが出ませんでしたか?

  • 対処法: 「権限を確認」→「アカウントを選択」→「詳細」→「(安全ではないページ)に移動」の順にクリックし、許可を完了させてください。これを行わないと、どれだけコードが正しくても動きません。

② 「Google」を監視して原因の切り分けを行う

コード自体のミスなのか、ターゲット側のサーバー拒絶なのかを判断するために、TARGET_URL を一度 https://www.google.com/ に書き換えて「実行」してみてください。

  • Googleで「200」が返る場合: GASのコードやSlack連携は正常です。原因は監視先サイト(自社サイトなど)のサーバー側にあります。
  • Googleでもエラーが出る場合: Webhook URLが間違っている(URLの末尾が削れている、" " で正しく囲まれていない等)か、スクリプトの貼り付けミスを疑ってください。

③ エックスサーバー等で「501」エラーが出る(WAFの問題)

監視対象がエックスサーバーなどのレンタルサーバーにある場合、実行結果としてステータスコード 501 (Not Implemented) や 403 が返ってくることがあります。

  • 原因: サーバー側のセキュリティ機能であるWAF(ウェブアプリケーションファイアウォール)が、Google(GAS)からのアクセスを「海外IPからの攻撃」や「不審なボット」と判定してブロックしているためです。
  • 解決策: サーバーの管理パネルから、WAF設定(特に「REST API制限」や「海外IP制限」に関する項目)を一時的にオフにして再度試してください。これで 200 が返ってくれば、WAFが原因確定です。
    > アドバイス: セキュリティを維持したい場合は、WAFを完全にオフにするのではなく、検知ログを確認して特定のルール(シグネチャ)のみを除外設定に登録するのがスマートな対応です。

⚠️ 安全に運用するためのワンポイントアドバイス

このシステムは非常に強力ですが、安全に使い続けるために以下の2点だけは必ず守ってください。

1. Webhook URLは「パスワード」と同じ

スクリプト内に貼り付けた SLACK_WEBHOOK_URL は、いわば「あなたのSlackに外部から書き込むための鍵」です。

  • 絶対に他人に教えないでください。
  • ブログやSNSにスクリーンショットを載せる際は、必ずこのURLを隠す(モザイクをかける)ようにしてください。
  • 万が一漏洩した場合は、Slackのアプリ管理画面からURLを再発行(Regenerate)して、古いURLを無効化しましょう。

2. 監視は「自分が管理するサイト」だけに

このスクリプトは5分おき(設定次第ではそれ以上)に自動でサーバーへアクセスします。

  • 他人のサイトや公共のサイトに対して行うと、相手のサーバーに負荷をかけたり、最悪の場合「サイバー攻撃」とみなされたりする恐れがあります。
  • 必ず、自分や自社が管理権限を持つサイトの生存確認のために活用してください。

3. ソースコードの公開・共有に注意

もし GitHub などの公開の場にこのコードをアップロードする場合は、Webhook URLを直接書かずに、GASの「スクリプトプロパティ」機能を使って隠すのがプロのやり方です。まずは自分だけで使う分には今のままでOKですが、共有する際はURLを消し忘れないよう注意しましょう。

まとめ:最速の検知が、あなたの信頼を創る

これで、万が一サーバーが落ちても、誰よりも早くあなたが状況を把握できるようになりました。

「何かあっても、この人がいればすぐ気づいてくれる」という安心感は、組織やクライアントからの絶大な信頼に繋がります。

次はこのGASを応用して、「レスポンスが〇秒以上かかったら通知する」といったパフォーマンス監視のカスタマイズに挑戦してみよう!

タイトルとURLをコピーしました