_RJ 技術メモ

人生を豊かにする技術を提供する、筋肉

簡易的にWebサーバーを監視して、停止時にSlackに投稿する

GoogleAppsScript Slack httpd slackbot JavaScript

概要

Webサーバーが落ちていないかを簡易的に監視するツールをGASで作成。 Dockerのコンテナで複数サーバーを運用しているが、別コンテナでSeleniumを動かしていたため、最近の話だがメモリ不足でサーバーが半日ほど停止し、検索順位が大幅に落ちるという恐怖を味わったので、GASに監視を代行させる。

スクリーンショット 2017-03-12 2.50.47.png

事前準備

  1. SlackのAPIキーを取得する
  2. Slackのチャンネルにserver-monitorを追加する
  3. GASのトリガーを、5分から15分くらいに設定する

ソースコード

  1. UrlFetchApp.fetch(url)でソースを取得
  2. try-catchによりエラーを捕捉()
  3. エラー捕捉時、スラックに投稿する
function myFunction() {
  var url = 'WebサーバーのURL';
  
  try{
    UrlFetchApp.fetch(url);
    Logger.log('Success'); 
  }catch(e){
    postSlack('server-monitor', 'httpd-server-monitor', 'ウェブサーバーが障害により停止している可能性があります。 \n' + url);
    Logger.log('Failure'); 
  }
}


function postSlack(channelname, username, message){
  //Get channels
  var slackApp = SlackApp.create('APIキー');
  var channels = slackApp.channelsList().channels;
  
  Logger.log(channels);
  
  //Channel check
  var channel = null;
  channels.forEach(function(v, i){
    if(v.name == channelname){
     channel = v; 
    }
  });

  //Post Message
  slackApp.postMessage(channel.id, message, {
    username : username
  }); 
}

補足

あくまで簡易的なので、アクセス集中時のエラーページなどの判定は行わない。