トップ回答者
イベントログの出力について

質問
-
イベントログの転送設定を行い、テーブルストレージ(WADWindowsEventLogsTable)にイベントログが出力されるようにしたのですが、
DescriptionプロパティにMessageとして設定した内容が出力されません。これは仕様なのでしょうか?
メッセージソースとしては、「Application」を指定しています。
開発環境では「Application」以外のメッセージソースを指定しても動作しますが、
実際のAzure環境では、「Application」以外のメッセージソースを指定すると異常終了してしまいます。
(恐らく、レジストリを更新する権限がないためだと思います。)
メッセージソースとして「Application」を使用して、DescriptionプロパティにMessageの内容を出力することは可能でしょうか?
もしくは、メッセージソースとして「Application」以外を使用することはできるのでしょうか?
回答
-
スパゲティさん
こんばんは、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月17日 22:36
すべての返信
-
スパゲティさん
こんばんは、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月17日 22:36
-
こんにちは。
Eventlog.WriteEntryメソッドを使用してカスタムイベントソースのログを出力しようとしているという認識であっていますでしょうか。
上記の前提になりますが、Windows Azure上ではWindowsイベントログにログ出力するのはあまり推奨されていなさそうです。記載されている通り、権限回りの制限等でカスタムイベントソースの登録ができない等の理由があるからかもしれません。
またDesciptionプロパティというのはWADWindowsEventlogTableのDescriptionであってますでしょうか。カスタムイベントソースの場合、ここには出力されないようですね。※Windowsのイベントビューアーを見ても「ソース"~"からのイベントID n の説明が見つかりません」と表示されWriteEntryメソッドで出力した文字列は一応埋め込まれます。
ただ、カスタムイベントソースで上記の場合でも、WADWindowsEventlogTableのRawXML列にはすべて出力されていますのでどうしても必要であればこちらを参照することも可能なようです。
イベントログはWindows Azure OSだけに限らずWindows OSのWindowsイベントログに関する知識も少なからず必要ですので、コード修正が可能な場合は別のログ出力方法を検討するのもありかなと思います。
== 追記 ======少し補足です。
カスタムのイベントソースや文字列を含んだリソースは通常登録しないとイベントビューアーで参照した場合等に上記のように見つかりませんでした~的に表示されますが、リソースを正しく登録してあげると見れるようになります。
リソースを登録する際はレジストリを触りますので権限ないとダメですが、スタートアップタスク等を利用してインスタンス起動時に登録してあげることで回避できるかもしれません。また上記の現象はイベントログをカスタムイベントソースが登録されていないPC上で見た場合も同じ現象になるかと思います。ただ診断モニタによってWADWindowsEventlogTableに出力されたものを再度イベントビューアーで見たりするのは手間ですので、人間がわかりやすい形式でみたい場合は別のログ出力の方法を選んだりするほうが良いのかなぁと個人的には思います。 -
Mayomayoさん、k.buchiさん返信ありがとうございます。
SDK1.3ではAdminに昇格できるんですね。手元に実行出来る環境がないのですぐには確認できないですが、
後ほど試してみたいと思います。k.buchiさんのご指摘のとおりDesciptionプロパティというのはWADWindowsEventlogTableのDescriptionのことです。
実Azure上だと、イベントビューアーが使えないので、WADWindowsEventlogTableを見るしかないと思うのですが、
RawXML列はかなり情報が探しづらいですね。と考えるとトレースログやカスタムログでの出力を考えたほうが良さそうですね。
-
自己レスです。
イベントログ出力だけを目的とする場合、セキュリティを考えるとスタートアップタスクを使ったほうがいいような気がしてきました。
下記のような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