ウェブサイトが正常に動いているのかを監視するツールは沢山あります。
弊社ではAWSのRoute53にあるHealthCheckを使っていたのですが、こちらは秒間のチェック数が半端なくて、弱いサーバだとHealthCheckの負荷でサーバダウンするっていう笑えない状況もありました。
そこでGoogle Apps Scriptを使ってウェブサイトの状態をチェックをして、さらにはSlackに通知しちゃおうと思いました。
Google Apps Script、略称GASは、Googleが提供しているサービスです。
GoogleドライブでGoogle Apps Scriptのドキュメントをちょろちょろっと書けば、それで動きます。
Goole関係のサービスや、その他のウェブサービスと連携させて、世の中を便利にできてしまう、そんな素敵なツールです。
基本はJavascriptで書くので、とっかかりも楽ちんですね。
GASリファレンス:https://developers.google.com/apps-script/referenc...
ではさっそく取り掛かります。
まずはGoogle Apps Scriptのドキュメントを新規作成しましょう。
さて、Google Apps Scriptが作れたら、下準備をします。
Slackに投稿するには、Slackとの連携が必要です。Slackとの連携を行うには、slackAppという便利なライブラリが公開されていますので、こちらを利用させていただきます。
こちらでライブラリキーを取得します。
https://github.com/soundTricker/SlackApp
そして、Google Apps Scriptのリソースメニューからライブラリを選択し、「ライブラリを検索」のフォームに先ほどのキーを記入して選択ボタンをクリックすると、ライブラリが追加されます。バージョンを選択して、保存してください。
画像にはScriptが記入されていますが、後で追加しますので気にしないで進めて下さい。
Slackへの再パスワードが求められるので、パスワードを記入すると、「Confirm」状態になります。
そして、Google Apps Scriptのファイルメニューからプロジェクトのプロパティを開き、「スクリプトのプロパティ」タブに、先ほどのトークンを追加します。プロパティ名は「SLACK_ACCESS_TOKEN」にします。
それではScriptを書きましょう。
function websiteWatchAlert() {
var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');
var slackApp = SlackApp.create(token);
var options = {
channelId: "#general",
userName: "bot",
mention: "@hoge"
};
var url = "http://www.example.com/"
var message = '';
var response = UrlFetchApp.fetch(url);
var response_code = response.getResponseCode();
if(response_code==200){
// ここで対象ページのhtmlを検証してください
var content = response.getContentText("UTF-8");
var reg = /fugafuga/;
if(!reg.exec(content)){
message = url+" ページが正しく表示されていません";
}
}else{
message = url+" 不正なレスポンスコードが返されました: "+response_code;
}
if(message.length>0){
slackApp.postMessage(options.channelId, (options.mention.length>0 ? options.mention+": " : "")+message, {username: options.userName});
}
}
上記のスクリプトを適宜修正してペーストしてください。
ページのレスポンスコード200を確認するだけでは、DBが落ちていた場合など、コンテンツが正しく表示されているのかまではわからないので、DBから取得して表示するデータをreg = /fugafuga/の箇所で、正規表現などで確認するようにすれば、より監視が正確になるかと思います。
ページ上部にある実行ボタン(右矢印)をクリックします。
すると、最初だけ承認を求められますので、許可を確認し、承認してください。
さあ、これでスクリプトが走ります。
Slackにメッセージは飛んだでしょうか。
後は、一定間隔ごとにスクリプトを叩いて、チェックを繰り返します。
これで完了です。
お疲れ様でした。