特集:事例で学ぶWindows Azure実用ポイント 業務システムでWindows Azureを使うための42の覚え書き シグマコンサルティング 橋本 圭一2010/02/23 |
|
|
●ログなどの環境依存の機能
◇11:採取可能なログと格納先
Windows Azureでは、ログはストレージ(テーブルやブロブ)に格納される。
テーブルに格納可能なログとしては、以下のものが挙げられる。
a)Windows Azureトレース・ログ(トレース出力の内容は独自に記述)
b)Windows診断インフラストラクチャ・ログ
c)Windowsイベント・ログ
d)パフォーマンス・カウンタ
ブロブに格納可能なログとしては、以下のものが挙げられる。
e)IIS 7.0ログ
f)IIS 7.0失敗した要求のトレース・ログ
g)Windows Azureクラッシュ・ダンプ
a)b)c)e)f)のログ出力方法は、後述の「◇12:ログの出力方法」で説明する。それ以外のログ出力方法は、下記の資料を参考にしてほしい。
- Channel 9:Exercise 3 - Monitoring Applications in Windows Azure(英語)
- MSDN:Initializing and Configuring Diagnostic Data Sources(英語)
◇12:ログの出力方法
クラウド・サービスのプロジェクトをVisual Studioで生成しただけでは、ログは出力されるようにはならない。下記のような手順で、ログ出力の処理を実装する必要がある。
(1)参照設定の追加
Microsoft.WindowsAzure.Diagnosticsアセンブリへの参照を追加する。
(2)各種ログの転送設定・出力設定の記述
各ロール内のWebRole.cs/WebRole.vbやWorkerRole.cs/WorkerRole.vbに、各種ログの転送設定などを追記する。下記のコードでは、「a)Windows Azureトレース・ログ」「b)Windows診断インフラストラクチャ・ログ」「c)Windowsイベント・ログ」「e)IIS 7.0ログ」の出力設定を行っている。
なお、Visual Studioのクラウド・サービスのプロジェクト・テンプレートで生成されるひな型のソース・コードには、一見すると「DiagnoticMonitar.Start」のような記述があり、ログ出力が開始されているようにも見えるが、各種ログをストレージに転送する処理が作成されていないので、例えば下記のような追記が必要だ。
|
||
各種ログ出力を有効化するためのサンプル・コード(上:C#、下:VB) | ||
このコードでは、「a)Windows Azureトレース・ログ」「b)Windows診断インフラストラクチャ・ログ」「c)Windowsイベント・ログ」「e)IIS 7.0ログ」が出力されるようにしている。 |
DiagnosticMonitor.Startメソッドの引数として指定している「DiagnosticsConnectionString」は、ログ出力先であるストレージへ接続するための接続文字列の設定(=キー名)である。この接続文字列の内容(=キー名に対する値)は、[ソリューション エクスプローラ]のクラウド・サービスのプロジェクト内にある、「Roles」フォルダの各ロールを右クリックし、表示されるコンテキスト・メニューから[プロパティ]を選択して各ロールのプロパティ・ページを開き、その[Settings](設定)タブで変更できる。
(3)「a)Windows Azureトレース・ログ」の出力設定
Web.configファイルの<configuration>要素内に、下記のような記述でトレース・リスナー設定(=<system.diagnostics>−<trace>−<listeners>要素)を追加する。
|
|
a)Windows Azureトレース・ログのリスナー設定 |
(4)「f)IIS 7.0失敗した要求のトレース・ログ」の出力設定
Web.configファイルの<system.webServer>要素内に、下記のような記述で、IIS 7.0の失敗した要求のトレース・ログの出力設定(=<tracing>−<traceFailedRequests>要素)を追加する。
|
|
f)IIS 7.0失敗した要求のトレース・ログの出力設定 |
(5)「a)Windows Azureトレース・ログ」の出力内容の記述
開発者が独自にトレース・ログを出力するには、例えば下記のようなコードを記述すればよい。
|
|
a)Windows Azureトレース・ログを出力するための記述 |
◇13:ログの確認ツール
Windows Azureのログは基本的にストレージに格納されるので、ログを参照するにはストレージの内容を閲覧するツールなどが必要だ。ちなみに、筆者が利用しているWindows Azureストレージ管理ツール「Cloud Storage Studio」を使うと、下の画面のようにログの確認を行える。
Windows Azureストレージ管理ツールを用いたログの確認 |
◇14:Windows Azureトレース・ログの閲覧
Windows Azureトレース・ログは、テーブル・ストレージの「WASLogsTable」テーブルに格納される。次の画面は、その内容を閲覧しているところだ。
Windows Azureトレース・ログの閲覧(Cloud Storage Studio)の例 |
◇15:IIS 7.0のログの閲覧
IIS 7.0ログやIIS 7.0失敗した要求のトレース・ログは、ブロブ・ストレージに格納される。次の画面は、IIS 7.0ログの内容(=「wad-iis-logfiles」コンテナ)を閲覧しているところだ。
Windows Azureトレース・ログの閲覧(Cloud Storage Studio)の例 |
また次の画面は、失敗した要求のトレース・ログの内容(=「wad-iis-failedreqlogfiles」コンテナ)を閲覧しているところだ。
Windows Azureトレース・ログの閲覧(Cloud Storage Studio)の例 |
◇16:サーバサイドの例外の確認
開発時は、下記のコード例のように、Web.configファイルの<customErrors>要素のmode属性を「Off」に設定してASP.NETアプリのカスタム・エラーを無効にする(=標準の詳細なエラー・メッセージが表示されるようにする)。こうすることで、サーバサイドで発生した例外を参照すると、問題の対処がしやすい(もちろん、本番時はエラー・メッセージを見せないことが望ましい)。
|
|
<customErrors>要素のmode属性を「Off」に設定する例(Web.config) |
◇17:セッション管理
Webロール・インスタンスが複数ある場合、セッション情報はインスタンス間で共有されない。そのため、インスタンス外部にセッション情報を格納する必要がある。これを実現するために、下記のリンク先の「Additional C# Samples」(C#のみ)に含まれる「AspProviders」というサンプル・ライブラリでは、ストレージ(テーブルとブロブ)にセッション情報を格納する機能が提供されている。
[ソリューション エクスプローラ]でAspProvidersのライブラリへの参照を設定し、カスタムのセッション状態プロバイダの構成設定をWeb.configファイルに記述することで、Sessionオブジェクトの内容がストレージに格納されるようになる。下記のコードは、その構成設定の例である。
|
|
カスタムのセッション状態プロバイダの構成設定(Web.config) | |
<add>要素の各属性は英語表記名を見れば、だいたい想像が付くだろう。applicationName属性の値は、テーブルのパーティションを決めるPartitionKeyプロパティの一部として使われる。 |
後は通常どおりSessionオブジェクトを利用すればよい。Sessionオブジェクトの利用方法については「連載:プログラミングASP.NET 第15回 セッションとビューステート」を参照してほしい。
◇18:リモート管理
提供するクラウド・サービスを夜間のみ停止させるなどの目的で、Windows Azureクラウド・サービスのデプロイ・実行・停止・削除、そのほかの管理作業をリモート管理したい場合がある。これを行う際には、Windows Azure Service Management APIを利用する必要があるが、このAPIをラップしたPowerShell Cmdlet(コマンドレット:PowerShell用のコマンド)として「Windows Azure Service Management CmdLets」(以降、Management CmdLets)が提供されているので、こちらを使う方が手軽である。
下記のコードは、Management CmdLetsでアプリを停止するサンプル・スクリプトである。
|
|
Management CmdLetsでアプリを停止するサンプル・スクリプト | |
<サービス名>は、Windows Azure Platform開発者ポータル上のWindows Azureクラウド・サービスの名前である。 <サブスクリプションID>は、そのクラウド・サービスの[Account]タブの[Subscription ID]欄に記載されている(例:「31a63f1e-0d10-4c63-a6a6-dcf065ac134a」のような)ID値である。 <証明書の母印>(Thumbprint)は、「8D3794AC5C41317C774F8E7B0E339FF40CF04FC3」のような値である。ここでは、「Get-Item cert:\CurrentUser\Root\8D3794AC5C41317C774F8E7B0E339FF40CF04FC3」というコマンドによって、クライアントにインストールされた特定の証明書を取得している。 |
また下記のコードは、Management CmdLetsでアプリを起動するサンプル・スクリプトである。
|
|
Management CmdLetsでアプリを起動するサンプル・スクリプト |
次の画面は、上記の「Management CmdLetsでアプリを停止するサンプル・スクリプト」を実行した結果だ。
Management CmdLetsでサービスを停止した例(Windows PowerShell) |
なお、Management CmdLetsを実行するには、事前に証明書の作成と設定が必要である。詳細な手順は、下記のリンク先の記事を参照していただきたい。
INDEX | ||
特集:事例で学ぶWindows Azure実用ポイント | ||
業務システムでWindows Azureを使うための42の覚え書き | ||
1.一般的なクラウドのメリットとデメリット/事例の紹介 | ||
2.42の覚え書き:構成と課金/デプロイ | ||
3.42の覚え書き:ログなどの環境依存の機能 | ||
4.42の覚え書き:SQL Azure/システム移行時の注意点/そのほか | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|
- - PR -