モニター
PHP実行環境の異常を知るには、エラーログを参照するのが一般的です。エラーログは、PHPコードの実行時に発生したエラーなどを検出して記録します。E_ERROR、E_WARNING、E_PARSE、E_NOTICEなど、重要度によって出力の可否を変更することも可能です。しかし、PHPエラーログを過信してはいけません。なぜなら、エラーログは、問題と認識しないと記録しないからです。
例えば、処理時間が異常に長くなる事象はよくある問題です。一般的にシステムは、稼働時間に比例して性能が劣化します。一般的なWebサイトの場合、表示するまでに時間が掛かると利用者は、他のWebサイトに移動してしまいます。しかし、PHP実行にエラーが検出されなければ、PHPエラーログには何も記録されません。
実際にWebアプリケーションの処理(応答)時間を把握するのであれば、PHPのエラーログではなくWebサーバのアクセスログを解析する必要があります。24時間365日絶え間なく運用するWebサーバは、リアルタイムで問題発生を把握して短時間で対処する必要があります。それには、もっとシンプルで手軽に問題を把握しなくてはなりません。
モニター機能の概要
Zend Serverでは、モニター機能により、Webサーバの異常をリアルタイムで検出するとともに原因の分析をサポートします。
モニター機能では、異常を検出するための条件をルールと呼びます。検出された事象をイベントと呼びます。PHPコードの実行状況を監視して、設定されたルールに該当しないか常にチェックしています。ルールに該当する異常な処理は、イベントとして記録します。ルールには、検出時にメールでの報告やコードトレーシングを実施する指定も可能です。
![図15 モニター機能の概要](http://cz-cdn.shoeisha.jp/static/images/article/5735/5735_fig15.gif)
イベント出力例
Zend Serverは、PHPコードの実行を常に監視し、ルールに該当する異常な処理があれば、イベントとして記録します。Zend ServerのTopページには、検出された最新のイベントが一覧表示されます。
イベントをクリックすると、各イベントの詳細情報を表示します。イベントの種類によって、詳細表示の内容が異なります。実行遅延などの実行可能な(エラーではない)イベントの場合には、Zend Studioと連携して、デバッグやプロファイルを行うボタンを表示します。[イベントをプロファイル]ボタンをクリックすると、実行時の環境変数やPost/Get/Cookieの値によって、Zend Studio経由で再実行され、プロファイル結果を表示します。ボトルネックが、どの部分にあるか容易に調査でき、即座にコーディングを行えます。
ルールの設定
モニターには、実行時間、メモリ使用量、出力量、エラー、Zend Server独自の機能など5のカテゴリのルールが用意されており、全体で24項目にもおよびます。特に実行時間に関しては、8項目が用意されており、PHPコード全体から関数単体までの範囲別に監視できます。さらに、重要度別に2段階の設定が可能なので、きめ細かく監視できます。
ルール名 | イベント検出条件 |
Function Error | ルールに掲載された関数でFALSE(エラー)を返したら |
Database Error | ルールに掲載された関数でFALSE(エラー)を返したら |
Severe Slow Function Execution | ルールに掲載された関数の実行時間が2000ミリ秒を超えたら |
Slow Function Execution | ルールに掲載された関数の実行時間が500ミリ秒を超えたら |
Severe Slow Query Execution | ルールに掲載された関数の実行時間が2000ミリ秒を超えたら |
Slow Query Execution | ルールに掲載された関数の実行時間が500ミリ秒を超えたら |
Severe Slow Request Execution(Absolute) | スクリプトの実行時間が2000ミリ秒を超えたら |
Slow Request Execution(Absolute) | スクリプトの実行時間が500ミリ秒を超えたら |
Severe Slow Request Execution(Relative) | スクリプトが平均的な実行時間よりも60%以上超えたら |
Slow Request Execution(Relative) | スクリプトが平均的な実行時間よりも30%以上超えたら |
Severe High Memory Usage(Absolute) | スクリプトが8192KB以上のメモリを消費したら |
High Memory Usage(Absolute) | スクリプトが5120KB以上のメモリを消費したら |
Severe High Memory Usage(Relative) | スクリプトが平均的なメモリ消費量よりも60%以上消費したら |
High Memory Usage(Relative) | スクリプトが平均的なメモリ消費量よりも30%以上消費したら |
Inconsistent Output Size | スクリプトの出力サイズが60%以上乖離したら |
Uncaught Java Exception | キャッチされないJavaの例外が発生したら |
Custom Event | カスタムイベントが発生したら |
Fatal PHP Error | ルールに掲載された種類のPHPエラーが発生したら |
PHP Error | ルールに掲載された種類のPHPエラーが発生したら |
Job Execution Error | ジョブを実行できなかった場合 |
Job Logical Failure | ジョブが必然的な失敗を報告する場合 |
Job Execution Delay | ジョブの起動時間があらかじめ定義された秒数以上に予定を上回る場合 |
Job Queue High Concurrency Level | キューの利用度がその限界に達したか、または接近する場合 |
Failed Writing Code Tracing Data | Zendコードトレーシングでダンプファイルの保管に失敗したら |
各ルールには、検出時の操作(対処)も指定できます。[コードトレーシングを保管]を指定すると、実行時のメモリ使用量や実行時間を詳細に記録します。[メール送信]を指定すると、検出時にメールで通報できます。
関数名を指定してピンポイントで実行時間を監視することも可能です。この場合、関数名をリストとして設定します。ルールでは、一般的な関数とDB関数の2項目に分離されており、チューニング対象となりがちなDB関数を集中的に監視できます。
メールによる報告
イベントによっては、直ちに対処しなければならない事象も考えられます。Zend Serverは、イベント検出時にメールで報告できます。ルールごとにメールでの報告可否が設定でき、送信アドレスも個別に設定できます。そのため、イベントの種類や重要度に応じて、メール送信先を変えて運用できます。
メールの内容は、実際に発生した事象と時間がシンプルにまとめられています。メールには、Zend Serverにアクセスするためのリンクもあり、ダイレクトにイベントの詳細レポートページにアクセスできます。
Zend Serverのインストールから注目の機能まで、駆け足でご紹介しました。Zend Serverは、PHPを知り尽くしたZend社が自信を持ってお勧めするプロダクトです。導入から運用監視まで、あらゆる場面で関係者(開発者から運用担当者)をサポートします。Webサーバと関係者の負荷を軽減し、より快適で安定した運用をもたらします。