Windows Azureのログ出力について、自分の理解を整理するためにまとめなど。
Windows Azureで出力できるログの種類は以下の通りであり、出力先がTableの
のものとBlobのものに分類される。
Tableに出力されるログは独自の形式にしたがって出力され、MSDNなどに
テーブル構造などが解説されているのを見たことがありません。
(どなたか知っていたら教えてください)
Blobに出力されるログは、ログファイルそのものがBlobに転送される仕組みに
なっている。
ログの種類 | 出力先 |
---|---|
トレースログ | Table |
パフォーマンスカウンタ | Table |
イベントログ | Table |
インフラログ | Table |
IISログ | Blob |
IIS失敗ログ | Blob |
クラッシュダンプ | Blob |
その他 独自ログ | Blob |
いずれにおいても、ログは、Windows Azure ストレージに直接出力されるわけではなく、
Windows Azureのローカルストレージに出力された後、設定した間隔でWindows Azure
ストレージに転送される。また、オンデマンド転送というのもできる(はず)
したがって、ロールが死んだりするその瞬間のログを確実にとれるのか? よく
分かっていません。
以下は、Tableに出力されるログクラスを中心に記述したクラス図。
DiagnosticsMonitorから、各ログに対応するインスタンスが取得できるため、
それらに転送時間を設定すればログを取得することができる。
自分的には、クラス図に起こすと結構分かりやすかったりするんで、おすすめ
なんですが、世間的にはどうなんでしょう。(astah Community版で描いたもの)
実際のコードは以下のような感じで、時と場合によりますが、OnStartで設定。
実際の転送間隔は、あまり短くないほうがよいようですが、適切な間隔が不明。
いずれにしろ、ログの転送はもっさりしているというか、いつ転送されるのか
よくわからないんで、うーんという感じ。オンプレミスみたいに、すぐココに
ログがあるわけではないので、なんともまどろっこしい。
public override bool OnStart() { // DiagnosticMonitorインスタンスを取得する。 var mconfig = DiagnosticMonitor.GetDefaultInitialConfiguration(); // Windows イベントログの設定 mconfig.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Verbose; mconfig.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromSeconds(30); // 通常のログの設定 (Traceクラスで出すやつ) mconfig.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose; mconfig.Logs.ScheduledTransferPeriod = TimeSpan.FromSeconds(30); // 構成の設定 DiagnosticMonitor.Start("DiagnosticsConnectionString", mconfig); // For information on handling configuration changes // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357. RoleEnvironment.Changing += RoleEnvironmentChanging; return base.OnStart(); }
TableXplorerで開発ストレージを覗いた様子
続くかも。
ログに関しては、TechDays 2010の T1-302「Windows Azure の管理を効率化する監視、ログ、管理 API 機能詳細」
が参考になると思います。PPTも、動画もアップされているので。