[PHP] レスポンスタイムを計測する監視スクリプト

仕事先が契約しているデータセンターのウェブサーバーがもう笑うしかないぐらい不安定。僅かなアクセスしか無いにも関わらず、気が付くとサーバーは落ちてるし、502、503、504のエラーが返るのも日常茶飯事。24時間通算してどれぐらい不具合が起きているのだろうか?と気になったので監視スクリプトを作ってみた。

監視スクリプトの仕様

  • 監視スクリプトはターゲットのサーバーとは別の安定したサーバーに置く。
  • 監視スクリプトはPHPで書いてcronで5分ごとに実行させる。
  • ターゲットのサーバーから特定URLをGETするのに要した時間をログに書き出す。

ネットを調べるとpingコマンド利用のサーバー死活監視スクリプトが多数ヒットしたけど、僕が必要なのはブラウザにページが表示されるまでの体感時間なので、HTTPのGETのレスポンスタイムを計測するのが現実的かと。サーバーが完全に死んでいたらタイムアウトになるだろうし。

監視スクリプト

以下のようなスクリプトを作成した。HTTPリクエストの実行にはPEARのHTTP_Requestを利用。logsというサブディレクトリを作成しておくと、日付を名前にしたCSVファイルが自動生成されて、スクリプトが実行されるたびにログが追記される仕組み。監視するURLは複数指定可能にした。

実行例

以下にログファイルの抜粋を例として示す。各行先頭から処理時間(秒)、実行日時、ステータスコード、URLの順にカンマ区切りで記録される。ステータスが200以外のときはレスポンスヘッダの配列ダンプも追記される。