PHPで手軽にWEBサービスの死活監視&エラー時にChatWorkにメッセージを投稿する

htaccess

WEBサーバの死活監視の1つとして有効的なのがURLチェックです。

PINGコマンドでドメイン名を指定してもサーバ側(FWなども含む)でPINGに応答しないように設定していると稼動しているのに応答がないといった状況になります。

1番正確に判定しやすいのが、実際にURLにアクセスして目視する。
ですけど、1日に何度も目視なんてしてられませんから自動で監視してくれるサービスもあります。

大きな企業になれば自動で監視してくれるサービスにも費用を出して万全の体制がとれますが、あまりお金を掛けられない会社では担当者が毎日WEBサイトにアクセスして死活監視を目視しているということがあります。

また、監視サービスを利用していても、エラーが発生した場合に複数人にEメールメッセージは送信されているが「誰か対応するだろう」といった対応漏れが発生してしまうことも起こります。

Eメールだと他のメールに埋もれて見落としてしまったり、自動メール配信なので迷惑メールとして判定されてしまったりとリスクがあります。

そこで、お金をかけずに複数人でも進捗が把握できるようにチャットワーク(https://go.chatwork.com/ja/)を利用する仕組みを考えました。

【用意するもの】

・常時稼動しているサーバ(インターネット疎通あり)
・PHP7.x系
・Cron
・チャットワークのアカウント(API専用で用意した方がいいです)
 ※チャットワークについてはこちら(https://go.chatwork.com/ja/)

【確認できること】

ブラウザからHTTP(S)接続してページが見えるかどうか

HTTPアクセスを強制リダイレクトでHTTPSにしているなどアクセス左記がリダイレクトされていてもHTTPステータスコード302が返ってきますので正常稼動していると判定します。

SSL証明書の失効、設定ミスの場合はアクセスが拒否されますのでエラーとして判定されます。

ログイン画面が表示されるものは正常稼動と判定されますが、Basic認証の場合はエラーとして判定されます。

グローバルIPでHTTP接続が可能ならば正常として判定されます。

サーバの応答が異常に遅い場合(応答の状態にもよりけり)もエラー判定されます。

【スクリプト】

注意点
・監視したいサービス名称を決める際は2バイト文字・半角カナ・記号等は避けてください。サーバ側の設定によっては文字化けファイル名が生成されて全体にエラーを及ぼす可能性があります
・エラーが発生した日時を記録するファイルを生成しますので、ファイルの設置場所には書き込み権限が必要です
・Cronを利用する場合はサーバに余分な負荷をかけないように間隔を調整してください
・チャットワークのAPIは5分間に1000回までですでの余分な動作の実行はしないように調整してください
・チャットワークのルームIDとは対象チャットルームURL(www.chatwork.com/#!rid0000000)の /#!rid 以降の数字です
・.htaccessで404Not Foundを正常なページへ強制リダイレクトさせている場合は正規に存在するファイル(テキストファイルなど)を指定しましょう

必ず書き換えが必要なのは最初の項目の $target と $cwRoomId と $cwTokenCode の部分です。
サーバは稼動しているけども負荷が高くて応答に時間がかかっている場合も分かるように応答時間をシビアに設定しています。
応答時間をゆるくしたい場合は $curlOptions の項目を変更してください。
エラーが発生して対応するまでには時間が必要ですので、何度もお知らせがくるのが嫌な場合は $compTime の値を変更して下さい。

任意のファイル名でスクリプトを設置したらブラウザからアクセスしてみてください。
://example.com/hoge.php

全てが正常であれば架空のサブドメインを追加してみてください。
エラーがでてチャットワークで指定したチャットルームにメッセージが届けば成功です。

【cronの設定】

あまり頻繁にすると監視先のサーバに負担をかけてしまうので環境に合わせて調整しましょう