none
IISの失敗ログが取得できません RRS feed

  • 質問

  • IISの通常のログは取得できていますが、失敗した場合のログを取得することができません。
    ソースは以下のものを使っています。

    【WebRole1.cs】
      public override bool OnStart()
            {
                var dmc = DiagnosticMonitor.GetDefaultInitialConfiguration();

                dmc.Directories.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1);
                DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", dmc);

                return base.OnStart();
            }

    【Web.config】
     <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        <tracing>
          <traceFailedRequests>
            <add path="*">
              <traceAreas>
                <add provider="ASP" verbosity="Verbose" />
                <add provider="ASPNET"
                     areas="Infrastructure,Module,Page,AppServices"
                     verbosity="Verbose" />
                <add provider="ISAPI Extension" verbosity="Verbose" />
                <add provider="WWW Server"
                     areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module"
                     verbosity="Verbose" />
              </traceAreas>
              <failureDefinitions timeTaken="00:00:10"  statusCodes="400-599" />
            </add>
          </traceFailedRequests>
        </tracing>
      </system.webServer>

    存在しないページにアクセスしても、ページロード時にThread.Sleep(30000)などで応答を遅れさせても
    aspx.csなどへのリクエストをしても、IISの失敗ログが出力されません。

    ご存知の方は教えていただけると助かります。

    2011年4月27日 5:02

すべての返信

  • 冨田でございます。

    SDK1.3では、インスタンス側でログファイルのアクセス権が不適切なため、IIS関連のログが出力できない問題があります。
    この問題の対処方法については以下を参照してください。
    http://www.wignite.com/2011/03/setting-up-diagnostics-with-windows-azure-sdk-1-3/

    IISのログが出力できない問題に関しましてはSDK1.4で修正されていますので、使用するSDKをアップデートする方向で検討されたほうが良いかとおもいます。


    2011年4月27日 7:26
    モデレータ
  • 冨田様

    お教えいただいてありがとうございます。
    SDKのバージョンを確認したところ、残念ながら1.4を使っていたので、
    SDKのアップデートでは解決できないようです。

    もし、ほかに何かご存知でしたら、教えていただければ助かります。

    2011年4月29日 5:57
  • Combipetit 様
    こんばんは、Mayomayoです。
    まずは問題を切り分けられては如何でしょうか?
    次の1から3まで行って頂いて何処までできているかご確認下さい。
    1. 開発環境上ではログが出力されているか?
    ( IIS上でということですのでできていると思われますが、最終的に開発ストレージに転送されているかもご確認下さい。)
    2. 本番のWindows Azure 上に配置後ログ取得の設定は正しく反映されているか?
    以下のどちらかの方法で確認できます。
    ・ログ記録先のストレージのBlobコンテナwad-control-container(コンテナ名は変更可能) 
    に自分の設定した内容と同等のテキスト(xml)が記録されているか?
    以下は診断設定の記録例です。

    <?xml version="1.0"?>
    <ConfigRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <DataSources>
     <!-- クオータを明示的に指定しています。もし別の設定になっていたら
         設定ファイルのミスなどで適用されていない可能性があります。-->
     <OverallQuotaInMB>2048</OverallQuotaInMB>
     <Logs>
     <BufferQuotaInMB>256</BufferQuotaInMB>
     <ScheduledTransferPeriodInMinutes>60</ScheduledTransferPeriodInMinutes>
     <ScheduledTransferLogLevelFilter>Error</ScheduledTransferLogLevelFilter>
     </Logs>
     <!-- 省略 -->
    </ConfigRequest>
    
    
    ・Windows Azure MMC に表示される対象インスタンスの診断の設定
    ( http://archive.msdn.microsoft.com/windowsazuremmc )
    ServiceManagement → Hosted Services → 自分のサービス名 
    → 配置先( Staging、Production ) → Diagostics
    この中のFile Based Logsの中に保存先のパスやクオータが設定されているはずです。

    3. リモートデスクトップで接続してログが記録されているか確認する。
    Azure 上のログが保存されるフォルダの中身を直接確認します。
    ログ保存先のフォルダは上記のAzure MMCで確認できます。
    恐らく該当フォルダはアクセス権が設定されていてデフォルトでは中身が見れません。
    ただ、リモートデスクトップのユーザーは管理者ですので変更が可能です。
    対象フォルダのプロパティのセキュリティタブから詳細設定を行いアクセス許可を、
    Everyone フルコントロールに変更すれば、フォルダ内にログファイルができているか確認可能になります。

    • 編集済み Mayomayo 2011年5月1日 10:25 文言修正
    2011年4月30日 12:16
  • 確認が遅くなってすみません。

    そもそも1で躓いているようです。
    ブラウザ上では開発ストレージにログがある旨のIIS7のエラー画面が出るのですが、
    実際には出力されていませんでした。
    (開発ストレージ上のWebディレクトリに格納されているとメッセージにあるのですが
    Webディレクトリ自体が作成されていない状態です)

    この状態で何か確認すべきところなどをご存知でしたらお教えいただけると助かります。

    2011年5月9日 15:11
  • こんにちは。

    SDK1.3以降でFull IISだとApplication_StartでCloudStorageAccount.SetConfigurationSettingPublisherを呼び出す必要があったりしませんか?

    http://blog.smarx.com/posts/how-to-resolve-setconfigurationsettingpublisher-needs-to-be-called-before-fromconfigurationsetting-can-be-used-after-moving-to-windows-azure-sdk-1-3

    また転送設定等を行った後、SetCurrentConfiguration()メソッドでセットしてあげないといけなかった気がします。

    というのもSDK1.3でDiagnosticsのプラグインが導入され、プラグインを入れておけば(既定で.csdefに定義されてると思いますが)OnStartは呼び出さなくても既に起動しているはず=起動後に設定変えるのでSetCurrentConfiguration()で変更しないといけなかった気がします。

    http://convective.wordpress.com/2010/12/01/configuration-changes-to-windows-azure-diagnostics-in-azure-sdk-v1-3/

    細かく検証できていないので、これでちゃんと動作するか不明ですが一度確認頂ければと思います。

    2011年5月10日 8:37
    モデレータ
  • こんばんは、Mayomayoです。
    k.buchiさんご紹介2つ目のurlで診断エージェントを変更したことがあります。
    こちらで対応が可能と思われます。

    なお、sdk1.2での方式は今でも動作はするようです。
    ・Azure プロジェクトのロール→プロパティ→構成→「診断を有効にする」を未チェック
    ・Combipetit さんの書かれたような下記のコードを追加。
    ただ、開発環境で確認した限り、Compute Emulator に警告のようなものが出力されているようにも見えますので本当に正しいコードかどうかは不明です。
       DiagnosticMonitorConfiguration dmc = DiagnosticMonitor.GetDefaultInitialConfiguration();
       //診断を設定するコード
       dmc.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);
    //Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString はVSと連動しているので //Azureストレージへの接続文字列は別途用意する。 DiagnosticMonitor.Start("MyStorageConnectionString", dmc);
    どちらの方式でも開発環境の診断ログ保存フォルダは基本的に自動で作成されますので、IIS以外のログ(パフォーマンスカウンタ等)だけを出力するようして動作するかも試されてみては如何でしょうか。

    • 編集済み Mayomayo 2011年5月26日 10:06 ソースコードのTimeSpan の間隔が最小値より小さい5秒になっていたのを訂正
    2011年5月16日 10:52
  • 情報をありがとうございます。また、毎度確認が遅くなりすみません。

    IISの通常のログ、パフォーマンスカウンタなどは正常に出力されています。
    (エミュレータ上でもAzure上でもです)

    接続文字列は"Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"の名前で
    Azureストレージ上へのものを用意しています。

    また、k.buchiさんにお教えいただいた2つ目の方法だと、FailedReqLogFilesフォルダ配下に
    これまでできていなかったWebフォルダなどのフォルダ類はできるようになりましたが
    やはり肝心のログファイル自体が生成されていません。

    .aspにリクエストをかけた上で、時間をおいてからフォルダを見ているのですが
    動作の確認方法が間違っているのでしょうか・・・?

    2011年5月22日 6:41
  • > .aspにリクエストをかけた上で、時間をおいてからフォルダを見ているのですが
    > 動作の確認方法が間違っているのでしょうか・・・?

    正しい動作として、まずはそこにログファイルが作成されている事が大前提となります。
    IISがログをフラッシュした後、そのフォルダに一時的に保存します。
    最終的は指定したBLOBの wad-iis-failedreqlogfiles コンテナ(名称は変更可能)に転送されます。
    ここまでできれば全て確認は終了です。

    確認方法は次のページのTake-1の6付近が参考になるかと思います。
    Exercise 3 - Monitoring Applications in Windows Azure
    http://channel9.msdn.com/learn/courses/Azure/Deployment/DeployingApplicationsinWindowsAzure/Exercise-3-Monitoring-Applications-in-Windows-Azure


    本番環境でも同じように最終的に指定したBLOBに転送されます。
    最近分かったのですがSKD 1.4 でも FailedReqLogFiles (失敗した要求トレース)ログに関してはまだバグがあって転送されないようです。
    次のページに回避策が書かれていました。
    (私はうまく動かす事ができませんでした。もしうまくできた方がいましたら教えて頂きたいです。)

    IIS7 Logs Are Not Collected Properly
    http://msdn.microsoft.com/en-us/library/hh134842.aspx


    ただ、この問題はあくまで本番環境のみで開発環境に関しては上記回避策を行わなくてもFailedReqLogFilesは出力されます。

    Combipetit さんの現象ですと開発環境でもFailedReqLogFilesが出力されていないように見受けられます。
    下記の点をご確認されては如何でしょうか?
    1.web.config の設定。
    正しく反映されてましたら Web Role プロジェクトデバッグ中にIIS管理ツールで確認できます。
    -[操作]ペインの[失敗した要求のトレース]が有効になっている。
    -[機能ビュー]の[失敗した要求のトレース]が予期した値で設定されている。
    2.前の返信でお伝えしました wad-control-container に記録されている診断設定は予期した値になっていますでしょうか。


    別件ですが、ご利用しているSDKは1.4でしょうか、それともSDK1.4 "Refresh"でしょうか?
    もしRefreshでない場合は念の為、更新をお勧めします。

    2011年5月26日 10:04