Windows Azure

1. phpinfo()

これがもっともよく使用するツールです。
PHPランタイムにかんする多くの情報を出力してくれます。
有効になっているPHPエクステンションや、サーバー情報やPHPの設定を確認することができます。

phpinfo()を使用するために、次の1行を含むPHPファイルを作成します。

<?php phpinfo(); ?> 

このファイル名は推測しにくいファイル名にしてください。
phpinfo.phpみたいなのは避けてください。
サイトのrootディレクトリにアップロードしてください。Webブラウザにアップロードすると次のようなページが出力されます。

phpinfoから出力される情報はセキュリティ上機敏な情報が含まれています。必要性がなくなったら、削除する用意してください。

2. wincache.php

WinCacheエクステンションは、PHP WebSitesで既定で有効になっています。
オペレーションコードやユーザーキャッシュの動作状況、現在のキャッシュコンテンツを確認するには、winchache source code リポジトリからダウンロードするwinchache.phpスクリプトを使用します。
スクリプトを取得し、ユーザ名とパスワードを編集して利用します。

/**  * ======================== CONFIGURATION SETTINGS ==============================
* If you do not want to use authentication for this page, set USE_AUTHENTICATION to 0.
* If you use authentication then replace the default password.
*/ 
define(‘USE_AUTHENTICATION’, 1); 
define(‘USERNAME’, ‘someusername’); 
define(‘PASSWORD’, ‘somepassword’); 

websitesのルートディレクトリにアップロードし、Webブラウザでアクセスします。
次のような結果が出力されます。

3. PHP エラーログ

Windows AzureのPHPランタイムは、サイトのFTPルートは以下の/LogFilesにアプリケーションエラーログが格納されるように設定されています。

アプリケーションが動作していなかったり、ブランクページを表示する場合、エラーの詳細を確認するために、このファイルを参照してください。また運用時も定期的に確認するようにすると良いです。

デフォルトのエラーログ出力箇所を別の場所に変更することもできます。
.user.iniと呼ばれるファイルを作成し、次の行を追加します。

error_log=D:\Home\site\wwwroot\php_errors.log 

websaitsのルートディレクトリ(wwwroot)配下にファイルをアップロードします。

4. PHP display_errors

PHPランタイムのdisplay_errorsディレクティブは、HTTPレスポンスでえーらーを表示します。
プロダクション環境では、webサイト訪問者にエラーを見せないために、
OFFに設定しておくべきです。
開発、デバッグ目的で一時的に使用する際には、.user.iniファイルに次の内容を記載してください。

display_errors=On 
html_errors=On 
error_reporting = E_ALL 

アプリケーションでエラーがあると、Webブラウザにエラーが出力されます。

5. HTTPログ、詳細エラーメッセージ、失敗リクエストのトレース

デフォルトでは、HTTPロギング、詳細エラーメッセージ失敗リクエストのトレースはオフになっています。有効にするには、Windows AzureポータルでCONFIGUREページを使用します。

有効にすると、サイトのFTPルート配下のディレクトリにログが出力されます。

  • HTTPログファイル:/LogFiles/http/RawLogs;
  • 詳細エラーログ:/LogFiles/DetailedErrors;
  • 失敗リクエストのトレースログ:/LogFiles/W3SVC#########/;

6. XDebug PHP エクステンション

Xdebugは、数多くの有益なデバッグ情報を提供してくれるPHPスクリプトのプロファイリング、デバッグに役立つ、とても有名なPHPエクステンションです。
Windows AzureでXdebugを有効にするあために、ダウンロードページから適切にビルドされたXDebugエクステンションをダウンロードします。PHP 5.3を使用している場合は、「5.3 VC9 (32 bit)」をダウンロードします。PHP 5.4を使用している場合は、「5.4 VC9 (32 bit)」をダウンロードします。Windwos OSno64ビットを使用していても、32ビットでビルドされたものを使用します。
スレッドセーフ(TS)ビルドは使用しないでください。

/site/wwwroot/binディレクトリに、php_xdebug_####.dllファイルをアップロードしてください。
binディレクトリが存在しない場合は作成してください。
xdebugエクステンションを有効にするために、アップロード後Windows AzureポータルのCONFIGUREタブを使用します。

xdebugを有効にすると、詳細なエラーメッセージとコールスタックを取得できるようになります。

7. ClearDBのステータス

MYSQLデータベースのホスティングを提供するClearDBサービスはWindows Azureポータルに統合されています。ポータルからMySQLデータベースの管理と購入ができます。
課金も統合されており、ClearDBの課金はWindows Azureサブスクリプションに含まれています。

ADD-ONSタブを使用して、ClearDB管理ページにアクセスします。

ほかのデータベース管理情報にアクセスするのと同様、ClearDBクエリ情報ページが開きます。

データベースでのクエリの性能情報チャートが表示されます。

参考情報

PHP Troubleshooting in Windows Azure Web Sitesをざっくり抜粋して意訳した投稿です。

Windows Azure

Windows Azureアプリケーションのデバッグを通して、Azureプラットフォームでのデバッグテクニックを蓄積しました。Windows Azureのトラブルシュートの為に使用している情報の多くを共有するためのBlogシリーズを投稿する予定です。
シリーズの最初は、Azure VMにリモートデスクトップで接続し、確認することができるリソースを紹介したいと思います。

VM上のリソース

問題の解決の為に重要なことの一つは、環境全体と提供されているリソースとログファイルについて理解することです。
Cドライブは設定情報とローカルストレージを格納します。
Dドライブは、WindowsとWaAppAgentログを格納します。
Eドライブは、顧客のロールコードを格納します。

Cドライブ:ログファイル、ローカルストレージフォルダー

デバッグ(例えば、WinDBG、ツール、ダンプファイル、ログファイルなど)している間、ローカルの一時領域としてCドライブを使用できます。すべてのトラブルシューティングツールが読み込むためにC:\Scratchを作成します。

  • C:\Config サービス設定情報
    • <DeploymentID>.<RoleName>.<index>.xml
      これは、ユーザロール用メインの設定情報です。サービス設定ファイル(管理ポータルで設定を更新したり、更新を再配置など)を更新したら、複数のコピーされたXMLファイルが格納され、<index>カウンターは、新しい設定バージョンが1つ追加されます。
      • デプロイ名
      • サービス名
      • 証明書
      • ホストプロセス
      • cscfg設定と値
      • ローカルストレージフォルダー
      • InputEndpoint、InternalEndpoinとポートのマッピング
    • <GUID>.ccf
      • OSバージョン
      • クラスター名
      • デプロイID
      • VMサイズ(<ProcessorCount>を探してください)
      • ipconfig情報
  • C:Resources ローカルストレージ、ログファイル、AspNetTemp
    • ディレクトリ\<GUID>.<RoleName>.DiagnosticStore – IISログ、失敗したリクエスト(freb)ログ
    • ディレクトリ\<guid>.<role>.DiagnosticStore\Monitor\Tables – Azure 診断モニターが収集したすべての調査情報(イベントログ、ロールログ、WAD調査情報など)。table2csv.exeを使用して.tsfファイルを収集する方法は、Getting Azure Diagnostic Information from a VMを参照してください。
    • Temp\<GUID>.<RoleName>\RoleTemp – ホストプロセスログ
    • Directory\<GUID>.<RoleName>.<LocalStorage name> – サービスモデル(.csdef)で定義されている<LocalStorage>フォルダーです。

Dドライブ:Windows(%SystemDrive%、%SystemRoot%など)、エージェントログ

  • D:\Packages\GuestAgent – エージェントログ
    • このロケーションからWaAppAgent.exeが開始されます。
    • WaAppAgent.exe.log – インスタンスのスタートアップ詳細を記録するエージェントログファイル
    • WaAppAgent.<index>.log – 履歴ログファイル

Eドライブ:サービスパッケージを含む仮想ドライブ

ゲストエージェントがサービスパッケージを配置したとき、このドライブが作成されます。これは動的に生成され、落ち着くまでFドライブ、Gドライブとなります。

  • _entrypoint.txt – ホストプロセスが呼び出すエントリポイントを含むDLL
  • RoleModel.xml – <Startup>タスクと<Sites>設定エレメントを含むXMLファイルです。また、MSBuild情報とターゲット.NET Frameworkのバージョンを含みます。
  • <GUID>.csman – PackageManifestは、パッケージのすべてのファイル一覧(Visual Studioにコピー&ペーストできる形式)を記録しています。
  • \Base\x64 – サービスコードで動作するホストプロセス
  • \Approot – 顧客のコード、aspxページ、DLLなど
  • \Sitesroot\<index> – Full IISサイトの動作起点のフォルダーです。
    ロールがデプロイされたとき、\Approot から、この\Sitesroot へファイルがコピーされ、IISは、\Sitesrootから動作するように設定されます。一時的なテストの為に、ロールを変更する(web.configの変更、新しいDLLなど)場合には、ここを置き換えなければなりません。