none
イベントログの出力について RRS feed

  • 質問

  • イベントログの転送設定を行い、テーブルストレージ(WADWindowsEventLogsTable)にイベントログが出力されるようにしたのですが、

    DescriptionプロパティにMessageとして設定した内容が出力されません。これは仕様なのでしょうか?

    メッセージソースとしては、「Application」を指定しています。

    開発環境では「Application」以外のメッセージソースを指定しても動作しますが、

    実際のAzure環境では、「Application」以外のメッセージソースを指定すると異常終了してしまいます。

    (恐らく、レジストリを更新する権限がないためだと思います。)

    メッセージソースとして「Application」を使用して、DescriptionプロパティにMessageの内容を出力することは可能でしょうか?

    もしくは、メッセージソースとして「Application」以外を使用することはできるのでしょうか?

    2011年2月16日 10:59

回答

すべての返信

  •  スパゲティさん

    こんばんは、Mayomayoです。

    SDK 1.2 時点の情報では次のようになっています。
    http://msdn.microsoft.com/ja-jp/library/ff966484.aspx より 

    * Windows Azure の実行時アカウントには、Windows セキュリティ イベント ログにアクセスするアクセス許可がないので、Windows セキュリティ イベント ログにアクセスしてイベントを抽出することはできません。

    SDK1.3では、スタートアップ時にAdminに昇格できるのでセキュリティのイベントログも取得するように設定できるかもしれません。
    http://msdn.microsoft.com/ja-jp/gg516514

    ただ、Adminに昇格しても現状FULL IISではご察しのような問題がございます。

    一旦、Full IISを使用しない +Adminモードでセキュリティのイベントログを設定できるかご確認されてみては如何でしょうか。


    検証後もしセキュリティログが取得が可能でFull IISをご利用される場合は、下記のいずれかの対策がとれるかと思います。

    Full IIS 利用時の対策1.
    http://convective.wordpress.com/2011/02/02/persisting-iis-logs-in-windows-azure-sdk-v1-3/


    ※コードは次のように修正した方がよいと思われます。
    iisLogPath = String.Format(@”{0}\W3SVC{1}”, siteLogFile.Directory, Id);

    iisLogPath = siteLogFile.Directory;

    Full IIS 利用時の対策2.
    http://social.msdn.microsoft.com/Forums/en/windowsazuretroubleshooting/thread/9b171c49-00b4-4b2c-9810-547067939942


    2011年2月16日 12:57
  • こんにちは。

    Eventlog.WriteEntryメソッドを使用してカスタムイベントソースのログを出力しようとしているという認識であっていますでしょうか。

    上記の前提になりますが、Windows Azure上ではWindowsイベントログにログ出力するのはあまり推奨されていなさそうです。
    記載されている通り、権限回りの制限等でカスタムイベントソースの登録ができない等の理由があるからかもしれません。

    またDesciptionプロパティというのはWADWindowsEventlogTableのDescriptionであってますでしょうか。
    カスタムイベントソースの場合、ここには出力されないようですね。
    ※Windowsのイベントビューアーを見ても「ソース"~"からのイベントID n の説明が見つかりません」と表示され
    WriteEntryメソッドで出力した文字列は一応埋め込まれます。

    ただ、カスタムイベントソースで上記の場合でも、WADWindowsEventlogTableのRawXML列にはすべて出力されていますので
    どうしても必要であればこちらを参照することも可能なようです。

    イベントログはWindows Azure OSだけに限らずWindows OSのWindowsイベントログに関する知識も少なからず必要ですので、
    コード修正が可能な場合は別のログ出力方法を検討するのもありかなと思います。

    == 追記 ======
    少し補足です。

    カスタムのイベントソースや文字列を含んだリソースは通常登録しないとイベントビューアーで参照した場合等に上記のように
    見つかりませんでした~的に表示されますが、リソースを正しく登録してあげると見れるようになります。

    リソースを登録する際はレジストリを触りますので権限ないとダメですが、スタートアップタスク等を利用してインスタンス起動時に登録してあげることで回避できるかもしれません。
    また上記の現象はイベントログをカスタムイベントソースが登録されていないPC上で見た場合も同じ現象になるかと思います。
    ただ診断モニタによってWADWindowsEventlogTableに出力されたものを再度イベントビューアーで見たりするのは手間ですので、人間がわかりやすい形式でみたい場合は別のログ出力の方法を選んだりするほうが良いのかなぁと個人的には思います。
    2011年2月16日 13:05
    モデレータ
  • Mayomayoさん、k.buchiさん返信ありがとうございます。

    SDK1.3ではAdminに昇格できるんですね。手元に実行出来る環境がないのですぐには確認できないですが、
    後ほど試してみたいと思います。

    k.buchiさんのご指摘のとおりDesciptionプロパティというのはWADWindowsEventlogTableのDescriptionのことです。
    実Azure上だと、イベントビューアーが使えないので、WADWindowsEventlogTableを見るしかないと思うのですが、
    RawXML列はかなり情報が探しづらいですね。

    と考えるとトレースログやカスタムログでの出力を考えたほうが良さそうですね。

    2011年2月16日 14:20
  • csdefに

    <Runtime executionContext="elevated" />
    を記述してロールのランタイムの権限をAdminに昇格させ、
    EventLog.WriteEntry("MySource", "警告メッセージ", EventLogEntryType.Warning); 
    のように、任意のメッセージソースを指定することでWADWindowsEventlogTableのDescriptionに
    メッセージとして指定した内容も出力されることが確認できました。
    返信を頂いた皆様、ありがとうございました。
    2011年2月17日 22:43
  • 自己レスです。

    イベントログ出力だけを目的とする場合、セキュリティを考えるとスタートアップタスクを使ったほうがいいような気がしてきました。
    下記のようなcmdファイルを作成し、プロジェクトファイルに追加。「出力ディレクトリにコピー」プロパティを「常にコピーする」にし、
    csdefファイルに以下のような記述を追加。
     
    csdef

    <Startup>
     <Task commandLine="mysetup.cmd" executionContext="elevated" taskType="background" />
    </Startup>
    
    

    mysetup.cmd

    reg add HKLM\SYSTEM\CurrentControlSet\services\eventlog\Application\Application /v EventMessageFile /t REG_EXPAND_SZ /d %SystemRoot%\\Microsoft.NET\Framework64\v4.0.30319\EventLogMessages.dll /f
    

    2011年2月25日 11:28